So I played create mod for over a year and never had a problem, but now the game just crashes when something moves (i.e mechanical pistons, windmills, gantry carriages etc) and I dont know what to do anymore, I changed the configs, disabled all mods and nothing works
Here are the logs:
[12:41:02] [main/INFO]: ModLauncher running: args [--username, Vulpes_Ignis, --version, create sad face, --gameDir, C:\Users\user\AppData\Roaming\.minecraft\versions\create sad face, --assetsDir, C:\Users\user\AppData\Roaming\.minecraft\assets, --assetIndex, 1.16, --uuid, 1182d9b928f8470fa996501056e8834b, --accessToken, ????????, --userType, mojang, --versionType, release, --width, 925, --height, 530, --launchTarget, fmlclient, --fml.forgeVersion, 36.2.39, --fml.mcVersion, 1.16.5, --fml.forgeGroup, net.minecraftforge, --fml.mcpVersion, 20210115.111550]
[12:41:02] [main/INFO]: ModLauncher 8.1.3+8.1.3+main-8.1.x.c94d18ec starting: java version 1.8.0_51 by Oracle Corporation
[12:41:02] [main/WARN]: LEGACY JDK DETECTED, SECURED JAR HANDLING DISABLED
[12:41:02] [main/INFO]: OptiFineTransformationService.onLoad
[12:41:02] [main/INFO]: OptiFine ZIP file: C:\Users\user\AppData\Roaming\.minecraft\versions\create sad face\mods\OptiFine-1.16.5_HD_U_G8_pre2.jar
[12:41:02] [main/INFO]: Target.PRE_CLASS is available
[12:41:03] [main/INFO]: Added Lets Encrypt root certificates as additional trust
[12:41:03] [main/INFO]: SpongePowered MIXIN Subsystem Version=0.8.4 Source=file:/C:/Users/user/AppData/Roaming/.minecraft/libraries/org/spongepowered/mixin/0.8.4/mixin-0.8.4.jar Service=ModLauncher Env=CLIENT
[12:41:03] [main/INFO]: OptiFineTransformationService.initialize
[12:41:05] [main/INFO]: OptiFineTransformationService.transformers
[12:41:05] [main/INFO]: Targets: 308
[12:41:07] [main/INFO]: additionalClassesLocator: [optifine., net.optifine.]
[12:41:07] [main/INFO]: Launching target 'fmlclient' with arguments [--version, create sad face, --gameDir, C:\Users\user\AppData\Roaming\.minecraft\versions\create sad face, --assetsDir, C:\Users\user\AppData\Roaming\.minecraft\assets, --uuid, 1182d9b928f8470fa996501056e8834b, --username, Vulpes_Ignis, --assetIndex, 1.16, --accessToken, ????????, --userType, mojang, --versionType, release, --width, 925, --height, 530]
[12:41:27] [main/INFO]: Environment: authHost='https://authserver.mojang.com', accountsHost='https://api.mojang.com', sessionHost='https://sessionserver.mojang.com', servicesHost='https://api.minecraftservices.com', name='PROD'
[12:41:27] [main/INFO]: Setting user: Vulpes_Ignis
[12:41:28] [main/INFO]: [OptiFine] (Reflector) Class not present: net.minecraft.launchwrapper.Launch
[12:41:28] [main/INFO]: Backend library: LWJGL version 3.2.2 build 10
[12:41:28] [main/INFO]: [OptiFine]
[12:41:28] [main/INFO]: [OptiFine] OptiFine_1.16.5_HD_U_G8_pre2
[12:41:28] [main/INFO]: [OptiFine] Build: 20210305-002749
[12:41:28] [main/INFO]: [OptiFine] OS: Windows 7 (amd64) version 6.1
[12:41:28] [main/INFO]: [OptiFine] Java: 1.8.0_51, Oracle Corporation
[12:41:28] [main/INFO]: [OptiFine] VM: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
[12:41:28] [main/INFO]: [OptiFine] LWJGL: 3.3.0 Win32 WGL EGL OSMesa VisualC DLL
[12:41:28] [main/INFO]: [OptiFine] OpenGL: Mobile Intel(R) 4 Series Express Chipset Family, version 2.1.0 - Build 8.15.10.2555, Intel
[12:41:28] [main/INFO]: [OptiFine] OpenGL Version: 2.1.0
[12:41:28] [main/INFO]: [OptiFine] OpenGL Fancy fog: Not available (GL_NV_fog_distance)
[12:41:28] [main/INFO]: [OptiFine] Maximum texture size: 4096x4096
[12:41:28] [main/INFO]: [Shaders] OpenGL Version: 2.1.0 - Build 8.15.10.2555
[12:41:28] [main/INFO]: [Shaders] Vendor: Intel
[12:41:28] [main/INFO]: [Shaders] Renderer: Mobile Intel(R) 4 Series Express Chipset Family
[12:41:28] [main/INFO]: [Shaders] Capabilities: 2.0 2.1 - - -
[12:41:28] [main/INFO]: [Shaders] GL_MAX_DRAW_BUFFERS: 8
[12:41:28] [main/INFO]: [Shaders] GL_MAX_COLOR_ATTACHMENTS_EXT: 8
[12:41:28] [main/INFO]: [Shaders] GL_MAX_TEXTURE_IMAGE_UNITS: 16
[12:41:28] [main/INFO]: [Shaders] Load shaders configuration.
[12:41:28] [main/INFO]: [Shaders] Save shaders configuration.
[12:41:28] [main/INFO]: [Shaders] No shaderpack loaded.
[12:41:28] [VersionCheck/INFO]: [OptiFine] Checking for new version
[12:41:28] [main/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.Loader
[12:41:28] [main/INFO]: [OptiFine] VboRegions not supported, missing: OpenGL 1.3, ARB_copy_buffer
[12:41:29] [VersionCheck/INFO]: [OptiFine] Version found: G7
[12:41:29] [modloading-worker-1/INFO]: Forge mod loading, version 36.2.39, for MC 1.16.5 with MCP 20210115.111550
[12:41:29] [modloading-worker-1/INFO]: MinecraftForge v36.2.39 Initialized
[12:41:30] [modloading-worker-0/INFO]: Optifine detected.
[12:41:30] [modloading-worker-0/INFO]: No shader config found.
[12:41:30] [modloading-worker-1/INFO]: Detected new forge version, registering events reflectively.
[12:41:39] [main/INFO]: Potentially Dangerous alternative prefix `minecraft` for name `milk`, expected `forge`. This could be a intended override, but in most cases indicates a broken mod.
[12:41:39] [main/INFO]: Potentially Dangerous alternative prefix `minecraft` for name `flowing_milk`, expected `forge`. This could be a intended override, but in most cases indicates a broken mod.
[12:41:42] [main/INFO]: Narrator library for x64 successfully loaded
[12:41:42] [main/INFO]: Reloading ResourceManager: Default, Mod Resources
[12:41:42] [main/INFO]: [OptiFine] *** Reloading textures ***
[12:41:42] [main/INFO]: [OptiFine] Resource packs: Mod Resources
[12:41:43] [main/INFO]: [OptiFine] *** Reflector Forge ***
[12:41:43] [main/INFO]: [OptiFine] (Reflector) Class not present: mods.betterfoliage.client.BetterFoliageClient
[12:41:43] [main/WARN]: [OptiFine] (Reflector) More than one method found: net.minecraftforge.client.ForgeHooksClient.renderMainMenu
[12:41:43] [main/WARN]: [OptiFine] (Reflector) - public static void net.minecraftforge.client.ForgeHooksClient.renderMainMenu(net.minecraft.client.gui.screen.MainMenuScreen,com.mojang.blaze3d.matrix.MatrixStack,net.minecraft.client.gui.FontRenderer,int,int,int)
[12:41:43] [main/WARN]: [OptiFine] (Reflector) - public static void net.minecraftforge.client.ForgeHooksClient.renderMainMenu(net.minecraft.client.gui.screen.MainMenuScreen,com.mojang.blaze3d.matrix.MatrixStack,net.minecraft.client.gui.FontRenderer,int,int)
[12:41:43] [main/INFO]: [OptiFine] (Reflector) Field not present: net.minecraftforge.client.model.pipeline.LightUtil.itemConsumer
[12:41:43] [main/INFO]: [OptiFine] (Reflector) Field not present: net.minecraftforge.client.model.pipeline.LightUtil.tessellator
[12:41:43] [main/INFO]: [OptiFine] (Reflector) Class not present: net.minecraftforge.fml.common.ModContainer
[12:41:43] [main/INFO]: [OptiFine] *** Reflector Vanilla ***
[12:41:51] [Worker-Main-2/INFO]: [OptiFine] Multitexture: false
[12:42:00] [Worker-Main-3/WARN]: [OptiFine] Unknown resource pack file: mod_resources
[12:42:00] [Worker-Main-3/WARN]: [OptiFine] Unknown resource pack file: mod_resources
[12:42:00] [Worker-Main-3/WARN]: [OptiFine] Unknown resource pack file: mod_resources
[12:42:00] [Worker-Main-3/WARN]: [OptiFine] Unknown resource pack file: mod_resources
[12:42:02] [Worker-Main-3/INFO]: [OptiFine] Multitexture: false
[12:42:02] [Worker-Main-3/WARN]: [OptiFine] Unknown resource pack file: mod_resources
[12:42:02] [Worker-Main-3/INFO]: [OptiFine] Multipass connected textures: false
[12:42:02] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/00_glass_white/glass_pane_white.properties
[12:42:02] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/00_glass_white/glass_white.properties
[12:42:02] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/01_glass_orange/glass_orange.properties
[12:42:02] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/01_glass_orange/glass_pane_orange.properties
[12:42:02] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/02_glass_magenta/glass_magenta.properties
[12:42:02] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/02_glass_magenta/glass_pane_magenta.properties
[12:42:02] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/03_glass_light_blue/glass_light_blue.properties
[12:42:02] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/03_glass_light_blue/glass_pane_light_blue.properties
[12:42:02] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/04_glass_yellow/glass_pane_yellow.properties
[12:42:02] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/04_glass_yellow/glass_yellow.properties
[12:42:02] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/05_glass_lime/glass_lime.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/05_glass_lime/glass_pane_lime.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/06_glass_pink/glass_pane_pink.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/06_glass_pink/glass_pink.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/07_glass_gray/glass_gray.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/07_glass_gray/glass_pane_gray.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/08_glass_light_gray/glass_light_gray.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/08_glass_light_gray/glass_pane_light_gray.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/09_glass_cyan/glass_cyan.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/09_glass_cyan/glass_pane_cyan.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/10_glass_purple/glass_pane_purple.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/10_glass_purple/glass_purple.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/11_glass_blue/glass_blue.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/11_glass_blue/glass_pane_blue.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/12_glass_brown/glass_brown.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/12_glass_brown/glass_pane_brown.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/13_glass_green/glass_green.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/13_glass_green/glass_pane_green.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/14_glass_red/glass_pane_red.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/14_glass_red/glass_red.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/15_glass_black/glass_black.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/15_glass_black/glass_pane_black.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/20_glass/glass.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/20_glass/glass_pane.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/30_bookshelf/bookshelf.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/40_sandstone/sandstone.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] ConnectedTextures: optifine/ctm/default/41_red_sandstone/red_sandstone.properties
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] Multipass connected textures: false
[12:42:03] [Worker-Main-3/INFO]: [OptiFine] BetterGrass: Parsing default configuration optifine/bettergrass.properties
[12:42:12] [Worker-Main-3/INFO]: [OptiFine] Mipmap levels: 4
[12:42:12] [Worker-Main-4/INFO]: [OptiFine] Multitexture: false
[12:42:12] [Worker-Main-5/INFO]: [OptiFine] Multitexture: false
[12:42:12] [Forge Version Check/INFO]: [forge] Starting version check at https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json
[12:42:13] [Worker-Main-6/INFO]: [OptiFine] Multitexture: false
[12:42:13] [Worker-Main-2/INFO]: [OptiFine] Scaled non power of 2: jei:gui/icons/recipe_transfer, 7 -> 14
[12:42:14] [Forge Version Check/INFO]: [forge] Found status: AHEAD Current: 36.2.39 Target: null
[12:42:18] [Worker-Main-3/INFO]: [OptiFine] Multitexture: false
[12:42:18] [Worker-Main-3/INFO]: [OptiFine] Sprite size: 64
[12:42:18] [Worker-Main-3/INFO]: [OptiFine] Mipmap levels: 6
[12:42:18] [Worker-Main-3/INFO]: [OptiFine] Multitexture: false
[12:42:19] [Worker-Main-3/INFO]: [OptiFine] Sprite size: 64
[12:42:19] [Worker-Main-3/INFO]: [OptiFine] Mipmap levels: 6
[12:42:19] [Worker-Main-3/INFO]: [OptiFine] Multitexture: false
[12:42:19] [Worker-Main-3/INFO]: [OptiFine] Sprite size: 64
[12:42:19] [Worker-Main-3/INFO]: [OptiFine] Mipmap levels: 6
[12:42:19] [Worker-Main-3/INFO]: [OptiFine] Multitexture: false
[12:42:19] [Worker-Main-3/INFO]: [OptiFine] Sprite size: 64
[12:42:19] [Worker-Main-3/INFO]: [OptiFine] Mipmap levels: 6
[12:42:19] [Worker-Main-3/INFO]: [OptiFine] Multitexture: false
[12:42:19] [Worker-Main-3/INFO]: [OptiFine] Sprite size: 64
[12:42:19] [Worker-Main-3/INFO]: [OptiFine] Mipmap levels: 6
[12:42:19] [Worker-Main-3/INFO]: [OptiFine] Multitexture: false
[12:42:19] [Worker-Main-3/INFO]: [OptiFine] Sprite size: 64
[12:42:19] [Worker-Main-3/INFO]: [OptiFine] Mipmap levels: 6
[12:42:20] [main/INFO]: No shader config found.
[12:42:20] [main/INFO]: Loading context 'flywheel:context/crumbling'
[12:42:20] [main/ERROR]: Shader compilation log for create:rotating.vert: No errors.
[12:42:20] [main/ERROR]: Source for shader 'create:rotating.vert':
1: #version 110
2: #define DEBUG_RAINBOW
3:
4: #define PI 3.1415926538
5:
6: uniform float uTime;
7: uniform mat4 uViewProjection;
8: uniform vec3 uCameraPos;
9:
10: #if defined(USE_FOG)
11: varying float FragDistance;
12: #endif
13:
14: void FLWFinalizeWorldPos(inout vec4 worldPos) {
15: #if defined(USE_FOG)
16: FragDistance = length(worldPos.xyz - uCameraPos);
17: #endif
18:
19: gl_Position = uViewProjection * worldPos;
20: }
21:
22: void FLWFinalizeNormal(inout vec3 normal) {
23: // noop
24: }
25:
26:
27: mat4 rotate(vec3 axis, float angle) {
28: float s = sin(angle);
29: float c = cos(angle);
30: float oc = 1. - c;
31:
32: vec3 sa = axis * s;
33:
34: mat4 mr = mat4(1.);
35: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
36: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
37: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
38:
39: return mr;
40: }
41:
42: mat4 rotation(vec3 rot) {
43: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
44: }
45:
46: mat3 modelToNormal(mat4 mat) {
47: // Discard the edges. This won't be accurate for scaled or skewed matrices,
48: // but we don't have to work with those often.
49: mat3 m;
50: m[0] = mat[0].xyz;
51: m[1] = mat[1].xyz;
52: m[2] = mat[2].xyz;
53: return m;
54: }
55:
56: float diffuse(vec3 normal) {
57: vec3 n2 = normal * normal * vec3(.6, .25, .8);
58: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
59: }
60:
61:
62: struct Rotating {
63: vec2 light;
64: vec4 color;
65: vec3 pos;
66: float speed;
67: float offset;
68: vec3 axis;
69: };
70:
71:
72: struct Vertex {
73: vec3 pos;
74: vec3 normal;
75: vec2 texCoords;
76: };
77:
78: struct BlockFrag {
79: vec2 texCoords;
80: vec4 color;
81: float diffuse;
82: vec2 light;
83: };
84:
85: mat4 kineticRotation(float offset, float speed, vec3 axis) {
86: float degrees = offset + uTime * speed * 3./10.;
87: float angle = fract(degrees / 360.) * PI * 2.;
88:
89: return rotate(axis, angle);
90: }
91:
92: BlockFrag FLWMain(Vertex v, Rotating instance) {
93: mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis);
94:
95: vec4 worldPos = spin * vec4(v.pos - .5, 1.);
96: worldPos += vec4(instance.pos + .5, 0.);
97:
98: vec3 norm = modelToNormal(spin) * v.normal;
99:
100: FLWFinalizeWorldPos(worldPos);
101: FLWFinalizeNormal(norm);
102:
103: BlockFrag b;
104: b.diffuse = diffuse(norm);
105: b.texCoords = v.texCoords;
106: b.light = instance.light;
107:
108: #if defined(DEBUG_RAINBOW)
109: b.color = instance.color;
110: #elif defined(DEBUG_NORMAL)
111: b.color = vec4(norm, 1.);
112: #else
113: b.color = vec4(1.);
114: #endif
115:
116: return b;
117: }
118: attribute vec3 a_v_pos;
119: attribute vec3 a_v_normal;
120: attribute vec2 a_v_texCoords;
121:
122: attribute vec2 a_i_light;
123: attribute vec4 a_i_color;
124: attribute vec3 a_i_pos;
125: attribute float a_i_speed;
126: attribute float a_i_offset;
127: attribute vec3 a_i_axis;
128:
129:
130: varying vec2 v2f_texCoords;
131: varying vec4 v2f_color;
132: varying float v2f_diffuse;
133: varying vec2 v2f_light;
134:
135:
136: void main() {
137: Vertex v;
138: v.pos = a_v_pos;
139: v.normal = a_v_normal;
140: v.texCoords = a_v_texCoords;
141:
142:
143: Rotating i;
144: i.light = a_i_light;
145: i.color = a_i_color;
146: i.pos = a_i_pos;
147: i.speed = a_i_speed;
148: i.offset = a_i_offset;
149: i.axis = a_i_axis;
150:
151:
152: BlockFrag o = FLWMain(v, i);
153:
154: v2f_texCoords = o.texCoords;
155: v2f_color = o.color;
156: v2f_diffuse = o.diffuse;
157: v2f_light = o.light;
158:
159: }
[12:42:20] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:20] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_RAINBOW
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25:
26: uniform vec2 uTextureScale;
27: uniform sampler2D uBlockAtlas;
28: uniform sampler2D uLightMap;
29: uniform sampler2D uCrumbling;
30:
31: vec4 FLWBlockTexture(vec2 texCoords) {
32: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
33: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
34: cr.a = cr.a * diffuseAlpha;
35: return cr;
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return vec4(1.);
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:42:20] [main/ERROR]: Shader compilation log for create:rotating.vert: No errors.
[12:42:20] [main/ERROR]: Source for shader 'create:rotating.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #define PI 3.1415926538
5:
6: uniform float uTime;
7: uniform mat4 uViewProjection;
8: uniform vec3 uCameraPos;
9:
10: #if defined(USE_FOG)
11: varying float FragDistance;
12: #endif
13:
14: void FLWFinalizeWorldPos(inout vec4 worldPos) {
15: #if defined(USE_FOG)
16: FragDistance = length(worldPos.xyz - uCameraPos);
17: #endif
18:
19: gl_Position = uViewProjection * worldPos;
20: }
21:
22: void FLWFinalizeNormal(inout vec3 normal) {
23: // noop
24: }
25:
26:
27: mat4 rotate(vec3 axis, float angle) {
28: float s = sin(angle);
29: float c = cos(angle);
30: float oc = 1. - c;
31:
32: vec3 sa = axis * s;
33:
34: mat4 mr = mat4(1.);
35: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
36: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
37: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
38:
39: return mr;
40: }
41:
42: mat4 rotation(vec3 rot) {
43: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
44: }
45:
46: mat3 modelToNormal(mat4 mat) {
47: // Discard the edges. This won't be accurate for scaled or skewed matrices,
48: // but we don't have to work with those often.
49: mat3 m;
50: m[0] = mat[0].xyz;
51: m[1] = mat[1].xyz;
52: m[2] = mat[2].xyz;
53: return m;
54: }
55:
56: float diffuse(vec3 normal) {
57: vec3 n2 = normal * normal * vec3(.6, .25, .8);
58: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
59: }
60:
61:
62: struct Rotating {
63: vec2 light;
64: vec4 color;
65: vec3 pos;
66: float speed;
67: float offset;
68: vec3 axis;
69: };
70:
71:
72: struct Vertex {
73: vec3 pos;
74: vec3 normal;
75: vec2 texCoords;
76: };
77:
78: struct BlockFrag {
79: vec2 texCoords;
80: vec4 color;
81: float diffuse;
82: vec2 light;
83: };
84:
85: mat4 kineticRotation(float offset, float speed, vec3 axis) {
86: float degrees = offset + uTime * speed * 3./10.;
87: float angle = fract(degrees / 360.) * PI * 2.;
88:
89: return rotate(axis, angle);
90: }
91:
92: BlockFrag FLWMain(Vertex v, Rotating instance) {
93: mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis);
94:
95: vec4 worldPos = spin * vec4(v.pos - .5, 1.);
96: worldPos += vec4(instance.pos + .5, 0.);
97:
98: vec3 norm = modelToNormal(spin) * v.normal;
99:
100: FLWFinalizeWorldPos(worldPos);
101: FLWFinalizeNormal(norm);
102:
103: BlockFrag b;
104: b.diffuse = diffuse(norm);
105: b.texCoords = v.texCoords;
106: b.light = instance.light;
107:
108: #if defined(DEBUG_RAINBOW)
109: b.color = instance.color;
110: #elif defined(DEBUG_NORMAL)
111: b.color = vec4(norm, 1.);
112: #else
113: b.color = vec4(1.);
114: #endif
115:
116: return b;
117: }
118: attribute vec3 a_v_pos;
119: attribute vec3 a_v_normal;
120: attribute vec2 a_v_texCoords;
121:
122: attribute vec2 a_i_light;
123: attribute vec4 a_i_color;
124: attribute vec3 a_i_pos;
125: attribute float a_i_speed;
126: attribute float a_i_offset;
127: attribute vec3 a_i_axis;
128:
129:
130: varying vec2 v2f_texCoords;
131: varying vec4 v2f_color;
132: varying float v2f_diffuse;
133: varying vec2 v2f_light;
134:
135:
136: void main() {
137: Vertex v;
138: v.pos = a_v_pos;
139: v.normal = a_v_normal;
140: v.texCoords = a_v_texCoords;
141:
142:
143: Rotating i;
144: i.light = a_i_light;
145: i.color = a_i_color;
146: i.pos = a_i_pos;
147: i.speed = a_i_speed;
148: i.offset = a_i_offset;
149: i.axis = a_i_axis;
150:
151:
152: BlockFrag o = FLWMain(v, i);
153:
154: v2f_texCoords = o.texCoords;
155: v2f_color = o.color;
156: v2f_diffuse = o.diffuse;
157: v2f_light = o.light;
158:
159: }
[12:42:21] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:21] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25:
26: uniform vec2 uTextureScale;
27: uniform sampler2D uBlockAtlas;
28: uniform sampler2D uLightMap;
29: uniform sampler2D uCrumbling;
30:
31: vec4 FLWBlockTexture(vec2 texCoords) {
32: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
33: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
34: cr.a = cr.a * diffuseAlpha;
35: return cr;
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return vec4(1.);
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:42:21] [main/ERROR]: Shader compilation log for create:rotating.vert: No errors.
[12:42:21] [main/ERROR]: Source for shader 'create:rotating.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: mat4 rotate(vec3 axis, float angle) {
29: float s = sin(angle);
30: float c = cos(angle);
31: float oc = 1. - c;
32:
33: vec3 sa = axis * s;
34:
35: mat4 mr = mat4(1.);
36: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
37: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
38: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
39:
40: return mr;
41: }
42:
43: mat4 rotation(vec3 rot) {
44: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
45: }
46:
47: mat3 modelToNormal(mat4 mat) {
48: // Discard the edges. This won't be accurate for scaled or skewed matrices,
49: // but we don't have to work with those often.
50: mat3 m;
51: m[0] = mat[0].xyz;
52: m[1] = mat[1].xyz;
53: m[2] = mat[2].xyz;
54: return m;
55: }
56:
57: float diffuse(vec3 normal) {
58: vec3 n2 = normal * normal * vec3(.6, .25, .8);
59: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
60: }
61:
62:
63: struct Rotating {
64: vec2 light;
65: vec4 color;
66: vec3 pos;
67: float speed;
68: float offset;
69: vec3 axis;
70: };
71:
72:
73: struct Vertex {
74: vec3 pos;
75: vec3 normal;
76: vec2 texCoords;
77: };
78:
79: struct BlockFrag {
80: vec2 texCoords;
81: vec4 color;
82: float diffuse;
83: vec2 light;
84: };
85:
86: mat4 kineticRotation(float offset, float speed, vec3 axis) {
87: float degrees = offset + uTime * speed * 3./10.;
88: float angle = fract(degrees / 360.) * PI * 2.;
89:
90: return rotate(axis, angle);
91: }
92:
93: BlockFrag FLWMain(Vertex v, Rotating instance) {
94: mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis);
95:
96: vec4 worldPos = spin * vec4(v.pos - .5, 1.);
97: worldPos += vec4(instance.pos + .5, 0.);
98:
99: vec3 norm = modelToNormal(spin) * v.normal;
100:
101: FLWFinalizeWorldPos(worldPos);
102: FLWFinalizeNormal(norm);
103:
104: BlockFrag b;
105: b.diffuse = diffuse(norm);
106: b.texCoords = v.texCoords;
107: b.light = instance.light;
108:
109: #if defined(DEBUG_RAINBOW)
110: b.color = instance.color;
111: #elif defined(DEBUG_NORMAL)
112: b.color = vec4(norm, 1.);
113: #else
114: b.color = vec4(1.);
115: #endif
116:
117: return b;
118: }
119: attribute vec3 a_v_pos;
120: attribute vec3 a_v_normal;
121: attribute vec2 a_v_texCoords;
122:
123: attribute vec2 a_i_light;
124: attribute vec4 a_i_color;
125: attribute vec3 a_i_pos;
126: attribute float a_i_speed;
127: attribute float a_i_offset;
128: attribute vec3 a_i_axis;
129:
130:
131: varying vec2 v2f_texCoords;
132: varying vec4 v2f_color;
133: varying float v2f_diffuse;
134: varying vec2 v2f_light;
135:
136:
137: void main() {
138: Vertex v;
139: v.pos = a_v_pos;
140: v.normal = a_v_normal;
141: v.texCoords = a_v_texCoords;
142:
143:
144: Rotating i;
145: i.light = a_i_light;
146: i.color = a_i_color;
147: i.pos = a_i_pos;
148: i.speed = a_i_speed;
149: i.offset = a_i_offset;
150: i.axis = a_i_axis;
151:
152:
153: BlockFrag o = FLWMain(v, i);
154:
155: v2f_texCoords = o.texCoords;
156: v2f_color = o.color;
157: v2f_diffuse = o.diffuse;
158: v2f_light = o.light;
159:
160: }
[12:42:23] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:23] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26:
27: uniform vec2 uTextureScale;
28: uniform sampler2D uBlockAtlas;
29: uniform sampler2D uLightMap;
30: uniform sampler2D uCrumbling;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
34: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
35: cr.a = cr.a * diffuseAlpha;
36: return cr;
37: }
38:
39: void FLWFinalizeColor(vec4 color) {
40: #if defined(USE_FOG)
41: float a = color.a;
42: float fog = clamp(FLWFogFactor(), 0., 1.);
43:
44: color = mix(uFogColor, color, fog);
45: color.a = a;
46: #endif
47:
48: gl_FragColor = color;
49: }
50:
51: vec4 FLWLight(vec2 lightCoords) {
52: return vec4(1.);
53: }
54:
55:
56:
57: struct BlockFrag {
58: vec2 texCoords;
59: vec4 color;
60: float diffuse;
61: vec2 light;
62: };
63:
64: void FLWMain(BlockFrag r) {
65: vec4 tex = FLWBlockTexture(r.texCoords);
66:
67: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
68:
69: // flw_WorldPos = ;
70: // flw_Normal = ;
71: // flw_Albedo = tex.rgb;
72: // flw_Alpha = tex.a;
73: // flw_LightMap = r.light;
74: // flw_Tint = r.color;
75: FLWFinalizeColor(color);
76: }
77:
78: varying vec2 v2f_texCoords;
79: varying vec4 v2f_color;
80: varying float v2f_diffuse;
81: varying vec2 v2f_light;
82:
83:
84: //vec3 flw_WorldPos;
85: //vec3 flw_Normal;
86: //vec3 flw_Albedo;
87: //float flw_Alpha;
88: //vec2 flw_LightMap;
89: //vec4 flw_Tint;
90:
91: void main() {
92: BlockFrag f;
93: f.texCoords = v2f_texCoords;
94: f.color = v2f_color;
95: f.diffuse = v2f_diffuse;
96: f.light = v2f_light;
97:
98:
99: FLWMain(f);
100: }
[12:42:23] [main/ERROR]: Shader compilation log for create:rotating.vert: No errors.
[12:42:23] [main/ERROR]: Source for shader 'create:rotating.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: mat4 rotate(vec3 axis, float angle) {
29: float s = sin(angle);
30: float c = cos(angle);
31: float oc = 1. - c;
32:
33: vec3 sa = axis * s;
34:
35: mat4 mr = mat4(1.);
36: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
37: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
38: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
39:
40: return mr;
41: }
42:
43: mat4 rotation(vec3 rot) {
44: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
45: }
46:
47: mat3 modelToNormal(mat4 mat) {
48: // Discard the edges. This won't be accurate for scaled or skewed matrices,
49: // but we don't have to work with those often.
50: mat3 m;
51: m[0] = mat[0].xyz;
52: m[1] = mat[1].xyz;
53: m[2] = mat[2].xyz;
54: return m;
55: }
56:
57: float diffuse(vec3 normal) {
58: vec3 n2 = normal * normal * vec3(.6, .25, .8);
59: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
60: }
61:
62:
63: struct Rotating {
64: vec2 light;
65: vec4 color;
66: vec3 pos;
67: float speed;
68: float offset;
69: vec3 axis;
70: };
71:
72:
73: struct Vertex {
74: vec3 pos;
75: vec3 normal;
76: vec2 texCoords;
77: };
78:
79: struct BlockFrag {
80: vec2 texCoords;
81: vec4 color;
82: float diffuse;
83: vec2 light;
84: };
85:
86: mat4 kineticRotation(float offset, float speed, vec3 axis) {
87: float degrees = offset + uTime * speed * 3./10.;
88: float angle = fract(degrees / 360.) * PI * 2.;
89:
90: return rotate(axis, angle);
91: }
92:
93: BlockFrag FLWMain(Vertex v, Rotating instance) {
94: mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis);
95:
96: vec4 worldPos = spin * vec4(v.pos - .5, 1.);
97: worldPos += vec4(instance.pos + .5, 0.);
98:
99: vec3 norm = modelToNormal(spin) * v.normal;
100:
101: FLWFinalizeWorldPos(worldPos);
102: FLWFinalizeNormal(norm);
103:
104: BlockFrag b;
105: b.diffuse = diffuse(norm);
106: b.texCoords = v.texCoords;
107: b.light = instance.light;
108:
109: #if defined(DEBUG_RAINBOW)
110: b.color = instance.color;
111: #elif defined(DEBUG_NORMAL)
112: b.color = vec4(norm, 1.);
113: #else
114: b.color = vec4(1.);
115: #endif
116:
117: return b;
118: }
119: attribute vec3 a_v_pos;
120: attribute vec3 a_v_normal;
121: attribute vec2 a_v_texCoords;
122:
123: attribute vec2 a_i_light;
124: attribute vec4 a_i_color;
125: attribute vec3 a_i_pos;
126: attribute float a_i_speed;
127: attribute float a_i_offset;
128: attribute vec3 a_i_axis;
129:
130:
131: varying vec2 v2f_texCoords;
132: varying vec4 v2f_color;
133: varying float v2f_diffuse;
134: varying vec2 v2f_light;
135:
136:
137: void main() {
138: Vertex v;
139: v.pos = a_v_pos;
140: v.normal = a_v_normal;
141: v.texCoords = a_v_texCoords;
142:
143:
144: Rotating i;
145: i.light = a_i_light;
146: i.color = a_i_color;
147: i.pos = a_i_pos;
148: i.speed = a_i_speed;
149: i.offset = a_i_offset;
150: i.axis = a_i_axis;
151:
152:
153: BlockFrag o = FLWMain(v, i);
154:
155: v2f_texCoords = o.texCoords;
156: v2f_color = o.color;
157: v2f_diffuse = o.diffuse;
158: v2f_light = o.light;
159:
160: }
[12:42:24] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:24] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26:
27: uniform vec2 uTextureScale;
28: uniform sampler2D uBlockAtlas;
29: uniform sampler2D uLightMap;
30: uniform sampler2D uCrumbling;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
34: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
35: cr.a = cr.a * diffuseAlpha;
36: return cr;
37: }
38:
39: void FLWFinalizeColor(vec4 color) {
40: #if defined(USE_FOG)
41: float a = color.a;
42: float fog = clamp(FLWFogFactor(), 0., 1.);
43:
44: color = mix(uFogColor, color, fog);
45: color.a = a;
46: #endif
47:
48: gl_FragColor = color;
49: }
50:
51: vec4 FLWLight(vec2 lightCoords) {
52: return vec4(1.);
53: }
54:
55:
56:
57: struct BlockFrag {
58: vec2 texCoords;
59: vec4 color;
60: float diffuse;
61: vec2 light;
62: };
63:
64: void FLWMain(BlockFrag r) {
65: vec4 tex = FLWBlockTexture(r.texCoords);
66:
67: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
68:
69: // flw_WorldPos = ;
70: // flw_Normal = ;
71: // flw_Albedo = tex.rgb;
72: // flw_Alpha = tex.a;
73: // flw_LightMap = r.light;
74: // flw_Tint = r.color;
75: FLWFinalizeColor(color);
76: }
77:
78: varying vec2 v2f_texCoords;
79: varying vec4 v2f_color;
80: varying float v2f_diffuse;
81: varying vec2 v2f_light;
82:
83:
84: //vec3 flw_WorldPos;
85: //vec3 flw_Normal;
86: //vec3 flw_Albedo;
87: //float flw_Alpha;
88: //vec2 flw_LightMap;
89: //vec4 flw_Tint;
90:
91: void main() {
92: BlockFrag f;
93: f.texCoords = v2f_texCoords;
94: f.color = v2f_color;
95: f.diffuse = v2f_diffuse;
96: f.light = v2f_light;
97:
98:
99: FLWMain(f);
100: }
[12:42:24] [main/ERROR]: Shader compilation log for create:rotating.vert: No errors.
[12:42:24] [main/ERROR]: Source for shader 'create:rotating.vert':
1: #version 110
2:
3: #define PI 3.1415926538
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: mat4 rotate(vec3 axis, float angle) {
27: float s = sin(angle);
28: float c = cos(angle);
29: float oc = 1. - c;
30:
31: vec3 sa = axis * s;
32:
33: mat4 mr = mat4(1.);
34: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
35: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
36: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
37:
38: return mr;
39: }
40:
41: mat4 rotation(vec3 rot) {
42: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
43: }
44:
45: mat3 modelToNormal(mat4 mat) {
46: // Discard the edges. This won't be accurate for scaled or skewed matrices,
47: // but we don't have to work with those often.
48: mat3 m;
49: m[0] = mat[0].xyz;
50: m[1] = mat[1].xyz;
51: m[2] = mat[2].xyz;
52: return m;
53: }
54:
55: float diffuse(vec3 normal) {
56: vec3 n2 = normal * normal * vec3(.6, .25, .8);
57: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
58: }
59:
60:
61: struct Rotating {
62: vec2 light;
63: vec4 color;
64: vec3 pos;
65: float speed;
66: float offset;
67: vec3 axis;
68: };
69:
70:
71: struct Vertex {
72: vec3 pos;
73: vec3 normal;
74: vec2 texCoords;
75: };
76:
77: struct BlockFrag {
78: vec2 texCoords;
79: vec4 color;
80: float diffuse;
81: vec2 light;
82: };
83:
84: mat4 kineticRotation(float offset, float speed, vec3 axis) {
85: float degrees = offset + uTime * speed * 3./10.;
86: float angle = fract(degrees / 360.) * PI * 2.;
87:
88: return rotate(axis, angle);
89: }
90:
91: BlockFrag FLWMain(Vertex v, Rotating instance) {
92: mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis);
93:
94: vec4 worldPos = spin * vec4(v.pos - .5, 1.);
95: worldPos += vec4(instance.pos + .5, 0.);
96:
97: vec3 norm = modelToNormal(spin) * v.normal;
98:
99: FLWFinalizeWorldPos(worldPos);
100: FLWFinalizeNormal(norm);
101:
102: BlockFrag b;
103: b.diffuse = diffuse(norm);
104: b.texCoords = v.texCoords;
105: b.light = instance.light;
106:
107: #if defined(DEBUG_RAINBOW)
108: b.color = instance.color;
109: #elif defined(DEBUG_NORMAL)
110: b.color = vec4(norm, 1.);
111: #else
112: b.color = vec4(1.);
113: #endif
114:
115: return b;
116: }
117: attribute vec3 a_v_pos;
118: attribute vec3 a_v_normal;
119: attribute vec2 a_v_texCoords;
120:
121: attribute vec2 a_i_light;
122: attribute vec4 a_i_color;
123: attribute vec3 a_i_pos;
124: attribute float a_i_speed;
125: attribute float a_i_offset;
126: attribute vec3 a_i_axis;
127:
128:
129: varying vec2 v2f_texCoords;
130: varying vec4 v2f_color;
131: varying float v2f_diffuse;
132: varying vec2 v2f_light;
133:
134:
135: void main() {
136: Vertex v;
137: v.pos = a_v_pos;
138: v.normal = a_v_normal;
139: v.texCoords = a_v_texCoords;
140:
141:
142: Rotating i;
143: i.light = a_i_light;
144: i.color = a_i_color;
145: i.pos = a_i_pos;
146: i.speed = a_i_speed;
147: i.offset = a_i_offset;
148: i.axis = a_i_axis;
149:
150:
151: BlockFrag o = FLWMain(v, i);
152:
153: v2f_texCoords = o.texCoords;
154: v2f_color = o.color;
155: v2f_diffuse = o.diffuse;
156: v2f_light = o.light;
157:
158: }
[12:42:24] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:24] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24:
25: uniform vec2 uTextureScale;
26: uniform sampler2D uBlockAtlas;
27: uniform sampler2D uLightMap;
28: uniform sampler2D uCrumbling;
29:
30: vec4 FLWBlockTexture(vec2 texCoords) {
31: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
32: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
33: cr.a = cr.a * diffuseAlpha;
34: return cr;
35: }
36:
37: void FLWFinalizeColor(vec4 color) {
38: #if defined(USE_FOG)
39: float a = color.a;
40: float fog = clamp(FLWFogFactor(), 0., 1.);
41:
42: color = mix(uFogColor, color, fog);
43: color.a = a;
44: #endif
45:
46: gl_FragColor = color;
47: }
48:
49: vec4 FLWLight(vec2 lightCoords) {
50: return vec4(1.);
51: }
52:
53:
54:
55: struct BlockFrag {
56: vec2 texCoords;
57: vec4 color;
58: float diffuse;
59: vec2 light;
60: };
61:
62: void FLWMain(BlockFrag r) {
63: vec4 tex = FLWBlockTexture(r.texCoords);
64:
65: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
66:
67: // flw_WorldPos = ;
68: // flw_Normal = ;
69: // flw_Albedo = tex.rgb;
70: // flw_Alpha = tex.a;
71: // flw_LightMap = r.light;
72: // flw_Tint = r.color;
73: FLWFinalizeColor(color);
74: }
75:
76: varying vec2 v2f_texCoords;
77: varying vec4 v2f_color;
78: varying float v2f_diffuse;
79: varying vec2 v2f_light;
80:
81:
82: //vec3 flw_WorldPos;
83: //vec3 flw_Normal;
84: //vec3 flw_Albedo;
85: //float flw_Alpha;
86: //vec2 flw_LightMap;
87: //vec4 flw_Tint;
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:42:24] [main/ERROR]: Shader compilation log for create:contraption_actor.vert: No errors.
[12:42:24] [main/ERROR]: Source for shader 'create:contraption_actor.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #define PI 3.1415926538
5:
6: uniform float uTime;
7: uniform mat4 uViewProjection;
8: uniform vec3 uCameraPos;
9:
10: #if defined(USE_FOG)
11: varying float FragDistance;
12: #endif
13:
14: void FLWFinalizeWorldPos(inout vec4 worldPos) {
15: #if defined(USE_FOG)
16: FragDistance = length(worldPos.xyz - uCameraPos);
17: #endif
18:
19: gl_Position = uViewProjection * worldPos;
20: }
21:
22: void FLWFinalizeNormal(inout vec3 normal) {
23: // noop
24: }
25:
26:
27: mat4 rotate(vec3 axis, float angle) {
28: float s = sin(angle);
29: float c = cos(angle);
30: float oc = 1. - c;
31:
32: vec3 sa = axis * s;
33:
34: mat4 mr = mat4(1.);
35: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
36: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
37: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
38:
39: return mr;
40: }
41:
42: mat4 rotation(vec3 rot) {
43: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
44: }
45:
46: mat3 modelToNormal(mat4 mat) {
47: // Discard the edges. This won't be accurate for scaled or skewed matrices,
48: // but we don't have to work with those often.
49: mat3 m;
50: m[0] = mat[0].xyz;
51: m[1] = mat[1].xyz;
52: m[2] = mat[2].xyz;
53: return m;
54: }
55:
56: #define PIOVER2 1.5707963268
57:
58: vec4 quat(vec3 axis, float angle) {
59: float halfAngle = angle * PIOVER2 / 180.0;
60: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
61: return vec4(axis.xyz * cs.y, cs.x);
62: }
63:
64: vec4 quatMult(vec4 q1, vec4 q2) {
65: // disgustingly vectorized quaternion multiplication
66: vec4 a = q1.w * q2.xyzw;
67: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
68: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
69: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
70:
71: return a + b + c + d;
72: }
73:
74: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
75: vec3 i = q.xyz;
76: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
77: }
78:
79: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
80: return rotateVertexByQuat(v, quat(axis, angle));
81: }
82:
83: float diffuse(vec3 normal) {
84: vec3 n2 = normal * normal * vec3(.6, .25, .8);
85: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
86: }
87:
88:
89: struct Actor {
90: vec3 pos;
91: vec2 light;
92: float offset;
93: vec3 axis;
94: vec4 rotation;
95: vec3 rotationCenter;
96: float speed;
97: };
98:
99:
100: struct Vertex {
101: vec3 pos;
102: vec3 normal;
103: vec2 texCoords;
104: };
105:
106: struct BlockFrag {
107: vec2 texCoords;
108: vec4 color;
109: float diffuse;
110: vec2 light;
111: };
112:
113: BlockFrag FLWMain(Vertex v, Actor instance) {
114: float degrees = instance.offset + uTime * instance.speed / 20.;
115: //float angle = fract(degrees / 360.) * PI * 2.;
116:
117: vec4 kineticRot = quat(instance.axis, degrees);
118: vec3 rotated = rotateVertexByQuat(v.pos - instance.rotationCenter, kineticRot) + instance.rotationCenter;
119:
120: vec4 worldPos = vec4(rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5, 1.);
121: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, kineticRot), instance.rotation);
122:
123: FLWFinalizeWorldPos(worldPos);
124: FLWFinalizeNormal(norm);
125:
126: BlockFrag b;
127: b.diffuse = diffuse(norm);
128: b.texCoords = v.texCoords;
129: b.light = instance.light;
130:
131: #if defined(DEBUG_NORMAL)
132: b.color = vec4(norm, 1.);
133: #else
134: b.color = vec4(1.);
135: #endif
136:
137: return b;
138: }
139: attribute vec3 a_v_pos;
140: attribute vec3 a_v_normal;
141: attribute vec2 a_v_texCoords;
142:
143: attribute vec3 a_i_pos;
144: attribute vec2 a_i_light;
145: attribute float a_i_offset;
146: attribute vec3 a_i_axis;
147: attribute vec4 a_i_rotation;
148: attribute vec3 a_i_rotationCenter;
149: attribute float a_i_speed;
150:
151:
152: varying vec2 v2f_texCoords;
153: varying vec4 v2f_color;
154: varying float v2f_diffuse;
155: varying vec2 v2f_light;
156:
157:
158: void main() {
159: Vertex v;
160: v.pos = a_v_pos;
161: v.normal = a_v_normal;
162: v.texCoords = a_v_texCoords;
163:
164:
165: Actor i;
166: i.pos = a_i_pos;
167: i.light = a_i_light;
168: i.offset = a_i_offset;
169: i.axis = a_i_axis;
170: i.rotation = a_i_rotation;
171: i.rotationCenter = a_i_rotationCenter;
172: i.speed = a_i_speed;
173:
174:
175: BlockFrag o = FLWMain(v, i);
176:
177: v2f_texCoords = o.texCoords;
178: v2f_color = o.color;
179: v2f_diffuse = o.diffuse;
180: v2f_light = o.light;
181:
182: }
[12:42:24] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:24] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25:
26: uniform vec2 uTextureScale;
27: uniform sampler2D uBlockAtlas;
28: uniform sampler2D uLightMap;
29: uniform sampler2D uCrumbling;
30:
31: vec4 FLWBlockTexture(vec2 texCoords) {
32: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
33: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
34: cr.a = cr.a * diffuseAlpha;
35: return cr;
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return vec4(1.);
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:42:24] [main/ERROR]: Shader compilation log for create:contraption_actor.vert: No errors.
[12:42:24] [main/ERROR]: Source for shader 'create:contraption_actor.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: mat4 rotate(vec3 axis, float angle) {
29: float s = sin(angle);
30: float c = cos(angle);
31: float oc = 1. - c;
32:
33: vec3 sa = axis * s;
34:
35: mat4 mr = mat4(1.);
36: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
37: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
38: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
39:
40: return mr;
41: }
42:
43: mat4 rotation(vec3 rot) {
44: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
45: }
46:
47: mat3 modelToNormal(mat4 mat) {
48: // Discard the edges. This won't be accurate for scaled or skewed matrices,
49: // but we don't have to work with those often.
50: mat3 m;
51: m[0] = mat[0].xyz;
52: m[1] = mat[1].xyz;
53: m[2] = mat[2].xyz;
54: return m;
55: }
56:
57: #define PIOVER2 1.5707963268
58:
59: vec4 quat(vec3 axis, float angle) {
60: float halfAngle = angle * PIOVER2 / 180.0;
61: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
62: return vec4(axis.xyz * cs.y, cs.x);
63: }
64:
65: vec4 quatMult(vec4 q1, vec4 q2) {
66: // disgustingly vectorized quaternion multiplication
67: vec4 a = q1.w * q2.xyzw;
68: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
69: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
70: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
71:
72: return a + b + c + d;
73: }
74:
75: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
76: vec3 i = q.xyz;
77: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
78: }
79:
80: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
81: return rotateVertexByQuat(v, quat(axis, angle));
82: }
83:
84: float diffuse(vec3 normal) {
85: vec3 n2 = normal * normal * vec3(.6, .25, .8);
86: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
87: }
88:
89:
90: struct Actor {
91: vec3 pos;
92: vec2 light;
93: float offset;
94: vec3 axis;
95: vec4 rotation;
96: vec3 rotationCenter;
97: float speed;
98: };
99:
100:
101: struct Vertex {
102: vec3 pos;
103: vec3 normal;
104: vec2 texCoords;
105: };
106:
107: struct BlockFrag {
108: vec2 texCoords;
109: vec4 color;
110: float diffuse;
111: vec2 light;
112: };
113:
114: BlockFrag FLWMain(Vertex v, Actor instance) {
115: float degrees = instance.offset + uTime * instance.speed / 20.;
116: //float angle = fract(degrees / 360.) * PI * 2.;
117:
118: vec4 kineticRot = quat(instance.axis, degrees);
119: vec3 rotated = rotateVertexByQuat(v.pos - instance.rotationCenter, kineticRot) + instance.rotationCenter;
120:
121: vec4 worldPos = vec4(rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5, 1.);
122: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, kineticRot), instance.rotation);
123:
124: FLWFinalizeWorldPos(worldPos);
125: FLWFinalizeNormal(norm);
126:
127: BlockFrag b;
128: b.diffuse = diffuse(norm);
129: b.texCoords = v.texCoords;
130: b.light = instance.light;
131:
132: #if defined(DEBUG_NORMAL)
133: b.color = vec4(norm, 1.);
134: #else
135: b.color = vec4(1.);
136: #endif
137:
138: return b;
139: }
140: attribute vec3 a_v_pos;
141: attribute vec3 a_v_normal;
142: attribute vec2 a_v_texCoords;
143:
144: attribute vec3 a_i_pos;
145: attribute vec2 a_i_light;
146: attribute float a_i_offset;
147: attribute vec3 a_i_axis;
148: attribute vec4 a_i_rotation;
149: attribute vec3 a_i_rotationCenter;
150: attribute float a_i_speed;
151:
152:
153: varying vec2 v2f_texCoords;
154: varying vec4 v2f_color;
155: varying float v2f_diffuse;
156: varying vec2 v2f_light;
157:
158:
159: void main() {
160: Vertex v;
161: v.pos = a_v_pos;
162: v.normal = a_v_normal;
163: v.texCoords = a_v_texCoords;
164:
165:
166: Actor i;
167: i.pos = a_i_pos;
168: i.light = a_i_light;
169: i.offset = a_i_offset;
170: i.axis = a_i_axis;
171: i.rotation = a_i_rotation;
172: i.rotationCenter = a_i_rotationCenter;
173: i.speed = a_i_speed;
174:
175:
176: BlockFrag o = FLWMain(v, i);
177:
178: v2f_texCoords = o.texCoords;
179: v2f_color = o.color;
180: v2f_diffuse = o.diffuse;
181: v2f_light = o.light;
182:
183: }
[12:42:24] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:24] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26:
27: uniform vec2 uTextureScale;
28: uniform sampler2D uBlockAtlas;
29: uniform sampler2D uLightMap;
30: uniform sampler2D uCrumbling;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
34: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
35: cr.a = cr.a * diffuseAlpha;
36: return cr;
37: }
38:
39: void FLWFinalizeColor(vec4 color) {
40: #if defined(USE_FOG)
41: float a = color.a;
42: float fog = clamp(FLWFogFactor(), 0., 1.);
43:
44: color = mix(uFogColor, color, fog);
45: color.a = a;
46: #endif
47:
48: gl_FragColor = color;
49: }
50:
51: vec4 FLWLight(vec2 lightCoords) {
52: return vec4(1.);
53: }
54:
55:
56:
57: struct BlockFrag {
58: vec2 texCoords;
59: vec4 color;
60: float diffuse;
61: vec2 light;
62: };
63:
64: void FLWMain(BlockFrag r) {
65: vec4 tex = FLWBlockTexture(r.texCoords);
66:
67: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
68:
69: // flw_WorldPos = ;
70: // flw_Normal = ;
71: // flw_Albedo = tex.rgb;
72: // flw_Alpha = tex.a;
73: // flw_LightMap = r.light;
74: // flw_Tint = r.color;
75: FLWFinalizeColor(color);
76: }
77:
78: varying vec2 v2f_texCoords;
79: varying vec4 v2f_color;
80: varying float v2f_diffuse;
81: varying vec2 v2f_light;
82:
83:
84: //vec3 flw_WorldPos;
85: //vec3 flw_Normal;
86: //vec3 flw_Albedo;
87: //float flw_Alpha;
88: //vec2 flw_LightMap;
89: //vec4 flw_Tint;
90:
91: void main() {
92: BlockFrag f;
93: f.texCoords = v2f_texCoords;
94: f.color = v2f_color;
95: f.diffuse = v2f_diffuse;
96: f.light = v2f_light;
97:
98:
99: FLWMain(f);
100: }
[12:42:24] [main/ERROR]: Shader compilation log for create:contraption_actor.vert: No errors.
[12:42:24] [main/ERROR]: Source for shader 'create:contraption_actor.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: mat4 rotate(vec3 axis, float angle) {
29: float s = sin(angle);
30: float c = cos(angle);
31: float oc = 1. - c;
32:
33: vec3 sa = axis * s;
34:
35: mat4 mr = mat4(1.);
36: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
37: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
38: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
39:
40: return mr;
41: }
42:
43: mat4 rotation(vec3 rot) {
44: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
45: }
46:
47: mat3 modelToNormal(mat4 mat) {
48: // Discard the edges. This won't be accurate for scaled or skewed matrices,
49: // but we don't have to work with those often.
50: mat3 m;
51: m[0] = mat[0].xyz;
52: m[1] = mat[1].xyz;
53: m[2] = mat[2].xyz;
54: return m;
55: }
56:
57: #define PIOVER2 1.5707963268
58:
59: vec4 quat(vec3 axis, float angle) {
60: float halfAngle = angle * PIOVER2 / 180.0;
61: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
62: return vec4(axis.xyz * cs.y, cs.x);
63: }
64:
65: vec4 quatMult(vec4 q1, vec4 q2) {
66: // disgustingly vectorized quaternion multiplication
67: vec4 a = q1.w * q2.xyzw;
68: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
69: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
70: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
71:
72: return a + b + c + d;
73: }
74:
75: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
76: vec3 i = q.xyz;
77: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
78: }
79:
80: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
81: return rotateVertexByQuat(v, quat(axis, angle));
82: }
83:
84: float diffuse(vec3 normal) {
85: vec3 n2 = normal * normal * vec3(.6, .25, .8);
86: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
87: }
88:
89:
90: struct Actor {
91: vec3 pos;
92: vec2 light;
93: float offset;
94: vec3 axis;
95: vec4 rotation;
96: vec3 rotationCenter;
97: float speed;
98: };
99:
100:
101: struct Vertex {
102: vec3 pos;
103: vec3 normal;
104: vec2 texCoords;
105: };
106:
107: struct BlockFrag {
108: vec2 texCoords;
109: vec4 color;
110: float diffuse;
111: vec2 light;
112: };
113:
114: BlockFrag FLWMain(Vertex v, Actor instance) {
115: float degrees = instance.offset + uTime * instance.speed / 20.;
116: //float angle = fract(degrees / 360.) * PI * 2.;
117:
118: vec4 kineticRot = quat(instance.axis, degrees);
119: vec3 rotated = rotateVertexByQuat(v.pos - instance.rotationCenter, kineticRot) + instance.rotationCenter;
120:
121: vec4 worldPos = vec4(rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5, 1.);
122: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, kineticRot), instance.rotation);
123:
124: FLWFinalizeWorldPos(worldPos);
125: FLWFinalizeNormal(norm);
126:
127: BlockFrag b;
128: b.diffuse = diffuse(norm);
129: b.texCoords = v.texCoords;
130: b.light = instance.light;
131:
132: #if defined(DEBUG_NORMAL)
133: b.color = vec4(norm, 1.);
134: #else
135: b.color = vec4(1.);
136: #endif
137:
138: return b;
139: }
140: attribute vec3 a_v_pos;
141: attribute vec3 a_v_normal;
142: attribute vec2 a_v_texCoords;
143:
144: attribute vec3 a_i_pos;
145: attribute vec2 a_i_light;
146: attribute float a_i_offset;
147: attribute vec3 a_i_axis;
148: attribute vec4 a_i_rotation;
149: attribute vec3 a_i_rotationCenter;
150: attribute float a_i_speed;
151:
152:
153: varying vec2 v2f_texCoords;
154: varying vec4 v2f_color;
155: varying float v2f_diffuse;
156: varying vec2 v2f_light;
157:
158:
159: void main() {
160: Vertex v;
161: v.pos = a_v_pos;
162: v.normal = a_v_normal;
163: v.texCoords = a_v_texCoords;
164:
165:
166: Actor i;
167: i.pos = a_i_pos;
168: i.light = a_i_light;
169: i.offset = a_i_offset;
170: i.axis = a_i_axis;
171: i.rotation = a_i_rotation;
172: i.rotationCenter = a_i_rotationCenter;
173: i.speed = a_i_speed;
174:
175:
176: BlockFrag o = FLWMain(v, i);
177:
178: v2f_texCoords = o.texCoords;
179: v2f_color = o.color;
180: v2f_diffuse = o.diffuse;
181: v2f_light = o.light;
182:
183: }
[12:42:24] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:24] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26:
27: uniform vec2 uTextureScale;
28: uniform sampler2D uBlockAtlas;
29: uniform sampler2D uLightMap;
30: uniform sampler2D uCrumbling;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
34: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
35: cr.a = cr.a * diffuseAlpha;
36: return cr;
37: }
38:
39: void FLWFinalizeColor(vec4 color) {
40: #if defined(USE_FOG)
41: float a = color.a;
42: float fog = clamp(FLWFogFactor(), 0., 1.);
43:
44: color = mix(uFogColor, color, fog);
45: color.a = a;
46: #endif
47:
48: gl_FragColor = color;
49: }
50:
51: vec4 FLWLight(vec2 lightCoords) {
52: return vec4(1.);
53: }
54:
55:
56:
57: struct BlockFrag {
58: vec2 texCoords;
59: vec4 color;
60: float diffuse;
61: vec2 light;
62: };
63:
64: void FLWMain(BlockFrag r) {
65: vec4 tex = FLWBlockTexture(r.texCoords);
66:
67: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
68:
69: // flw_WorldPos = ;
70: // flw_Normal = ;
71: // flw_Albedo = tex.rgb;
72: // flw_Alpha = tex.a;
73: // flw_LightMap = r.light;
74: // flw_Tint = r.color;
75: FLWFinalizeColor(color);
76: }
77:
78: varying vec2 v2f_texCoords;
79: varying vec4 v2f_color;
80: varying float v2f_diffuse;
81: varying vec2 v2f_light;
82:
83:
84: //vec3 flw_WorldPos;
85: //vec3 flw_Normal;
86: //vec3 flw_Albedo;
87: //float flw_Alpha;
88: //vec2 flw_LightMap;
89: //vec4 flw_Tint;
90:
91: void main() {
92: BlockFrag f;
93: f.texCoords = v2f_texCoords;
94: f.color = v2f_color;
95: f.diffuse = v2f_diffuse;
96: f.light = v2f_light;
97:
98:
99: FLWMain(f);
100: }
[12:42:25] [main/ERROR]: Shader compilation log for create:contraption_actor.vert: No errors.
[12:42:25] [main/ERROR]: Source for shader 'create:contraption_actor.vert':
1: #version 110
2:
3: #define PI 3.1415926538
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: mat4 rotate(vec3 axis, float angle) {
27: float s = sin(angle);
28: float c = cos(angle);
29: float oc = 1. - c;
30:
31: vec3 sa = axis * s;
32:
33: mat4 mr = mat4(1.);
34: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
35: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
36: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
37:
38: return mr;
39: }
40:
41: mat4 rotation(vec3 rot) {
42: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
43: }
44:
45: mat3 modelToNormal(mat4 mat) {
46: // Discard the edges. This won't be accurate for scaled or skewed matrices,
47: // but we don't have to work with those often.
48: mat3 m;
49: m[0] = mat[0].xyz;
50: m[1] = mat[1].xyz;
51: m[2] = mat[2].xyz;
52: return m;
53: }
54:
55: #define PIOVER2 1.5707963268
56:
57: vec4 quat(vec3 axis, float angle) {
58: float halfAngle = angle * PIOVER2 / 180.0;
59: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
60: return vec4(axis.xyz * cs.y, cs.x);
61: }
62:
63: vec4 quatMult(vec4 q1, vec4 q2) {
64: // disgustingly vectorized quaternion multiplication
65: vec4 a = q1.w * q2.xyzw;
66: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
67: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
68: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
69:
70: return a + b + c + d;
71: }
72:
73: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
74: vec3 i = q.xyz;
75: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
76: }
77:
78: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
79: return rotateVertexByQuat(v, quat(axis, angle));
80: }
81:
82: float diffuse(vec3 normal) {
83: vec3 n2 = normal * normal * vec3(.6, .25, .8);
84: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
85: }
86:
87:
88: struct Actor {
89: vec3 pos;
90: vec2 light;
91: float offset;
92: vec3 axis;
93: vec4 rotation;
94: vec3 rotationCenter;
95: float speed;
96: };
97:
98:
99: struct Vertex {
100: vec3 pos;
101: vec3 normal;
102: vec2 texCoords;
103: };
104:
105: struct BlockFrag {
106: vec2 texCoords;
107: vec4 color;
108: float diffuse;
109: vec2 light;
110: };
111:
112: BlockFrag FLWMain(Vertex v, Actor instance) {
113: float degrees = instance.offset + uTime * instance.speed / 20.;
114: //float angle = fract(degrees / 360.) * PI * 2.;
115:
116: vec4 kineticRot = quat(instance.axis, degrees);
117: vec3 rotated = rotateVertexByQuat(v.pos - instance.rotationCenter, kineticRot) + instance.rotationCenter;
118:
119: vec4 worldPos = vec4(rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5, 1.);
120: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, kineticRot), instance.rotation);
121:
122: FLWFinalizeWorldPos(worldPos);
123: FLWFinalizeNormal(norm);
124:
125: BlockFrag b;
126: b.diffuse = diffuse(norm);
127: b.texCoords = v.texCoords;
128: b.light = instance.light;
129:
130: #if defined(DEBUG_NORMAL)
131: b.color = vec4(norm, 1.);
132: #else
133: b.color = vec4(1.);
134: #endif
135:
136: return b;
137: }
138: attribute vec3 a_v_pos;
139: attribute vec3 a_v_normal;
140: attribute vec2 a_v_texCoords;
141:
142: attribute vec3 a_i_pos;
143: attribute vec2 a_i_light;
144: attribute float a_i_offset;
145: attribute vec3 a_i_axis;
146: attribute vec4 a_i_rotation;
147: attribute vec3 a_i_rotationCenter;
148: attribute float a_i_speed;
149:
150:
151: varying vec2 v2f_texCoords;
152: varying vec4 v2f_color;
153: varying float v2f_diffuse;
154: varying vec2 v2f_light;
155:
156:
157: void main() {
158: Vertex v;
159: v.pos = a_v_pos;
160: v.normal = a_v_normal;
161: v.texCoords = a_v_texCoords;
162:
163:
164: Actor i;
165: i.pos = a_i_pos;
166: i.light = a_i_light;
167: i.offset = a_i_offset;
168: i.axis = a_i_axis;
169: i.rotation = a_i_rotation;
170: i.rotationCenter = a_i_rotationCenter;
171: i.speed = a_i_speed;
172:
173:
174: BlockFrag o = FLWMain(v, i);
175:
176: v2f_texCoords = o.texCoords;
177: v2f_color = o.color;
178: v2f_diffuse = o.diffuse;
179: v2f_light = o.light;
180:
181: }
[12:42:26] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:26] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24:
25: uniform vec2 uTextureScale;
26: uniform sampler2D uBlockAtlas;
27: uniform sampler2D uLightMap;
28: uniform sampler2D uCrumbling;
29:
30: vec4 FLWBlockTexture(vec2 texCoords) {
31: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
32: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
33: cr.a = cr.a * diffuseAlpha;
34: return cr;
35: }
36:
37: void FLWFinalizeColor(vec4 color) {
38: #if defined(USE_FOG)
39: float a = color.a;
40: float fog = clamp(FLWFogFactor(), 0., 1.);
41:
42: color = mix(uFogColor, color, fog);
43: color.a = a;
44: #endif
45:
46: gl_FragColor = color;
47: }
48:
49: vec4 FLWLight(vec2 lightCoords) {
50: return vec4(1.);
51: }
52:
53:
54:
55: struct BlockFrag {
56: vec2 texCoords;
57: vec4 color;
58: float diffuse;
59: vec2 light;
60: };
61:
62: void FLWMain(BlockFrag r) {
63: vec4 tex = FLWBlockTexture(r.texCoords);
64:
65: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
66:
67: // flw_WorldPos = ;
68: // flw_Normal = ;
69: // flw_Albedo = tex.rgb;
70: // flw_Alpha = tex.a;
71: // flw_LightMap = r.light;
72: // flw_Tint = r.color;
73: FLWFinalizeColor(color);
74: }
75:
76: varying vec2 v2f_texCoords;
77: varying vec4 v2f_color;
78: varying float v2f_diffuse;
79: varying vec2 v2f_light;
80:
81:
82: //vec3 flw_WorldPos;
83: //vec3 flw_Normal;
84: //vec3 flw_Albedo;
85: //float flw_Alpha;
86: //vec2 flw_LightMap;
87: //vec4 flw_Tint;
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:42:26] [main/ERROR]: Shader compilation log for create:flap.vert: No errors.
[12:42:26] [main/ERROR]: Source for shader 'create:flap.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #define PI 3.1415926538
5:
6: uniform float uTime;
7: uniform mat4 uViewProjection;
8: uniform vec3 uCameraPos;
9:
10: #if defined(USE_FOG)
11: varying float FragDistance;
12: #endif
13:
14: void FLWFinalizeWorldPos(inout vec4 worldPos) {
15: #if defined(USE_FOG)
16: FragDistance = length(worldPos.xyz - uCameraPos);
17: #endif
18:
19: gl_Position = uViewProjection * worldPos;
20: }
21:
22: void FLWFinalizeNormal(inout vec3 normal) {
23: // noop
24: }
25:
26:
27: mat4 rotate(vec3 axis, float angle) {
28: float s = sin(angle);
29: float c = cos(angle);
30: float oc = 1. - c;
31:
32: vec3 sa = axis * s;
33:
34: mat4 mr = mat4(1.);
35: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
36: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
37: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
38:
39: return mr;
40: }
41:
42: mat4 rotation(vec3 rot) {
43: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
44: }
45:
46: mat3 modelToNormal(mat4 mat) {
47: // Discard the edges. This won't be accurate for scaled or skewed matrices,
48: // but we don't have to work with those often.
49: mat3 m;
50: m[0] = mat[0].xyz;
51: m[1] = mat[1].xyz;
52: m[2] = mat[2].xyz;
53: return m;
54: }
55:
56: #define PIOVER2 1.5707963268
57:
58: vec4 quat(vec3 axis, float angle) {
59: float halfAngle = angle * PIOVER2 / 180.0;
60: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
61: return vec4(axis.xyz * cs.y, cs.x);
62: }
63:
64: vec4 quatMult(vec4 q1, vec4 q2) {
65: // disgustingly vectorized quaternion multiplication
66: vec4 a = q1.w * q2.xyzw;
67: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
68: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
69: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
70:
71: return a + b + c + d;
72: }
73:
74: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
75: vec3 i = q.xyz;
76: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
77: }
78:
79: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
80: return rotateVertexByQuat(v, quat(axis, angle));
81: }
82:
83: float diffuse(vec3 normal) {
84: vec3 n2 = normal * normal * vec3(.6, .25, .8);
85: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
86: }
87:
88:
89: struct Flap {
90: vec3 instancePos;
91: vec2 light;
92: vec3 segmentOffset;
93: vec3 pivot;
94: float horizontalAngle;
95: float intensity;
96: float flapScale;
97: float flapness;
98: };
99:
100:
101: struct Vertex {
102: vec3 pos;
103: vec3 normal;
104: vec2 texCoords;
105: };
106:
107: struct BlockFrag {
108: vec2 texCoords;
109: vec4 color;
110: float diffuse;
111: vec2 light;
112: };
113:
114:
115: float toRad(float degrees) {
116: return fract(degrees / 360.) * PI * 2.;
117: }
118:
119: float getFlapAngle(float flapness, float intensity, float scale) {
120: float absFlap = abs(flapness);
121:
122: float angle = sin((1. - absFlap) * PI * intensity) * 30. * flapness * scale;
123:
124: float halfAngle = angle * 0.5;
125:
126: float which = step(0., flapness);// 0 if negative, 1 if positive
127: float degrees = which * halfAngle + (1. - which) * angle;// branchless conditional multiply
128:
129: return degrees;
130: }
131:
132: BlockFrag FLWMain(Vertex v, Flap flap) {
133: float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale);
134:
135: vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle);
136: vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle);
137:
138: vec3 rotated = rotateVertexByQuat(v.pos - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset;
139: rotated = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5;
140:
141: vec4 worldPos = vec4(rotated, 1.);
142: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, flapRotation), orientation);
143:
144: FLWFinalizeWorldPos(worldPos);
145: FLWFinalizeNormal(norm);
146:
147: BlockFrag b;
148: b.diffuse = diffuse(norm);
149: b.texCoords = v.texCoords;
150: b.light = flap.light;
151: #if defined(DEBUG_NORMAL)
152: b.color = vec4(norm, 1.);
153: #else
154: b.color = vec4(1.);
155: #endif
156: return b;
157: }
158: attribute vec3 a_v_pos;
159: attribute vec3 a_v_normal;
160: attribute vec2 a_v_texCoords;
161:
162: attribute vec3 a_i_instancePos;
163: attribute vec2 a_i_light;
164: attribute vec3 a_i_segmentOffset;
165: attribute vec3 a_i_pivot;
166: attribute float a_i_horizontalAngle;
167: attribute float a_i_intensity;
168: attribute float a_i_flapScale;
169: attribute float a_i_flapness;
170:
171:
172: varying vec2 v2f_texCoords;
173: varying vec4 v2f_color;
174: varying float v2f_diffuse;
175: varying vec2 v2f_light;
176:
177:
178: void main() {
179: Vertex v;
180: v.pos = a_v_pos;
181: v.normal = a_v_normal;
182: v.texCoords = a_v_texCoords;
183:
184:
185: Flap i;
186: i.instancePos = a_i_instancePos;
187: i.light = a_i_light;
188: i.segmentOffset = a_i_segmentOffset;
189: i.pivot = a_i_pivot;
190: i.horizontalAngle = a_i_horizontalAngle;
191: i.intensity = a_i_intensity;
192: i.flapScale = a_i_flapScale;
193: i.flapness = a_i_flapness;
194:
195:
196: BlockFrag o = FLWMain(v, i);
197:
198: v2f_texCoords = o.texCoords;
199: v2f_color = o.color;
200: v2f_diffuse = o.diffuse;
201: v2f_light = o.light;
202:
203: }
[12:42:27] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:27] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25:
26: uniform vec2 uTextureScale;
27: uniform sampler2D uBlockAtlas;
28: uniform sampler2D uLightMap;
29: uniform sampler2D uCrumbling;
30:
31: vec4 FLWBlockTexture(vec2 texCoords) {
32: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
33: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
34: cr.a = cr.a * diffuseAlpha;
35: return cr;
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return vec4(1.);
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:42:30] [main/ERROR]: Shader compilation log for create:flap.vert: No errors.
[12:42:30] [main/ERROR]: Source for shader 'create:flap.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: mat4 rotate(vec3 axis, float angle) {
29: float s = sin(angle);
30: float c = cos(angle);
31: float oc = 1. - c;
32:
33: vec3 sa = axis * s;
34:
35: mat4 mr = mat4(1.);
36: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
37: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
38: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
39:
40: return mr;
41: }
42:
43: mat4 rotation(vec3 rot) {
44: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
45: }
46:
47: mat3 modelToNormal(mat4 mat) {
48: // Discard the edges. This won't be accurate for scaled or skewed matrices,
49: // but we don't have to work with those often.
50: mat3 m;
51: m[0] = mat[0].xyz;
52: m[1] = mat[1].xyz;
53: m[2] = mat[2].xyz;
54: return m;
55: }
56:
57: #define PIOVER2 1.5707963268
58:
59: vec4 quat(vec3 axis, float angle) {
60: float halfAngle = angle * PIOVER2 / 180.0;
61: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
62: return vec4(axis.xyz * cs.y, cs.x);
63: }
64:
65: vec4 quatMult(vec4 q1, vec4 q2) {
66: // disgustingly vectorized quaternion multiplication
67: vec4 a = q1.w * q2.xyzw;
68: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
69: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
70: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
71:
72: return a + b + c + d;
73: }
74:
75: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
76: vec3 i = q.xyz;
77: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
78: }
79:
80: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
81: return rotateVertexByQuat(v, quat(axis, angle));
82: }
83:
84: float diffuse(vec3 normal) {
85: vec3 n2 = normal * normal * vec3(.6, .25, .8);
86: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
87: }
88:
89:
90: struct Flap {
91: vec3 instancePos;
92: vec2 light;
93: vec3 segmentOffset;
94: vec3 pivot;
95: float horizontalAngle;
96: float intensity;
97: float flapScale;
98: float flapness;
99: };
100:
101:
102: struct Vertex {
103: vec3 pos;
104: vec3 normal;
105: vec2 texCoords;
106: };
107:
108: struct BlockFrag {
109: vec2 texCoords;
110: vec4 color;
111: float diffuse;
112: vec2 light;
113: };
114:
115:
116: float toRad(float degrees) {
117: return fract(degrees / 360.) * PI * 2.;
118: }
119:
120: float getFlapAngle(float flapness, float intensity, float scale) {
121: float absFlap = abs(flapness);
122:
123: float angle = sin((1. - absFlap) * PI * intensity) * 30. * flapness * scale;
124:
125: float halfAngle = angle * 0.5;
126:
127: float which = step(0., flapness);// 0 if negative, 1 if positive
128: float degrees = which * halfAngle + (1. - which) * angle;// branchless conditional multiply
129:
130: return degrees;
131: }
132:
133: BlockFrag FLWMain(Vertex v, Flap flap) {
134: float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale);
135:
136: vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle);
137: vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle);
138:
139: vec3 rotated = rotateVertexByQuat(v.pos - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset;
140: rotated = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5;
141:
142: vec4 worldPos = vec4(rotated, 1.);
143: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, flapRotation), orientation);
144:
145: FLWFinalizeWorldPos(worldPos);
146: FLWFinalizeNormal(norm);
147:
148: BlockFrag b;
149: b.diffuse = diffuse(norm);
150: b.texCoords = v.texCoords;
151: b.light = flap.light;
152: #if defined(DEBUG_NORMAL)
153: b.color = vec4(norm, 1.);
154: #else
155: b.color = vec4(1.);
156: #endif
157: return b;
158: }
159: attribute vec3 a_v_pos;
160: attribute vec3 a_v_normal;
161: attribute vec2 a_v_texCoords;
162:
163: attribute vec3 a_i_instancePos;
164: attribute vec2 a_i_light;
165: attribute vec3 a_i_segmentOffset;
166: attribute vec3 a_i_pivot;
167: attribute float a_i_horizontalAngle;
168: attribute float a_i_intensity;
169: attribute float a_i_flapScale;
170: attribute float a_i_flapness;
171:
172:
173: varying vec2 v2f_texCoords;
174: varying vec4 v2f_color;
175: varying float v2f_diffuse;
176: varying vec2 v2f_light;
177:
178:
179: void main() {
180: Vertex v;
181: v.pos = a_v_pos;
182: v.normal = a_v_normal;
183: v.texCoords = a_v_texCoords;
184:
185:
186: Flap i;
187: i.instancePos = a_i_instancePos;
188: i.light = a_i_light;
189: i.segmentOffset = a_i_segmentOffset;
190: i.pivot = a_i_pivot;
191: i.horizontalAngle = a_i_horizontalAngle;
192: i.intensity = a_i_intensity;
193: i.flapScale = a_i_flapScale;
194: i.flapness = a_i_flapness;
195:
196:
197: BlockFrag o = FLWMain(v, i);
198:
199: v2f_texCoords = o.texCoords;
200: v2f_color = o.color;
201: v2f_diffuse = o.diffuse;
202: v2f_light = o.light;
203:
204: }
[12:42:33] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:33] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26:
27: uniform vec2 uTextureScale;
28: uniform sampler2D uBlockAtlas;
29: uniform sampler2D uLightMap;
30: uniform sampler2D uCrumbling;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
34: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
35: cr.a = cr.a * diffuseAlpha;
36: return cr;
37: }
38:
39: void FLWFinalizeColor(vec4 color) {
40: #if defined(USE_FOG)
41: float a = color.a;
42: float fog = clamp(FLWFogFactor(), 0., 1.);
43:
44: color = mix(uFogColor, color, fog);
45: color.a = a;
46: #endif
47:
48: gl_FragColor = color;
49: }
50:
51: vec4 FLWLight(vec2 lightCoords) {
52: return vec4(1.);
53: }
54:
55:
56:
57: struct BlockFrag {
58: vec2 texCoords;
59: vec4 color;
60: float diffuse;
61: vec2 light;
62: };
63:
64: void FLWMain(BlockFrag r) {
65: vec4 tex = FLWBlockTexture(r.texCoords);
66:
67: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
68:
69: // flw_WorldPos = ;
70: // flw_Normal = ;
71: // flw_Albedo = tex.rgb;
72: // flw_Alpha = tex.a;
73: // flw_LightMap = r.light;
74: // flw_Tint = r.color;
75: FLWFinalizeColor(color);
76: }
77:
78: varying vec2 v2f_texCoords;
79: varying vec4 v2f_color;
80: varying float v2f_diffuse;
81: varying vec2 v2f_light;
82:
83:
84: //vec3 flw_WorldPos;
85: //vec3 flw_Normal;
86: //vec3 flw_Albedo;
87: //float flw_Alpha;
88: //vec2 flw_LightMap;
89: //vec4 flw_Tint;
90:
91: void main() {
92: BlockFrag f;
93: f.texCoords = v2f_texCoords;
94: f.color = v2f_color;
95: f.diffuse = v2f_diffuse;
96: f.light = v2f_light;
97:
98:
99: FLWMain(f);
100: }
[12:42:33] [main/ERROR]: Shader compilation log for create:flap.vert: No errors.
[12:42:33] [main/ERROR]: Source for shader 'create:flap.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: mat4 rotate(vec3 axis, float angle) {
29: float s = sin(angle);
30: float c = cos(angle);
31: float oc = 1. - c;
32:
33: vec3 sa = axis * s;
34:
35: mat4 mr = mat4(1.);
36: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
37: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
38: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
39:
40: return mr;
41: }
42:
43: mat4 rotation(vec3 rot) {
44: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
45: }
46:
47: mat3 modelToNormal(mat4 mat) {
48: // Discard the edges. This won't be accurate for scaled or skewed matrices,
49: // but we don't have to work with those often.
50: mat3 m;
51: m[0] = mat[0].xyz;
52: m[1] = mat[1].xyz;
53: m[2] = mat[2].xyz;
54: return m;
55: }
56:
57: #define PIOVER2 1.5707963268
58:
59: vec4 quat(vec3 axis, float angle) {
60: float halfAngle = angle * PIOVER2 / 180.0;
61: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
62: return vec4(axis.xyz * cs.y, cs.x);
63: }
64:
65: vec4 quatMult(vec4 q1, vec4 q2) {
66: // disgustingly vectorized quaternion multiplication
67: vec4 a = q1.w * q2.xyzw;
68: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
69: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
70: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
71:
72: return a + b + c + d;
73: }
74:
75: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
76: vec3 i = q.xyz;
77: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
78: }
79:
80: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
81: return rotateVertexByQuat(v, quat(axis, angle));
82: }
83:
84: float diffuse(vec3 normal) {
85: vec3 n2 = normal * normal * vec3(.6, .25, .8);
86: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
87: }
88:
89:
90: struct Flap {
91: vec3 instancePos;
92: vec2 light;
93: vec3 segmentOffset;
94: vec3 pivot;
95: float horizontalAngle;
96: float intensity;
97: float flapScale;
98: float flapness;
99: };
100:
101:
102: struct Vertex {
103: vec3 pos;
104: vec3 normal;
105: vec2 texCoords;
106: };
107:
108: struct BlockFrag {
109: vec2 texCoords;
110: vec4 color;
111: float diffuse;
112: vec2 light;
113: };
114:
115:
116: float toRad(float degrees) {
117: return fract(degrees / 360.) * PI * 2.;
118: }
119:
120: float getFlapAngle(float flapness, float intensity, float scale) {
121: float absFlap = abs(flapness);
122:
123: float angle = sin((1. - absFlap) * PI * intensity) * 30. * flapness * scale;
124:
125: float halfAngle = angle * 0.5;
126:
127: float which = step(0., flapness);// 0 if negative, 1 if positive
128: float degrees = which * halfAngle + (1. - which) * angle;// branchless conditional multiply
129:
130: return degrees;
131: }
132:
133: BlockFrag FLWMain(Vertex v, Flap flap) {
134: float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale);
135:
136: vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle);
137: vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle);
138:
139: vec3 rotated = rotateVertexByQuat(v.pos - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset;
140: rotated = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5;
141:
142: vec4 worldPos = vec4(rotated, 1.);
143: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, flapRotation), orientation);
144:
145: FLWFinalizeWorldPos(worldPos);
146: FLWFinalizeNormal(norm);
147:
148: BlockFrag b;
149: b.diffuse = diffuse(norm);
150: b.texCoords = v.texCoords;
151: b.light = flap.light;
152: #if defined(DEBUG_NORMAL)
153: b.color = vec4(norm, 1.);
154: #else
155: b.color = vec4(1.);
156: #endif
157: return b;
158: }
159: attribute vec3 a_v_pos;
160: attribute vec3 a_v_normal;
161: attribute vec2 a_v_texCoords;
162:
163: attribute vec3 a_i_instancePos;
164: attribute vec2 a_i_light;
165: attribute vec3 a_i_segmentOffset;
166: attribute vec3 a_i_pivot;
167: attribute float a_i_horizontalAngle;
168: attribute float a_i_intensity;
169: attribute float a_i_flapScale;
170: attribute float a_i_flapness;
171:
172:
173: varying vec2 v2f_texCoords;
174: varying vec4 v2f_color;
175: varying float v2f_diffuse;
176: varying vec2 v2f_light;
177:
178:
179: void main() {
180: Vertex v;
181: v.pos = a_v_pos;
182: v.normal = a_v_normal;
183: v.texCoords = a_v_texCoords;
184:
185:
186: Flap i;
187: i.instancePos = a_i_instancePos;
188: i.light = a_i_light;
189: i.segmentOffset = a_i_segmentOffset;
190: i.pivot = a_i_pivot;
191: i.horizontalAngle = a_i_horizontalAngle;
192: i.intensity = a_i_intensity;
193: i.flapScale = a_i_flapScale;
194: i.flapness = a_i_flapness;
195:
196:
197: BlockFrag o = FLWMain(v, i);
198:
199: v2f_texCoords = o.texCoords;
200: v2f_color = o.color;
201: v2f_diffuse = o.diffuse;
202: v2f_light = o.light;
203:
204: }
[12:42:35] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:35] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26:
27: uniform vec2 uTextureScale;
28: uniform sampler2D uBlockAtlas;
29: uniform sampler2D uLightMap;
30: uniform sampler2D uCrumbling;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
34: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
35: cr.a = cr.a * diffuseAlpha;
36: return cr;
37: }
38:
39: void FLWFinalizeColor(vec4 color) {
40: #if defined(USE_FOG)
41: float a = color.a;
42: float fog = clamp(FLWFogFactor(), 0., 1.);
43:
44: color = mix(uFogColor, color, fog);
45: color.a = a;
46: #endif
47:
48: gl_FragColor = color;
49: }
50:
51: vec4 FLWLight(vec2 lightCoords) {
52: return vec4(1.);
53: }
54:
55:
56:
57: struct BlockFrag {
58: vec2 texCoords;
59: vec4 color;
60: float diffuse;
61: vec2 light;
62: };
63:
64: void FLWMain(BlockFrag r) {
65: vec4 tex = FLWBlockTexture(r.texCoords);
66:
67: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
68:
69: // flw_WorldPos = ;
70: // flw_Normal = ;
71: // flw_Albedo = tex.rgb;
72: // flw_Alpha = tex.a;
73: // flw_LightMap = r.light;
74: // flw_Tint = r.color;
75: FLWFinalizeColor(color);
76: }
77:
78: varying vec2 v2f_texCoords;
79: varying vec4 v2f_color;
80: varying float v2f_diffuse;
81: varying vec2 v2f_light;
82:
83:
84: //vec3 flw_WorldPos;
85: //vec3 flw_Normal;
86: //vec3 flw_Albedo;
87: //float flw_Alpha;
88: //vec2 flw_LightMap;
89: //vec4 flw_Tint;
90:
91: void main() {
92: BlockFrag f;
93: f.texCoords = v2f_texCoords;
94: f.color = v2f_color;
95: f.diffuse = v2f_diffuse;
96: f.light = v2f_light;
97:
98:
99: FLWMain(f);
100: }
[12:42:37] [main/ERROR]: Shader compilation log for create:flap.vert: No errors.
[12:42:37] [main/ERROR]: Source for shader 'create:flap.vert':
1: #version 110
2:
3: #define PI 3.1415926538
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: mat4 rotate(vec3 axis, float angle) {
27: float s = sin(angle);
28: float c = cos(angle);
29: float oc = 1. - c;
30:
31: vec3 sa = axis * s;
32:
33: mat4 mr = mat4(1.);
34: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
35: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
36: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
37:
38: return mr;
39: }
40:
41: mat4 rotation(vec3 rot) {
42: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
43: }
44:
45: mat3 modelToNormal(mat4 mat) {
46: // Discard the edges. This won't be accurate for scaled or skewed matrices,
47: // but we don't have to work with those often.
48: mat3 m;
49: m[0] = mat[0].xyz;
50: m[1] = mat[1].xyz;
51: m[2] = mat[2].xyz;
52: return m;
53: }
54:
55: #define PIOVER2 1.5707963268
56:
57: vec4 quat(vec3 axis, float angle) {
58: float halfAngle = angle * PIOVER2 / 180.0;
59: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
60: return vec4(axis.xyz * cs.y, cs.x);
61: }
62:
63: vec4 quatMult(vec4 q1, vec4 q2) {
64: // disgustingly vectorized quaternion multiplication
65: vec4 a = q1.w * q2.xyzw;
66: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
67: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
68: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
69:
70: return a + b + c + d;
71: }
72:
73: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
74: vec3 i = q.xyz;
75: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
76: }
77:
78: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
79: return rotateVertexByQuat(v, quat(axis, angle));
80: }
81:
82: float diffuse(vec3 normal) {
83: vec3 n2 = normal * normal * vec3(.6, .25, .8);
84: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
85: }
86:
87:
88: struct Flap {
89: vec3 instancePos;
90: vec2 light;
91: vec3 segmentOffset;
92: vec3 pivot;
93: float horizontalAngle;
94: float intensity;
95: float flapScale;
96: float flapness;
97: };
98:
99:
100: struct Vertex {
101: vec3 pos;
102: vec3 normal;
103: vec2 texCoords;
104: };
105:
106: struct BlockFrag {
107: vec2 texCoords;
108: vec4 color;
109: float diffuse;
110: vec2 light;
111: };
112:
113:
114: float toRad(float degrees) {
115: return fract(degrees / 360.) * PI * 2.;
116: }
117:
118: float getFlapAngle(float flapness, float intensity, float scale) {
119: float absFlap = abs(flapness);
120:
121: float angle = sin((1. - absFlap) * PI * intensity) * 30. * flapness * scale;
122:
123: float halfAngle = angle * 0.5;
124:
125: float which = step(0., flapness);// 0 if negative, 1 if positive
126: float degrees = which * halfAngle + (1. - which) * angle;// branchless conditional multiply
127:
128: return degrees;
129: }
130:
131: BlockFrag FLWMain(Vertex v, Flap flap) {
132: float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale);
133:
134: vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle);
135: vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle);
136:
137: vec3 rotated = rotateVertexByQuat(v.pos - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset;
138: rotated = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5;
139:
140: vec4 worldPos = vec4(rotated, 1.);
141: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, flapRotation), orientation);
142:
143: FLWFinalizeWorldPos(worldPos);
144: FLWFinalizeNormal(norm);
145:
146: BlockFrag b;
147: b.diffuse = diffuse(norm);
148: b.texCoords = v.texCoords;
149: b.light = flap.light;
150: #if defined(DEBUG_NORMAL)
151: b.color = vec4(norm, 1.);
152: #else
153: b.color = vec4(1.);
154: #endif
155: return b;
156: }
157: attribute vec3 a_v_pos;
158: attribute vec3 a_v_normal;
159: attribute vec2 a_v_texCoords;
160:
161: attribute vec3 a_i_instancePos;
162: attribute vec2 a_i_light;
163: attribute vec3 a_i_segmentOffset;
164: attribute vec3 a_i_pivot;
165: attribute float a_i_horizontalAngle;
166: attribute float a_i_intensity;
167: attribute float a_i_flapScale;
168: attribute float a_i_flapness;
169:
170:
171: varying vec2 v2f_texCoords;
172: varying vec4 v2f_color;
173: varying float v2f_diffuse;
174: varying vec2 v2f_light;
175:
176:
177: void main() {
178: Vertex v;
179: v.pos = a_v_pos;
180: v.normal = a_v_normal;
181: v.texCoords = a_v_texCoords;
182:
183:
184: Flap i;
185: i.instancePos = a_i_instancePos;
186: i.light = a_i_light;
187: i.segmentOffset = a_i_segmentOffset;
188: i.pivot = a_i_pivot;
189: i.horizontalAngle = a_i_horizontalAngle;
190: i.intensity = a_i_intensity;
191: i.flapScale = a_i_flapScale;
192: i.flapness = a_i_flapness;
193:
194:
195: BlockFrag o = FLWMain(v, i);
196:
197: v2f_texCoords = o.texCoords;
198: v2f_color = o.color;
199: v2f_diffuse = o.diffuse;
200: v2f_light = o.light;
201:
202: }
[12:42:41] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:41] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24:
25: uniform vec2 uTextureScale;
26: uniform sampler2D uBlockAtlas;
27: uniform sampler2D uLightMap;
28: uniform sampler2D uCrumbling;
29:
30: vec4 FLWBlockTexture(vec2 texCoords) {
31: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
32: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
33: cr.a = cr.a * diffuseAlpha;
34: return cr;
35: }
36:
37: void FLWFinalizeColor(vec4 color) {
38: #if defined(USE_FOG)
39: float a = color.a;
40: float fog = clamp(FLWFogFactor(), 0., 1.);
41:
42: color = mix(uFogColor, color, fog);
43: color.a = a;
44: #endif
45:
46: gl_FragColor = color;
47: }
48:
49: vec4 FLWLight(vec2 lightCoords) {
50: return vec4(1.);
51: }
52:
53:
54:
55: struct BlockFrag {
56: vec2 texCoords;
57: vec4 color;
58: float diffuse;
59: vec2 light;
60: };
61:
62: void FLWMain(BlockFrag r) {
63: vec4 tex = FLWBlockTexture(r.texCoords);
64:
65: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
66:
67: // flw_WorldPos = ;
68: // flw_Normal = ;
69: // flw_Albedo = tex.rgb;
70: // flw_Alpha = tex.a;
71: // flw_LightMap = r.light;
72: // flw_Tint = r.color;
73: FLWFinalizeColor(color);
74: }
75:
76: varying vec2 v2f_texCoords;
77: varying vec4 v2f_color;
78: varying float v2f_diffuse;
79: varying vec2 v2f_light;
80:
81:
82: //vec3 flw_WorldPos;
83: //vec3 flw_Normal;
84: //vec3 flw_Albedo;
85: //float flw_Alpha;
86: //vec2 flw_LightMap;
87: //vec4 flw_Tint;
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:42:41] [main/ERROR]: Shader compilation log for flywheel:oriented.vert: No errors.
[12:42:41] [main/ERROR]: Source for shader 'flywheel:oriented.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: uniform float uTime;
5: uniform mat4 uViewProjection;
6: uniform vec3 uCameraPos;
7:
8: #if defined(USE_FOG)
9: varying float FragDistance;
10: #endif
11:
12: void FLWFinalizeWorldPos(inout vec4 worldPos) {
13: #if defined(USE_FOG)
14: FragDistance = length(worldPos.xyz - uCameraPos);
15: #endif
16:
17: gl_Position = uViewProjection * worldPos;
18: }
19:
20: void FLWFinalizeNormal(inout vec3 normal) {
21: // noop
22: }
23:
24:
25: mat4 rotate(vec3 axis, float angle) {
26: float s = sin(angle);
27: float c = cos(angle);
28: float oc = 1. - c;
29:
30: vec3 sa = axis * s;
31:
32: mat4 mr = mat4(1.);
33: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
34: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
35: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
36:
37: return mr;
38: }
39:
40: mat4 rotation(vec3 rot) {
41: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
42: }
43:
44: mat3 modelToNormal(mat4 mat) {
45: // Discard the edges. This won't be accurate for scaled or skewed matrices,
46: // but we don't have to work with those often.
47: mat3 m;
48: m[0] = mat[0].xyz;
49: m[1] = mat[1].xyz;
50: m[2] = mat[2].xyz;
51: return m;
52: }
53:
54: #define PIOVER2 1.5707963268
55:
56: vec4 quat(vec3 axis, float angle) {
57: float halfAngle = angle * PIOVER2 / 180.0;
58: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
59: return vec4(axis.xyz * cs.y, cs.x);
60: }
61:
62: vec4 quatMult(vec4 q1, vec4 q2) {
63: // disgustingly vectorized quaternion multiplication
64: vec4 a = q1.w * q2.xyzw;
65: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
66: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
67: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
68:
69: return a + b + c + d;
70: }
71:
72: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
73: vec3 i = q.xyz;
74: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
75: }
76:
77: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
78: return rotateVertexByQuat(v, quat(axis, angle));
79: }
80:
81: float diffuse(vec3 normal) {
82: vec3 n2 = normal * normal * vec3(.6, .25, .8);
83: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
84: }
85:
86:
87: struct Oriented {
88: vec2 light;
89: vec4 color;
90: vec3 pos;
91: vec3 pivot;
92: vec4 rotation;
93: };
94:
95:
96: struct Vertex {
97: vec3 pos;
98: vec3 normal;
99: vec2 texCoords;
100: };
101:
102: struct BlockFrag {
103: vec2 texCoords;
104: vec4 color;
105: float diffuse;
106: vec2 light;
107: };
108:
109: BlockFrag FLWMain(Vertex v, Oriented o) {
110: vec4 worldPos = vec4(rotateVertexByQuat(v.pos - o.pivot, o.rotation) + o.pivot + o.pos, 1.);
111:
112: vec3 norm = rotateVertexByQuat(v.normal, o.rotation);
113:
114: FLWFinalizeWorldPos(worldPos);
115: FLWFinalizeNormal(norm);
116:
117: BlockFrag b;
118: b.diffuse = diffuse(norm);
119: b.texCoords = v.texCoords;
120: b.light = o.light;
121: #if defined(DEBUG_NORMAL)
122: b.color = vec4(norm, 1.);
123: #else
124: b.color = o.color;
125: #endif
126: return b;
127: }
128: attribute vec3 a_v_pos;
129: attribute vec3 a_v_normal;
130: attribute vec2 a_v_texCoords;
131:
132: attribute vec2 a_i_light;
133: attribute vec4 a_i_color;
134: attribute vec3 a_i_pos;
135: attribute vec3 a_i_pivot;
136: attribute vec4 a_i_rotation;
137:
138:
139: varying vec2 v2f_texCoords;
140: varying vec4 v2f_color;
141: varying float v2f_diffuse;
142: varying vec2 v2f_light;
143:
144:
145: void main() {
146: Vertex v;
147: v.pos = a_v_pos;
148: v.normal = a_v_normal;
149: v.texCoords = a_v_texCoords;
150:
151:
152: Oriented i;
153: i.light = a_i_light;
154: i.color = a_i_color;
155: i.pos = a_i_pos;
156: i.pivot = a_i_pivot;
157: i.rotation = a_i_rotation;
158:
159:
160: BlockFrag o = FLWMain(v, i);
161:
162: v2f_texCoords = o.texCoords;
163: v2f_color = o.color;
164: v2f_diffuse = o.diffuse;
165: v2f_light = o.light;
166:
167: }
[12:42:43] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:43] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25:
26: uniform vec2 uTextureScale;
27: uniform sampler2D uBlockAtlas;
28: uniform sampler2D uLightMap;
29: uniform sampler2D uCrumbling;
30:
31: vec4 FLWBlockTexture(vec2 texCoords) {
32: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
33: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
34: cr.a = cr.a * diffuseAlpha;
35: return cr;
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return vec4(1.);
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:42:43] [main/ERROR]: Shader compilation log for flywheel:oriented.vert: No errors.
[12:42:43] [main/ERROR]: Source for shader 'flywheel:oriented.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: mat4 rotate(vec3 axis, float angle) {
27: float s = sin(angle);
28: float c = cos(angle);
29: float oc = 1. - c;
30:
31: vec3 sa = axis * s;
32:
33: mat4 mr = mat4(1.);
34: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
35: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
36: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
37:
38: return mr;
39: }
40:
41: mat4 rotation(vec3 rot) {
42: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
43: }
44:
45: mat3 modelToNormal(mat4 mat) {
46: // Discard the edges. This won't be accurate for scaled or skewed matrices,
47: // but we don't have to work with those often.
48: mat3 m;
49: m[0] = mat[0].xyz;
50: m[1] = mat[1].xyz;
51: m[2] = mat[2].xyz;
52: return m;
53: }
54:
55: #define PIOVER2 1.5707963268
56:
57: vec4 quat(vec3 axis, float angle) {
58: float halfAngle = angle * PIOVER2 / 180.0;
59: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
60: return vec4(axis.xyz * cs.y, cs.x);
61: }
62:
63: vec4 quatMult(vec4 q1, vec4 q2) {
64: // disgustingly vectorized quaternion multiplication
65: vec4 a = q1.w * q2.xyzw;
66: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
67: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
68: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
69:
70: return a + b + c + d;
71: }
72:
73: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
74: vec3 i = q.xyz;
75: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
76: }
77:
78: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
79: return rotateVertexByQuat(v, quat(axis, angle));
80: }
81:
82: float diffuse(vec3 normal) {
83: vec3 n2 = normal * normal * vec3(.6, .25, .8);
84: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
85: }
86:
87:
88: struct Oriented {
89: vec2 light;
90: vec4 color;
91: vec3 pos;
92: vec3 pivot;
93: vec4 rotation;
94: };
95:
96:
97: struct Vertex {
98: vec3 pos;
99: vec3 normal;
100: vec2 texCoords;
101: };
102:
103: struct BlockFrag {
104: vec2 texCoords;
105: vec4 color;
106: float diffuse;
107: vec2 light;
108: };
109:
110: BlockFrag FLWMain(Vertex v, Oriented o) {
111: vec4 worldPos = vec4(rotateVertexByQuat(v.pos - o.pivot, o.rotation) + o.pivot + o.pos, 1.);
112:
113: vec3 norm = rotateVertexByQuat(v.normal, o.rotation);
114:
115: FLWFinalizeWorldPos(worldPos);
116: FLWFinalizeNormal(norm);
117:
118: BlockFrag b;
119: b.diffuse = diffuse(norm);
120: b.texCoords = v.texCoords;
121: b.light = o.light;
122: #if defined(DEBUG_NORMAL)
123: b.color = vec4(norm, 1.);
124: #else
125: b.color = o.color;
126: #endif
127: return b;
128: }
129: attribute vec3 a_v_pos;
130: attribute vec3 a_v_normal;
131: attribute vec2 a_v_texCoords;
132:
133: attribute vec2 a_i_light;
134: attribute vec4 a_i_color;
135: attribute vec3 a_i_pos;
136: attribute vec3 a_i_pivot;
137: attribute vec4 a_i_rotation;
138:
139:
140: varying vec2 v2f_texCoords;
141: varying vec4 v2f_color;
142: varying float v2f_diffuse;
143: varying vec2 v2f_light;
144:
145:
146: void main() {
147: Vertex v;
148: v.pos = a_v_pos;
149: v.normal = a_v_normal;
150: v.texCoords = a_v_texCoords;
151:
152:
153: Oriented i;
154: i.light = a_i_light;
155: i.color = a_i_color;
156: i.pos = a_i_pos;
157: i.pivot = a_i_pivot;
158: i.rotation = a_i_rotation;
159:
160:
161: BlockFrag o = FLWMain(v, i);
162:
163: v2f_texCoords = o.texCoords;
164: v2f_color = o.color;
165: v2f_diffuse = o.diffuse;
166: v2f_light = o.light;
167:
168: }
[12:42:43] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:43] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26:
27: uniform vec2 uTextureScale;
28: uniform sampler2D uBlockAtlas;
29: uniform sampler2D uLightMap;
30: uniform sampler2D uCrumbling;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
34: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
35: cr.a = cr.a * diffuseAlpha;
36: return cr;
37: }
38:
39: void FLWFinalizeColor(vec4 color) {
40: #if defined(USE_FOG)
41: float a = color.a;
42: float fog = clamp(FLWFogFactor(), 0., 1.);
43:
44: color = mix(uFogColor, color, fog);
45: color.a = a;
46: #endif
47:
48: gl_FragColor = color;
49: }
50:
51: vec4 FLWLight(vec2 lightCoords) {
52: return vec4(1.);
53: }
54:
55:
56:
57: struct BlockFrag {
58: vec2 texCoords;
59: vec4 color;
60: float diffuse;
61: vec2 light;
62: };
63:
64: void FLWMain(BlockFrag r) {
65: vec4 tex = FLWBlockTexture(r.texCoords);
66:
67: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
68:
69: // flw_WorldPos = ;
70: // flw_Normal = ;
71: // flw_Albedo = tex.rgb;
72: // flw_Alpha = tex.a;
73: // flw_LightMap = r.light;
74: // flw_Tint = r.color;
75: FLWFinalizeColor(color);
76: }
77:
78: varying vec2 v2f_texCoords;
79: varying vec4 v2f_color;
80: varying float v2f_diffuse;
81: varying vec2 v2f_light;
82:
83:
84: //vec3 flw_WorldPos;
85: //vec3 flw_Normal;
86: //vec3 flw_Albedo;
87: //float flw_Alpha;
88: //vec2 flw_LightMap;
89: //vec4 flw_Tint;
90:
91: void main() {
92: BlockFrag f;
93: f.texCoords = v2f_texCoords;
94: f.color = v2f_color;
95: f.diffuse = v2f_diffuse;
96: f.light = v2f_light;
97:
98:
99: FLWMain(f);
100: }
[12:42:43] [main/ERROR]: Shader compilation log for flywheel:oriented.vert: No errors.
[12:42:43] [main/ERROR]: Source for shader 'flywheel:oriented.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: mat4 rotate(vec3 axis, float angle) {
27: float s = sin(angle);
28: float c = cos(angle);
29: float oc = 1. - c;
30:
31: vec3 sa = axis * s;
32:
33: mat4 mr = mat4(1.);
34: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
35: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
36: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
37:
38: return mr;
39: }
40:
41: mat4 rotation(vec3 rot) {
42: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
43: }
44:
45: mat3 modelToNormal(mat4 mat) {
46: // Discard the edges. This won't be accurate for scaled or skewed matrices,
47: // but we don't have to work with those often.
48: mat3 m;
49: m[0] = mat[0].xyz;
50: m[1] = mat[1].xyz;
51: m[2] = mat[2].xyz;
52: return m;
53: }
54:
55: #define PIOVER2 1.5707963268
56:
57: vec4 quat(vec3 axis, float angle) {
58: float halfAngle = angle * PIOVER2 / 180.0;
59: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
60: return vec4(axis.xyz * cs.y, cs.x);
61: }
62:
63: vec4 quatMult(vec4 q1, vec4 q2) {
64: // disgustingly vectorized quaternion multiplication
65: vec4 a = q1.w * q2.xyzw;
66: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
67: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
68: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
69:
70: return a + b + c + d;
71: }
72:
73: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
74: vec3 i = q.xyz;
75: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
76: }
77:
78: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
79: return rotateVertexByQuat(v, quat(axis, angle));
80: }
81:
82: float diffuse(vec3 normal) {
83: vec3 n2 = normal * normal * vec3(.6, .25, .8);
84: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
85: }
86:
87:
88: struct Oriented {
89: vec2 light;
90: vec4 color;
91: vec3 pos;
92: vec3 pivot;
93: vec4 rotation;
94: };
95:
96:
97: struct Vertex {
98: vec3 pos;
99: vec3 normal;
100: vec2 texCoords;
101: };
102:
103: struct BlockFrag {
104: vec2 texCoords;
105: vec4 color;
106: float diffuse;
107: vec2 light;
108: };
109:
110: BlockFrag FLWMain(Vertex v, Oriented o) {
111: vec4 worldPos = vec4(rotateVertexByQuat(v.pos - o.pivot, o.rotation) + o.pivot + o.pos, 1.);
112:
113: vec3 norm = rotateVertexByQuat(v.normal, o.rotation);
114:
115: FLWFinalizeWorldPos(worldPos);
116: FLWFinalizeNormal(norm);
117:
118: BlockFrag b;
119: b.diffuse = diffuse(norm);
120: b.texCoords = v.texCoords;
121: b.light = o.light;
122: #if defined(DEBUG_NORMAL)
123: b.color = vec4(norm, 1.);
124: #else
125: b.color = o.color;
126: #endif
127: return b;
128: }
129: attribute vec3 a_v_pos;
130: attribute vec3 a_v_normal;
131: attribute vec2 a_v_texCoords;
132:
133: attribute vec2 a_i_light;
134: attribute vec4 a_i_color;
135: attribute vec3 a_i_pos;
136: attribute vec3 a_i_pivot;
137: attribute vec4 a_i_rotation;
138:
139:
140: varying vec2 v2f_texCoords;
141: varying vec4 v2f_color;
142: varying float v2f_diffuse;
143: varying vec2 v2f_light;
144:
145:
146: void main() {
147: Vertex v;
148: v.pos = a_v_pos;
149: v.normal = a_v_normal;
150: v.texCoords = a_v_texCoords;
151:
152:
153: Oriented i;
154: i.light = a_i_light;
155: i.color = a_i_color;
156: i.pos = a_i_pos;
157: i.pivot = a_i_pivot;
158: i.rotation = a_i_rotation;
159:
160:
161: BlockFrag o = FLWMain(v, i);
162:
163: v2f_texCoords = o.texCoords;
164: v2f_color = o.color;
165: v2f_diffuse = o.diffuse;
166: v2f_light = o.light;
167:
168: }
[12:42:44] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:44] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26:
27: uniform vec2 uTextureScale;
28: uniform sampler2D uBlockAtlas;
29: uniform sampler2D uLightMap;
30: uniform sampler2D uCrumbling;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
34: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
35: cr.a = cr.a * diffuseAlpha;
36: return cr;
37: }
38:
39: void FLWFinalizeColor(vec4 color) {
40: #if defined(USE_FOG)
41: float a = color.a;
42: float fog = clamp(FLWFogFactor(), 0., 1.);
43:
44: color = mix(uFogColor, color, fog);
45: color.a = a;
46: #endif
47:
48: gl_FragColor = color;
49: }
50:
51: vec4 FLWLight(vec2 lightCoords) {
52: return vec4(1.);
53: }
54:
55:
56:
57: struct BlockFrag {
58: vec2 texCoords;
59: vec4 color;
60: float diffuse;
61: vec2 light;
62: };
63:
64: void FLWMain(BlockFrag r) {
65: vec4 tex = FLWBlockTexture(r.texCoords);
66:
67: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
68:
69: // flw_WorldPos = ;
70: // flw_Normal = ;
71: // flw_Albedo = tex.rgb;
72: // flw_Alpha = tex.a;
73: // flw_LightMap = r.light;
74: // flw_Tint = r.color;
75: FLWFinalizeColor(color);
76: }
77:
78: varying vec2 v2f_texCoords;
79: varying vec4 v2f_color;
80: varying float v2f_diffuse;
81: varying vec2 v2f_light;
82:
83:
84: //vec3 flw_WorldPos;
85: //vec3 flw_Normal;
86: //vec3 flw_Albedo;
87: //float flw_Alpha;
88: //vec2 flw_LightMap;
89: //vec4 flw_Tint;
90:
91: void main() {
92: BlockFrag f;
93: f.texCoords = v2f_texCoords;
94: f.color = v2f_color;
95: f.diffuse = v2f_diffuse;
96: f.light = v2f_light;
97:
98:
99: FLWMain(f);
100: }
[12:42:44] [main/ERROR]: Shader compilation log for flywheel:oriented.vert: No errors.
[12:42:44] [main/ERROR]: Source for shader 'flywheel:oriented.vert':
1: #version 110
2:
3: uniform float uTime;
4: uniform mat4 uViewProjection;
5: uniform vec3 uCameraPos;
6:
7: #if defined(USE_FOG)
8: varying float FragDistance;
9: #endif
10:
11: void FLWFinalizeWorldPos(inout vec4 worldPos) {
12: #if defined(USE_FOG)
13: FragDistance = length(worldPos.xyz - uCameraPos);
14: #endif
15:
16: gl_Position = uViewProjection * worldPos;
17: }
18:
19: void FLWFinalizeNormal(inout vec3 normal) {
20: // noop
21: }
22:
23:
24: mat4 rotate(vec3 axis, float angle) {
25: float s = sin(angle);
26: float c = cos(angle);
27: float oc = 1. - c;
28:
29: vec3 sa = axis * s;
30:
31: mat4 mr = mat4(1.);
32: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
33: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
34: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
35:
36: return mr;
37: }
38:
39: mat4 rotation(vec3 rot) {
40: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
41: }
42:
43: mat3 modelToNormal(mat4 mat) {
44: // Discard the edges. This won't be accurate for scaled or skewed matrices,
45: // but we don't have to work with those often.
46: mat3 m;
47: m[0] = mat[0].xyz;
48: m[1] = mat[1].xyz;
49: m[2] = mat[2].xyz;
50: return m;
51: }
52:
53: #define PIOVER2 1.5707963268
54:
55: vec4 quat(vec3 axis, float angle) {
56: float halfAngle = angle * PIOVER2 / 180.0;
57: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
58: return vec4(axis.xyz * cs.y, cs.x);
59: }
60:
61: vec4 quatMult(vec4 q1, vec4 q2) {
62: // disgustingly vectorized quaternion multiplication
63: vec4 a = q1.w * q2.xyzw;
64: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
65: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
66: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
67:
68: return a + b + c + d;
69: }
70:
71: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
72: vec3 i = q.xyz;
73: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
74: }
75:
76: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
77: return rotateVertexByQuat(v, quat(axis, angle));
78: }
79:
80: float diffuse(vec3 normal) {
81: vec3 n2 = normal * normal * vec3(.6, .25, .8);
82: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
83: }
84:
85:
86: struct Oriented {
87: vec2 light;
88: vec4 color;
89: vec3 pos;
90: vec3 pivot;
91: vec4 rotation;
92: };
93:
94:
95: struct Vertex {
96: vec3 pos;
97: vec3 normal;
98: vec2 texCoords;
99: };
100:
101: struct BlockFrag {
102: vec2 texCoords;
103: vec4 color;
104: float diffuse;
105: vec2 light;
106: };
107:
108: BlockFrag FLWMain(Vertex v, Oriented o) {
109: vec4 worldPos = vec4(rotateVertexByQuat(v.pos - o.pivot, o.rotation) + o.pivot + o.pos, 1.);
110:
111: vec3 norm = rotateVertexByQuat(v.normal, o.rotation);
112:
113: FLWFinalizeWorldPos(worldPos);
114: FLWFinalizeNormal(norm);
115:
116: BlockFrag b;
117: b.diffuse = diffuse(norm);
118: b.texCoords = v.texCoords;
119: b.light = o.light;
120: #if defined(DEBUG_NORMAL)
121: b.color = vec4(norm, 1.);
122: #else
123: b.color = o.color;
124: #endif
125: return b;
126: }
127: attribute vec3 a_v_pos;
128: attribute vec3 a_v_normal;
129: attribute vec2 a_v_texCoords;
130:
131: attribute vec2 a_i_light;
132: attribute vec4 a_i_color;
133: attribute vec3 a_i_pos;
134: attribute vec3 a_i_pivot;
135: attribute vec4 a_i_rotation;
136:
137:
138: varying vec2 v2f_texCoords;
139: varying vec4 v2f_color;
140: varying float v2f_diffuse;
141: varying vec2 v2f_light;
142:
143:
144: void main() {
145: Vertex v;
146: v.pos = a_v_pos;
147: v.normal = a_v_normal;
148: v.texCoords = a_v_texCoords;
149:
150:
151: Oriented i;
152: i.light = a_i_light;
153: i.color = a_i_color;
154: i.pos = a_i_pos;
155: i.pivot = a_i_pivot;
156: i.rotation = a_i_rotation;
157:
158:
159: BlockFrag o = FLWMain(v, i);
160:
161: v2f_texCoords = o.texCoords;
162: v2f_color = o.color;
163: v2f_diffuse = o.diffuse;
164: v2f_light = o.light;
165:
166: }
[12:42:46] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:46] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24:
25: uniform vec2 uTextureScale;
26: uniform sampler2D uBlockAtlas;
27: uniform sampler2D uLightMap;
28: uniform sampler2D uCrumbling;
29:
30: vec4 FLWBlockTexture(vec2 texCoords) {
31: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
32: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
33: cr.a = cr.a * diffuseAlpha;
34: return cr;
35: }
36:
37: void FLWFinalizeColor(vec4 color) {
38: #if defined(USE_FOG)
39: float a = color.a;
40: float fog = clamp(FLWFogFactor(), 0., 1.);
41:
42: color = mix(uFogColor, color, fog);
43: color.a = a;
44: #endif
45:
46: gl_FragColor = color;
47: }
48:
49: vec4 FLWLight(vec2 lightCoords) {
50: return vec4(1.);
51: }
52:
53:
54:
55: struct BlockFrag {
56: vec2 texCoords;
57: vec4 color;
58: float diffuse;
59: vec2 light;
60: };
61:
62: void FLWMain(BlockFrag r) {
63: vec4 tex = FLWBlockTexture(r.texCoords);
64:
65: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
66:
67: // flw_WorldPos = ;
68: // flw_Normal = ;
69: // flw_Albedo = tex.rgb;
70: // flw_Alpha = tex.a;
71: // flw_LightMap = r.light;
72: // flw_Tint = r.color;
73: FLWFinalizeColor(color);
74: }
75:
76: varying vec2 v2f_texCoords;
77: varying vec4 v2f_color;
78: varying float v2f_diffuse;
79: varying vec2 v2f_light;
80:
81:
82: //vec3 flw_WorldPos;
83: //vec3 flw_Normal;
84: //vec3 flw_Albedo;
85: //float flw_Alpha;
86: //vec2 flw_LightMap;
87: //vec4 flw_Tint;
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:42:46] [main/ERROR]: Shader compilation log for flywheel:model.vert: No errors.
[12:42:46] [main/ERROR]: Source for shader 'flywheel:model.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: uniform float uTime;
5: uniform mat4 uViewProjection;
6: uniform vec3 uCameraPos;
7:
8: #if defined(USE_FOG)
9: varying float FragDistance;
10: #endif
11:
12: void FLWFinalizeWorldPos(inout vec4 worldPos) {
13: #if defined(USE_FOG)
14: FragDistance = length(worldPos.xyz - uCameraPos);
15: #endif
16:
17: gl_Position = uViewProjection * worldPos;
18: }
19:
20: void FLWFinalizeNormal(inout vec3 normal) {
21: // noop
22: }
23:
24:
25: float diffuse(vec3 normal) {
26: vec3 n2 = normal * normal * vec3(.6, .25, .8);
27: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
28: }
29:
30:
31: struct Vertex {
32: vec3 pos;
33: vec3 normal;
34: vec2 texCoords;
35: };
36:
37: struct BlockFrag {
38: vec2 texCoords;
39: vec4 color;
40: float diffuse;
41: vec2 light;
42: };
43:
44:
45: struct Instance {
46: vec2 light;
47: vec4 color;
48: mat4 transform;
49: mat3 normalMat;
50: };
51:
52: BlockFrag FLWMain(Vertex v, Instance i) {
53: vec4 worldPos = i.transform * vec4(v.pos, 1.);
54:
55: vec3 norm = i.normalMat * v.normal;
56:
57: FLWFinalizeWorldPos(worldPos);
58: FLWFinalizeNormal(norm);
59:
60: norm = normalize(norm);
61:
62: BlockFrag b;
63: b.diffuse = diffuse(norm);
64: b.texCoords = v.texCoords;
65: b.light = i.light;
66: #if defined(DEBUG_NORMAL)
67: b.color = vec4(norm, 1.);
68: #else
69: b.color = i.color;
70: #endif
71: return b;
72: }
73: attribute vec3 a_v_pos;
74: attribute vec3 a_v_normal;
75: attribute vec2 a_v_texCoords;
76:
77: attribute vec2 a_i_light;
78: attribute vec4 a_i_color;
79: attribute mat4 a_i_transform;
80: attribute mat3 a_i_normalMat;
81:
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: void main() {
90: Vertex v;
91: v.pos = a_v_pos;
92: v.normal = a_v_normal;
93: v.texCoords = a_v_texCoords;
94:
95:
96: Instance i;
97: i.light = a_i_light;
98: i.color = a_i_color;
99: i.transform = a_i_transform;
100: i.normalMat = a_i_normalMat;
101:
102:
103: BlockFrag o = FLWMain(v, i);
104:
105: v2f_texCoords = o.texCoords;
106: v2f_color = o.color;
107: v2f_diffuse = o.diffuse;
108: v2f_light = o.light;
109:
110: }
[12:42:49] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:49] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25:
26: uniform vec2 uTextureScale;
27: uniform sampler2D uBlockAtlas;
28: uniform sampler2D uLightMap;
29: uniform sampler2D uCrumbling;
30:
31: vec4 FLWBlockTexture(vec2 texCoords) {
32: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
33: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
34: cr.a = cr.a * diffuseAlpha;
35: return cr;
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return vec4(1.);
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:42:49] [main/ERROR]: Shader compilation log for flywheel:model.vert: No errors.
[12:42:49] [main/ERROR]: Source for shader 'flywheel:model.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: float diffuse(vec3 normal) {
27: vec3 n2 = normal * normal * vec3(.6, .25, .8);
28: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
29: }
30:
31:
32: struct Vertex {
33: vec3 pos;
34: vec3 normal;
35: vec2 texCoords;
36: };
37:
38: struct BlockFrag {
39: vec2 texCoords;
40: vec4 color;
41: float diffuse;
42: vec2 light;
43: };
44:
45:
46: struct Instance {
47: vec2 light;
48: vec4 color;
49: mat4 transform;
50: mat3 normalMat;
51: };
52:
53: BlockFrag FLWMain(Vertex v, Instance i) {
54: vec4 worldPos = i.transform * vec4(v.pos, 1.);
55:
56: vec3 norm = i.normalMat * v.normal;
57:
58: FLWFinalizeWorldPos(worldPos);
59: FLWFinalizeNormal(norm);
60:
61: norm = normalize(norm);
62:
63: BlockFrag b;
64: b.diffuse = diffuse(norm);
65: b.texCoords = v.texCoords;
66: b.light = i.light;
67: #if defined(DEBUG_NORMAL)
68: b.color = vec4(norm, 1.);
69: #else
70: b.color = i.color;
71: #endif
72: return b;
73: }
74: attribute vec3 a_v_pos;
75: attribute vec3 a_v_normal;
76: attribute vec2 a_v_texCoords;
77:
78: attribute vec2 a_i_light;
79: attribute vec4 a_i_color;
80: attribute mat4 a_i_transform;
81: attribute mat3 a_i_normalMat;
82:
83:
84: varying vec2 v2f_texCoords;
85: varying vec4 v2f_color;
86: varying float v2f_diffuse;
87: varying vec2 v2f_light;
88:
89:
90: void main() {
91: Vertex v;
92: v.pos = a_v_pos;
93: v.normal = a_v_normal;
94: v.texCoords = a_v_texCoords;
95:
96:
97: Instance i;
98: i.light = a_i_light;
99: i.color = a_i_color;
100: i.transform = a_i_transform;
101: i.normalMat = a_i_normalMat;
102:
103:
104: BlockFrag o = FLWMain(v, i);
105:
106: v2f_texCoords = o.texCoords;
107: v2f_color = o.color;
108: v2f_diffuse = o.diffuse;
109: v2f_light = o.light;
110:
111: }
[12:42:52] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:52] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26:
27: uniform vec2 uTextureScale;
28: uniform sampler2D uBlockAtlas;
29: uniform sampler2D uLightMap;
30: uniform sampler2D uCrumbling;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
34: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
35: cr.a = cr.a * diffuseAlpha;
36: return cr;
37: }
38:
39: void FLWFinalizeColor(vec4 color) {
40: #if defined(USE_FOG)
41: float a = color.a;
42: float fog = clamp(FLWFogFactor(), 0., 1.);
43:
44: color = mix(uFogColor, color, fog);
45: color.a = a;
46: #endif
47:
48: gl_FragColor = color;
49: }
50:
51: vec4 FLWLight(vec2 lightCoords) {
52: return vec4(1.);
53: }
54:
55:
56:
57: struct BlockFrag {
58: vec2 texCoords;
59: vec4 color;
60: float diffuse;
61: vec2 light;
62: };
63:
64: void FLWMain(BlockFrag r) {
65: vec4 tex = FLWBlockTexture(r.texCoords);
66:
67: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
68:
69: // flw_WorldPos = ;
70: // flw_Normal = ;
71: // flw_Albedo = tex.rgb;
72: // flw_Alpha = tex.a;
73: // flw_LightMap = r.light;
74: // flw_Tint = r.color;
75: FLWFinalizeColor(color);
76: }
77:
78: varying vec2 v2f_texCoords;
79: varying vec4 v2f_color;
80: varying float v2f_diffuse;
81: varying vec2 v2f_light;
82:
83:
84: //vec3 flw_WorldPos;
85: //vec3 flw_Normal;
86: //vec3 flw_Albedo;
87: //float flw_Alpha;
88: //vec2 flw_LightMap;
89: //vec4 flw_Tint;
90:
91: void main() {
92: BlockFrag f;
93: f.texCoords = v2f_texCoords;
94: f.color = v2f_color;
95: f.diffuse = v2f_diffuse;
96: f.light = v2f_light;
97:
98:
99: FLWMain(f);
100: }
[12:42:52] [main/ERROR]: Shader compilation log for flywheel:model.vert: No errors.
[12:42:52] [main/ERROR]: Source for shader 'flywheel:model.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: float diffuse(vec3 normal) {
27: vec3 n2 = normal * normal * vec3(.6, .25, .8);
28: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
29: }
30:
31:
32: struct Vertex {
33: vec3 pos;
34: vec3 normal;
35: vec2 texCoords;
36: };
37:
38: struct BlockFrag {
39: vec2 texCoords;
40: vec4 color;
41: float diffuse;
42: vec2 light;
43: };
44:
45:
46: struct Instance {
47: vec2 light;
48: vec4 color;
49: mat4 transform;
50: mat3 normalMat;
51: };
52:
53: BlockFrag FLWMain(Vertex v, Instance i) {
54: vec4 worldPos = i.transform * vec4(v.pos, 1.);
55:
56: vec3 norm = i.normalMat * v.normal;
57:
58: FLWFinalizeWorldPos(worldPos);
59: FLWFinalizeNormal(norm);
60:
61: norm = normalize(norm);
62:
63: BlockFrag b;
64: b.diffuse = diffuse(norm);
65: b.texCoords = v.texCoords;
66: b.light = i.light;
67: #if defined(DEBUG_NORMAL)
68: b.color = vec4(norm, 1.);
69: #else
70: b.color = i.color;
71: #endif
72: return b;
73: }
74: attribute vec3 a_v_pos;
75: attribute vec3 a_v_normal;
76: attribute vec2 a_v_texCoords;
77:
78: attribute vec2 a_i_light;
79: attribute vec4 a_i_color;
80: attribute mat4 a_i_transform;
81: attribute mat3 a_i_normalMat;
82:
83:
84: varying vec2 v2f_texCoords;
85: varying vec4 v2f_color;
86: varying float v2f_diffuse;
87: varying vec2 v2f_light;
88:
89:
90: void main() {
91: Vertex v;
92: v.pos = a_v_pos;
93: v.normal = a_v_normal;
94: v.texCoords = a_v_texCoords;
95:
96:
97: Instance i;
98: i.light = a_i_light;
99: i.color = a_i_color;
100: i.transform = a_i_transform;
101: i.normalMat = a_i_normalMat;
102:
103:
104: BlockFrag o = FLWMain(v, i);
105:
106: v2f_texCoords = o.texCoords;
107: v2f_color = o.color;
108: v2f_diffuse = o.diffuse;
109: v2f_light = o.light;
110:
111: }
[12:42:55] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:55] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26:
27: uniform vec2 uTextureScale;
28: uniform sampler2D uBlockAtlas;
29: uniform sampler2D uLightMap;
30: uniform sampler2D uCrumbling;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
34: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
35: cr.a = cr.a * diffuseAlpha;
36: return cr;
37: }
38:
39: void FLWFinalizeColor(vec4 color) {
40: #if defined(USE_FOG)
41: float a = color.a;
42: float fog = clamp(FLWFogFactor(), 0., 1.);
43:
44: color = mix(uFogColor, color, fog);
45: color.a = a;
46: #endif
47:
48: gl_FragColor = color;
49: }
50:
51: vec4 FLWLight(vec2 lightCoords) {
52: return vec4(1.);
53: }
54:
55:
56:
57: struct BlockFrag {
58: vec2 texCoords;
59: vec4 color;
60: float diffuse;
61: vec2 light;
62: };
63:
64: void FLWMain(BlockFrag r) {
65: vec4 tex = FLWBlockTexture(r.texCoords);
66:
67: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
68:
69: // flw_WorldPos = ;
70: // flw_Normal = ;
71: // flw_Albedo = tex.rgb;
72: // flw_Alpha = tex.a;
73: // flw_LightMap = r.light;
74: // flw_Tint = r.color;
75: FLWFinalizeColor(color);
76: }
77:
78: varying vec2 v2f_texCoords;
79: varying vec4 v2f_color;
80: varying float v2f_diffuse;
81: varying vec2 v2f_light;
82:
83:
84: //vec3 flw_WorldPos;
85: //vec3 flw_Normal;
86: //vec3 flw_Albedo;
87: //float flw_Alpha;
88: //vec2 flw_LightMap;
89: //vec4 flw_Tint;
90:
91: void main() {
92: BlockFrag f;
93: f.texCoords = v2f_texCoords;
94: f.color = v2f_color;
95: f.diffuse = v2f_diffuse;
96: f.light = v2f_light;
97:
98:
99: FLWMain(f);
100: }
[12:42:55] [main/ERROR]: Shader compilation log for flywheel:model.vert: No errors.
[12:42:55] [main/ERROR]: Source for shader 'flywheel:model.vert':
1: #version 110
2:
3: uniform float uTime;
4: uniform mat4 uViewProjection;
5: uniform vec3 uCameraPos;
6:
7: #if defined(USE_FOG)
8: varying float FragDistance;
9: #endif
10:
11: void FLWFinalizeWorldPos(inout vec4 worldPos) {
12: #if defined(USE_FOG)
13: FragDistance = length(worldPos.xyz - uCameraPos);
14: #endif
15:
16: gl_Position = uViewProjection * worldPos;
17: }
18:
19: void FLWFinalizeNormal(inout vec3 normal) {
20: // noop
21: }
22:
23:
24: float diffuse(vec3 normal) {
25: vec3 n2 = normal * normal * vec3(.6, .25, .8);
26: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
27: }
28:
29:
30: struct Vertex {
31: vec3 pos;
32: vec3 normal;
33: vec2 texCoords;
34: };
35:
36: struct BlockFrag {
37: vec2 texCoords;
38: vec4 color;
39: float diffuse;
40: vec2 light;
41: };
42:
43:
44: struct Instance {
45: vec2 light;
46: vec4 color;
47: mat4 transform;
48: mat3 normalMat;
49: };
50:
51: BlockFrag FLWMain(Vertex v, Instance i) {
52: vec4 worldPos = i.transform * vec4(v.pos, 1.);
53:
54: vec3 norm = i.normalMat * v.normal;
55:
56: FLWFinalizeWorldPos(worldPos);
57: FLWFinalizeNormal(norm);
58:
59: norm = normalize(norm);
60:
61: BlockFrag b;
62: b.diffuse = diffuse(norm);
63: b.texCoords = v.texCoords;
64: b.light = i.light;
65: #if defined(DEBUG_NORMAL)
66: b.color = vec4(norm, 1.);
67: #else
68: b.color = i.color;
69: #endif
70: return b;
71: }
72: attribute vec3 a_v_pos;
73: attribute vec3 a_v_normal;
74: attribute vec2 a_v_texCoords;
75:
76: attribute vec2 a_i_light;
77: attribute vec4 a_i_color;
78: attribute mat4 a_i_transform;
79: attribute mat3 a_i_normalMat;
80:
81:
82: varying vec2 v2f_texCoords;
83: varying vec4 v2f_color;
84: varying float v2f_diffuse;
85: varying vec2 v2f_light;
86:
87:
88: void main() {
89: Vertex v;
90: v.pos = a_v_pos;
91: v.normal = a_v_normal;
92: v.texCoords = a_v_texCoords;
93:
94:
95: Instance i;
96: i.light = a_i_light;
97: i.color = a_i_color;
98: i.transform = a_i_transform;
99: i.normalMat = a_i_normalMat;
100:
101:
102: BlockFrag o = FLWMain(v, i);
103:
104: v2f_texCoords = o.texCoords;
105: v2f_color = o.color;
106: v2f_diffuse = o.diffuse;
107: v2f_light = o.light;
108:
109: }
[12:42:58] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:42:58] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24:
25: uniform vec2 uTextureScale;
26: uniform sampler2D uBlockAtlas;
27: uniform sampler2D uLightMap;
28: uniform sampler2D uCrumbling;
29:
30: vec4 FLWBlockTexture(vec2 texCoords) {
31: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
32: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
33: cr.a = cr.a * diffuseAlpha;
34: return cr;
35: }
36:
37: void FLWFinalizeColor(vec4 color) {
38: #if defined(USE_FOG)
39: float a = color.a;
40: float fog = clamp(FLWFogFactor(), 0., 1.);
41:
42: color = mix(uFogColor, color, fog);
43: color.a = a;
44: #endif
45:
46: gl_FragColor = color;
47: }
48:
49: vec4 FLWLight(vec2 lightCoords) {
50: return vec4(1.);
51: }
52:
53:
54:
55: struct BlockFrag {
56: vec2 texCoords;
57: vec4 color;
58: float diffuse;
59: vec2 light;
60: };
61:
62: void FLWMain(BlockFrag r) {
63: vec4 tex = FLWBlockTexture(r.texCoords);
64:
65: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
66:
67: // flw_WorldPos = ;
68: // flw_Normal = ;
69: // flw_Albedo = tex.rgb;
70: // flw_Alpha = tex.a;
71: // flw_LightMap = r.light;
72: // flw_Tint = r.color;
73: FLWFinalizeColor(color);
74: }
75:
76: varying vec2 v2f_texCoords;
77: varying vec4 v2f_color;
78: varying float v2f_diffuse;
79: varying vec2 v2f_light;
80:
81:
82: //vec3 flw_WorldPos;
83: //vec3 flw_Normal;
84: //vec3 flw_Albedo;
85: //float flw_Alpha;
86: //vec2 flw_LightMap;
87: //vec4 flw_Tint;
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:42:58] [main/ERROR]: Shader compilation log for create:belt.vert: No errors.
[12:42:58] [main/ERROR]: Source for shader 'create:belt.vert':
1: #version 110
2: #define DEBUG_RAINBOW
3:
4: #define PI 3.1415926538
5:
6: uniform float uTime;
7: uniform mat4 uViewProjection;
8: uniform vec3 uCameraPos;
9:
10: #if defined(USE_FOG)
11: varying float FragDistance;
12: #endif
13:
14: void FLWFinalizeWorldPos(inout vec4 worldPos) {
15: #if defined(USE_FOG)
16: FragDistance = length(worldPos.xyz - uCameraPos);
17: #endif
18:
19: gl_Position = uViewProjection * worldPos;
20: }
21:
22: void FLWFinalizeNormal(inout vec3 normal) {
23: // noop
24: }
25:
26:
27: #define PIOVER2 1.5707963268
28:
29: vec4 quat(vec3 axis, float angle) {
30: float halfAngle = angle * PIOVER2 / 180.0;
31: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
32: return vec4(axis.xyz * cs.y, cs.x);
33: }
34:
35: vec4 quatMult(vec4 q1, vec4 q2) {
36: // disgustingly vectorized quaternion multiplication
37: vec4 a = q1.w * q2.xyzw;
38: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
39: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
40: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
41:
42: return a + b + c + d;
43: }
44:
45: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
46: vec3 i = q.xyz;
47: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
48: }
49:
50: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
51: return rotateVertexByQuat(v, quat(axis, angle));
52: }
53:
54: mat4 rotate(vec3 axis, float angle) {
55: float s = sin(angle);
56: float c = cos(angle);
57: float oc = 1. - c;
58:
59: vec3 sa = axis * s;
60:
61: mat4 mr = mat4(1.);
62: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
63: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
64: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
65:
66: return mr;
67: }
68:
69: mat4 rotation(vec3 rot) {
70: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
71: }
72:
73: mat3 modelToNormal(mat4 mat) {
74: // Discard the edges. This won't be accurate for scaled or skewed matrices,
75: // but we don't have to work with those often.
76: mat3 m;
77: m[0] = mat[0].xyz;
78: m[1] = mat[1].xyz;
79: m[2] = mat[2].xyz;
80: return m;
81: }
82:
83: float diffuse(vec3 normal) {
84: vec3 n2 = normal * normal * vec3(.6, .25, .8);
85: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
86: }
87:
88:
89: struct Belt {
90: vec2 light;
91: vec4 color;
92: vec3 pos;
93: float speed;
94: float offset;
95: vec4 rotation;
96: vec2 sourceTexture;
97: vec4 scrollTexture;
98: float scrollMult;
99: };
100:
101:
102: struct Vertex {
103: vec3 pos;
104: vec3 normal;
105: vec2 texCoords;
106: };
107:
108: struct BlockFrag {
109: vec2 texCoords;
110: vec4 color;
111: float diffuse;
112: vec2 light;
113: };
114:
115: BlockFrag FLWMain(Vertex v, Belt instance) {
116: vec3 rotated = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5;
117:
118: vec4 worldPos = vec4(rotated, 1.);
119:
120: vec3 norm = rotateVertexByQuat(v.normal, instance.rotation);
121:
122: FLWFinalizeWorldPos(worldPos);
123: FLWFinalizeNormal(norm);
124:
125: float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y;
126: float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult;
127:
128: BlockFrag b;
129: b.diffuse = diffuse(norm);
130: b.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
131: b.light = instance.light;
132:
133: #if defined(DEBUG_RAINBOW)
134: b.color = instance.color;
135: #elif defined(DEBUG_NORMAL)
136: b.color = vec4(norm, 1.);
137: #else
138: b.color = vec4(1.);
139: #endif
140:
141: return b;
142: }
143: attribute vec3 a_v_pos;
144: attribute vec3 a_v_normal;
145: attribute vec2 a_v_texCoords;
146:
147: attribute vec2 a_i_light;
148: attribute vec4 a_i_color;
149: attribute vec3 a_i_pos;
150: attribute float a_i_speed;
151: attribute float a_i_offset;
152: attribute vec4 a_i_rotation;
153: attribute vec2 a_i_sourceTexture;
154: attribute vec4 a_i_scrollTexture;
155: attribute float a_i_scrollMult;
156:
157:
158: varying vec2 v2f_texCoords;
159: varying vec4 v2f_color;
160: varying float v2f_diffuse;
161: varying vec2 v2f_light;
162:
163:
164: void main() {
165: Vertex v;
166: v.pos = a_v_pos;
167: v.normal = a_v_normal;
168: v.texCoords = a_v_texCoords;
169:
170:
171: Belt i;
172: i.light = a_i_light;
173: i.color = a_i_color;
174: i.pos = a_i_pos;
175: i.speed = a_i_speed;
176: i.offset = a_i_offset;
177: i.rotation = a_i_rotation;
178: i.sourceTexture = a_i_sourceTexture;
179: i.scrollTexture = a_i_scrollTexture;
180: i.scrollMult = a_i_scrollMult;
181:
182:
183: BlockFrag o = FLWMain(v, i);
184:
185: v2f_texCoords = o.texCoords;
186: v2f_color = o.color;
187: v2f_diffuse = o.diffuse;
188: v2f_light = o.light;
189:
190: }
[12:43:02] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:02] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_RAINBOW
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25:
26: uniform vec2 uTextureScale;
27: uniform sampler2D uBlockAtlas;
28: uniform sampler2D uLightMap;
29: uniform sampler2D uCrumbling;
30:
31: vec4 FLWBlockTexture(vec2 texCoords) {
32: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
33: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
34: cr.a = cr.a * diffuseAlpha;
35: return cr;
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return vec4(1.);
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:43:02] [main/ERROR]: Shader compilation log for create:belt.vert: No errors.
[12:43:02] [main/ERROR]: Source for shader 'create:belt.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #define PI 3.1415926538
5:
6: uniform float uTime;
7: uniform mat4 uViewProjection;
8: uniform vec3 uCameraPos;
9:
10: #if defined(USE_FOG)
11: varying float FragDistance;
12: #endif
13:
14: void FLWFinalizeWorldPos(inout vec4 worldPos) {
15: #if defined(USE_FOG)
16: FragDistance = length(worldPos.xyz - uCameraPos);
17: #endif
18:
19: gl_Position = uViewProjection * worldPos;
20: }
21:
22: void FLWFinalizeNormal(inout vec3 normal) {
23: // noop
24: }
25:
26:
27: #define PIOVER2 1.5707963268
28:
29: vec4 quat(vec3 axis, float angle) {
30: float halfAngle = angle * PIOVER2 / 180.0;
31: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
32: return vec4(axis.xyz * cs.y, cs.x);
33: }
34:
35: vec4 quatMult(vec4 q1, vec4 q2) {
36: // disgustingly vectorized quaternion multiplication
37: vec4 a = q1.w * q2.xyzw;
38: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
39: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
40: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
41:
42: return a + b + c + d;
43: }
44:
45: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
46: vec3 i = q.xyz;
47: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
48: }
49:
50: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
51: return rotateVertexByQuat(v, quat(axis, angle));
52: }
53:
54: mat4 rotate(vec3 axis, float angle) {
55: float s = sin(angle);
56: float c = cos(angle);
57: float oc = 1. - c;
58:
59: vec3 sa = axis * s;
60:
61: mat4 mr = mat4(1.);
62: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
63: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
64: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
65:
66: return mr;
67: }
68:
69: mat4 rotation(vec3 rot) {
70: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
71: }
72:
73: mat3 modelToNormal(mat4 mat) {
74: // Discard the edges. This won't be accurate for scaled or skewed matrices,
75: // but we don't have to work with those often.
76: mat3 m;
77: m[0] = mat[0].xyz;
78: m[1] = mat[1].xyz;
79: m[2] = mat[2].xyz;
80: return m;
81: }
82:
83: float diffuse(vec3 normal) {
84: vec3 n2 = normal * normal * vec3(.6, .25, .8);
85: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
86: }
87:
88:
89: struct Belt {
90: vec2 light;
91: vec4 color;
92: vec3 pos;
93: float speed;
94: float offset;
95: vec4 rotation;
96: vec2 sourceTexture;
97: vec4 scrollTexture;
98: float scrollMult;
99: };
100:
101:
102: struct Vertex {
103: vec3 pos;
104: vec3 normal;
105: vec2 texCoords;
106: };
107:
108: struct BlockFrag {
109: vec2 texCoords;
110: vec4 color;
111: float diffuse;
112: vec2 light;
113: };
114:
115: BlockFrag FLWMain(Vertex v, Belt instance) {
116: vec3 rotated = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5;
117:
118: vec4 worldPos = vec4(rotated, 1.);
119:
120: vec3 norm = rotateVertexByQuat(v.normal, instance.rotation);
121:
122: FLWFinalizeWorldPos(worldPos);
123: FLWFinalizeNormal(norm);
124:
125: float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y;
126: float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult;
127:
128: BlockFrag b;
129: b.diffuse = diffuse(norm);
130: b.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
131: b.light = instance.light;
132:
133: #if defined(DEBUG_RAINBOW)
134: b.color = instance.color;
135: #elif defined(DEBUG_NORMAL)
136: b.color = vec4(norm, 1.);
137: #else
138: b.color = vec4(1.);
139: #endif
140:
141: return b;
142: }
143: attribute vec3 a_v_pos;
144: attribute vec3 a_v_normal;
145: attribute vec2 a_v_texCoords;
146:
147: attribute vec2 a_i_light;
148: attribute vec4 a_i_color;
149: attribute vec3 a_i_pos;
150: attribute float a_i_speed;
151: attribute float a_i_offset;
152: attribute vec4 a_i_rotation;
153: attribute vec2 a_i_sourceTexture;
154: attribute vec4 a_i_scrollTexture;
155: attribute float a_i_scrollMult;
156:
157:
158: varying vec2 v2f_texCoords;
159: varying vec4 v2f_color;
160: varying float v2f_diffuse;
161: varying vec2 v2f_light;
162:
163:
164: void main() {
165: Vertex v;
166: v.pos = a_v_pos;
167: v.normal = a_v_normal;
168: v.texCoords = a_v_texCoords;
169:
170:
171: Belt i;
172: i.light = a_i_light;
173: i.color = a_i_color;
174: i.pos = a_i_pos;
175: i.speed = a_i_speed;
176: i.offset = a_i_offset;
177: i.rotation = a_i_rotation;
178: i.sourceTexture = a_i_sourceTexture;
179: i.scrollTexture = a_i_scrollTexture;
180: i.scrollMult = a_i_scrollMult;
181:
182:
183: BlockFrag o = FLWMain(v, i);
184:
185: v2f_texCoords = o.texCoords;
186: v2f_color = o.color;
187: v2f_diffuse = o.diffuse;
188: v2f_light = o.light;
189:
190: }
[12:43:04] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:04] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25:
26: uniform vec2 uTextureScale;
27: uniform sampler2D uBlockAtlas;
28: uniform sampler2D uLightMap;
29: uniform sampler2D uCrumbling;
30:
31: vec4 FLWBlockTexture(vec2 texCoords) {
32: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
33: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
34: cr.a = cr.a * diffuseAlpha;
35: return cr;
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return vec4(1.);
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:43:08] [main/ERROR]: Shader compilation log for create:belt.vert: No errors.
[12:43:08] [main/ERROR]: Source for shader 'create:belt.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: #define PIOVER2 1.5707963268
29:
30: vec4 quat(vec3 axis, float angle) {
31: float halfAngle = angle * PIOVER2 / 180.0;
32: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
33: return vec4(axis.xyz * cs.y, cs.x);
34: }
35:
36: vec4 quatMult(vec4 q1, vec4 q2) {
37: // disgustingly vectorized quaternion multiplication
38: vec4 a = q1.w * q2.xyzw;
39: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
40: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
41: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
42:
43: return a + b + c + d;
44: }
45:
46: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
47: vec3 i = q.xyz;
48: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
49: }
50:
51: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
52: return rotateVertexByQuat(v, quat(axis, angle));
53: }
54:
55: mat4 rotate(vec3 axis, float angle) {
56: float s = sin(angle);
57: float c = cos(angle);
58: float oc = 1. - c;
59:
60: vec3 sa = axis * s;
61:
62: mat4 mr = mat4(1.);
63: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
64: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
65: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
66:
67: return mr;
68: }
69:
70: mat4 rotation(vec3 rot) {
71: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
72: }
73:
74: mat3 modelToNormal(mat4 mat) {
75: // Discard the edges. This won't be accurate for scaled or skewed matrices,
76: // but we don't have to work with those often.
77: mat3 m;
78: m[0] = mat[0].xyz;
79: m[1] = mat[1].xyz;
80: m[2] = mat[2].xyz;
81: return m;
82: }
83:
84: float diffuse(vec3 normal) {
85: vec3 n2 = normal * normal * vec3(.6, .25, .8);
86: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
87: }
88:
89:
90: struct Belt {
91: vec2 light;
92: vec4 color;
93: vec3 pos;
94: float speed;
95: float offset;
96: vec4 rotation;
97: vec2 sourceTexture;
98: vec4 scrollTexture;
99: float scrollMult;
100: };
101:
102:
103: struct Vertex {
104: vec3 pos;
105: vec3 normal;
106: vec2 texCoords;
107: };
108:
109: struct BlockFrag {
110: vec2 texCoords;
111: vec4 color;
112: float diffuse;
113: vec2 light;
114: };
115:
116: BlockFrag FLWMain(Vertex v, Belt instance) {
117: vec3 rotated = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5;
118:
119: vec4 worldPos = vec4(rotated, 1.);
120:
121: vec3 norm = rotateVertexByQuat(v.normal, instance.rotation);
122:
123: FLWFinalizeWorldPos(worldPos);
124: FLWFinalizeNormal(norm);
125:
126: float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y;
127: float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult;
128:
129: BlockFrag b;
130: b.diffuse = diffuse(norm);
131: b.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
132: b.light = instance.light;
133:
134: #if defined(DEBUG_RAINBOW)
135: b.color = instance.color;
136: #elif defined(DEBUG_NORMAL)
137: b.color = vec4(norm, 1.);
138: #else
139: b.color = vec4(1.);
140: #endif
141:
142: return b;
143: }
144: attribute vec3 a_v_pos;
145: attribute vec3 a_v_normal;
146: attribute vec2 a_v_texCoords;
147:
148: attribute vec2 a_i_light;
149: attribute vec4 a_i_color;
150: attribute vec3 a_i_pos;
151: attribute float a_i_speed;
152: attribute float a_i_offset;
153: attribute vec4 a_i_rotation;
154: attribute vec2 a_i_sourceTexture;
155: attribute vec4 a_i_scrollTexture;
156: attribute float a_i_scrollMult;
157:
158:
159: varying vec2 v2f_texCoords;
160: varying vec4 v2f_color;
161: varying float v2f_diffuse;
162: varying vec2 v2f_light;
163:
164:
165: void main() {
166: Vertex v;
167: v.pos = a_v_pos;
168: v.normal = a_v_normal;
169: v.texCoords = a_v_texCoords;
170:
171:
172: Belt i;
173: i.light = a_i_light;
174: i.color = a_i_color;
175: i.pos = a_i_pos;
176: i.speed = a_i_speed;
177: i.offset = a_i_offset;
178: i.rotation = a_i_rotation;
179: i.sourceTexture = a_i_sourceTexture;
180: i.scrollTexture = a_i_scrollTexture;
181: i.scrollMult = a_i_scrollMult;
182:
183:
184: BlockFrag o = FLWMain(v, i);
185:
186: v2f_texCoords = o.texCoords;
187: v2f_color = o.color;
188: v2f_diffuse = o.diffuse;
189: v2f_light = o.light;
190:
191: }
[12:43:12] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:12] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26:
27: uniform vec2 uTextureScale;
28: uniform sampler2D uBlockAtlas;
29: uniform sampler2D uLightMap;
30: uniform sampler2D uCrumbling;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
34: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
35: cr.a = cr.a * diffuseAlpha;
36: return cr;
37: }
38:
39: void FLWFinalizeColor(vec4 color) {
40: #if defined(USE_FOG)
41: float a = color.a;
42: float fog = clamp(FLWFogFactor(), 0., 1.);
43:
44: color = mix(uFogColor, color, fog);
45: color.a = a;
46: #endif
47:
48: gl_FragColor = color;
49: }
50:
51: vec4 FLWLight(vec2 lightCoords) {
52: return vec4(1.);
53: }
54:
55:
56:
57: struct BlockFrag {
58: vec2 texCoords;
59: vec4 color;
60: float diffuse;
61: vec2 light;
62: };
63:
64: void FLWMain(BlockFrag r) {
65: vec4 tex = FLWBlockTexture(r.texCoords);
66:
67: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
68:
69: // flw_WorldPos = ;
70: // flw_Normal = ;
71: // flw_Albedo = tex.rgb;
72: // flw_Alpha = tex.a;
73: // flw_LightMap = r.light;
74: // flw_Tint = r.color;
75: FLWFinalizeColor(color);
76: }
77:
78: varying vec2 v2f_texCoords;
79: varying vec4 v2f_color;
80: varying float v2f_diffuse;
81: varying vec2 v2f_light;
82:
83:
84: //vec3 flw_WorldPos;
85: //vec3 flw_Normal;
86: //vec3 flw_Albedo;
87: //float flw_Alpha;
88: //vec2 flw_LightMap;
89: //vec4 flw_Tint;
90:
91: void main() {
92: BlockFrag f;
93: f.texCoords = v2f_texCoords;
94: f.color = v2f_color;
95: f.diffuse = v2f_diffuse;
96: f.light = v2f_light;
97:
98:
99: FLWMain(f);
100: }
[12:43:12] [main/ERROR]: Shader compilation log for create:belt.vert: No errors.
[12:43:12] [main/ERROR]: Source for shader 'create:belt.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: #define PIOVER2 1.5707963268
29:
30: vec4 quat(vec3 axis, float angle) {
31: float halfAngle = angle * PIOVER2 / 180.0;
32: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
33: return vec4(axis.xyz * cs.y, cs.x);
34: }
35:
36: vec4 quatMult(vec4 q1, vec4 q2) {
37: // disgustingly vectorized quaternion multiplication
38: vec4 a = q1.w * q2.xyzw;
39: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
40: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
41: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
42:
43: return a + b + c + d;
44: }
45:
46: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
47: vec3 i = q.xyz;
48: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
49: }
50:
51: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
52: return rotateVertexByQuat(v, quat(axis, angle));
53: }
54:
55: mat4 rotate(vec3 axis, float angle) {
56: float s = sin(angle);
57: float c = cos(angle);
58: float oc = 1. - c;
59:
60: vec3 sa = axis * s;
61:
62: mat4 mr = mat4(1.);
63: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
64: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
65: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
66:
67: return mr;
68: }
69:
70: mat4 rotation(vec3 rot) {
71: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
72: }
73:
74: mat3 modelToNormal(mat4 mat) {
75: // Discard the edges. This won't be accurate for scaled or skewed matrices,
76: // but we don't have to work with those often.
77: mat3 m;
78: m[0] = mat[0].xyz;
79: m[1] = mat[1].xyz;
80: m[2] = mat[2].xyz;
81: return m;
82: }
83:
84: float diffuse(vec3 normal) {
85: vec3 n2 = normal * normal * vec3(.6, .25, .8);
86: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
87: }
88:
89:
90: struct Belt {
91: vec2 light;
92: vec4 color;
93: vec3 pos;
94: float speed;
95: float offset;
96: vec4 rotation;
97: vec2 sourceTexture;
98: vec4 scrollTexture;
99: float scrollMult;
100: };
101:
102:
103: struct Vertex {
104: vec3 pos;
105: vec3 normal;
106: vec2 texCoords;
107: };
108:
109: struct BlockFrag {
110: vec2 texCoords;
111: vec4 color;
112: float diffuse;
113: vec2 light;
114: };
115:
116: BlockFrag FLWMain(Vertex v, Belt instance) {
117: vec3 rotated = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5;
118:
119: vec4 worldPos = vec4(rotated, 1.);
120:
121: vec3 norm = rotateVertexByQuat(v.normal, instance.rotation);
122:
123: FLWFinalizeWorldPos(worldPos);
124: FLWFinalizeNormal(norm);
125:
126: float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y;
127: float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult;
128:
129: BlockFrag b;
130: b.diffuse = diffuse(norm);
131: b.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
132: b.light = instance.light;
133:
134: #if defined(DEBUG_RAINBOW)
135: b.color = instance.color;
136: #elif defined(DEBUG_NORMAL)
137: b.color = vec4(norm, 1.);
138: #else
139: b.color = vec4(1.);
140: #endif
141:
142: return b;
143: }
144: attribute vec3 a_v_pos;
145: attribute vec3 a_v_normal;
146: attribute vec2 a_v_texCoords;
147:
148: attribute vec2 a_i_light;
149: attribute vec4 a_i_color;
150: attribute vec3 a_i_pos;
151: attribute float a_i_speed;
152: attribute float a_i_offset;
153: attribute vec4 a_i_rotation;
154: attribute vec2 a_i_sourceTexture;
155: attribute vec4 a_i_scrollTexture;
156: attribute float a_i_scrollMult;
157:
158:
159: varying vec2 v2f_texCoords;
160: varying vec4 v2f_color;
161: varying float v2f_diffuse;
162: varying vec2 v2f_light;
163:
164:
165: void main() {
166: Vertex v;
167: v.pos = a_v_pos;
168: v.normal = a_v_normal;
169: v.texCoords = a_v_texCoords;
170:
171:
172: Belt i;
173: i.light = a_i_light;
174: i.color = a_i_color;
175: i.pos = a_i_pos;
176: i.speed = a_i_speed;
177: i.offset = a_i_offset;
178: i.rotation = a_i_rotation;
179: i.sourceTexture = a_i_sourceTexture;
180: i.scrollTexture = a_i_scrollTexture;
181: i.scrollMult = a_i_scrollMult;
182:
183:
184: BlockFrag o = FLWMain(v, i);
185:
186: v2f_texCoords = o.texCoords;
187: v2f_color = o.color;
188: v2f_diffuse = o.diffuse;
189: v2f_light = o.light;
190:
191: }
[12:43:13] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:13] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26:
27: uniform vec2 uTextureScale;
28: uniform sampler2D uBlockAtlas;
29: uniform sampler2D uLightMap;
30: uniform sampler2D uCrumbling;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
34: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
35: cr.a = cr.a * diffuseAlpha;
36: return cr;
37: }
38:
39: void FLWFinalizeColor(vec4 color) {
40: #if defined(USE_FOG)
41: float a = color.a;
42: float fog = clamp(FLWFogFactor(), 0., 1.);
43:
44: color = mix(uFogColor, color, fog);
45: color.a = a;
46: #endif
47:
48: gl_FragColor = color;
49: }
50:
51: vec4 FLWLight(vec2 lightCoords) {
52: return vec4(1.);
53: }
54:
55:
56:
57: struct BlockFrag {
58: vec2 texCoords;
59: vec4 color;
60: float diffuse;
61: vec2 light;
62: };
63:
64: void FLWMain(BlockFrag r) {
65: vec4 tex = FLWBlockTexture(r.texCoords);
66:
67: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
68:
69: // flw_WorldPos = ;
70: // flw_Normal = ;
71: // flw_Albedo = tex.rgb;
72: // flw_Alpha = tex.a;
73: // flw_LightMap = r.light;
74: // flw_Tint = r.color;
75: FLWFinalizeColor(color);
76: }
77:
78: varying vec2 v2f_texCoords;
79: varying vec4 v2f_color;
80: varying float v2f_diffuse;
81: varying vec2 v2f_light;
82:
83:
84: //vec3 flw_WorldPos;
85: //vec3 flw_Normal;
86: //vec3 flw_Albedo;
87: //float flw_Alpha;
88: //vec2 flw_LightMap;
89: //vec4 flw_Tint;
90:
91: void main() {
92: BlockFrag f;
93: f.texCoords = v2f_texCoords;
94: f.color = v2f_color;
95: f.diffuse = v2f_diffuse;
96: f.light = v2f_light;
97:
98:
99: FLWMain(f);
100: }
[12:43:13] [main/ERROR]: Shader compilation log for create:belt.vert: No errors.
[12:43:13] [main/ERROR]: Source for shader 'create:belt.vert':
1: #version 110
2:
3: #define PI 3.1415926538
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: #define PIOVER2 1.5707963268
27:
28: vec4 quat(vec3 axis, float angle) {
29: float halfAngle = angle * PIOVER2 / 180.0;
30: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
31: return vec4(axis.xyz * cs.y, cs.x);
32: }
33:
34: vec4 quatMult(vec4 q1, vec4 q2) {
35: // disgustingly vectorized quaternion multiplication
36: vec4 a = q1.w * q2.xyzw;
37: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
38: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
39: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
40:
41: return a + b + c + d;
42: }
43:
44: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
45: vec3 i = q.xyz;
46: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
47: }
48:
49: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
50: return rotateVertexByQuat(v, quat(axis, angle));
51: }
52:
53: mat4 rotate(vec3 axis, float angle) {
54: float s = sin(angle);
55: float c = cos(angle);
56: float oc = 1. - c;
57:
58: vec3 sa = axis * s;
59:
60: mat4 mr = mat4(1.);
61: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
62: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
63: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
64:
65: return mr;
66: }
67:
68: mat4 rotation(vec3 rot) {
69: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
70: }
71:
72: mat3 modelToNormal(mat4 mat) {
73: // Discard the edges. This won't be accurate for scaled or skewed matrices,
74: // but we don't have to work with those often.
75: mat3 m;
76: m[0] = mat[0].xyz;
77: m[1] = mat[1].xyz;
78: m[2] = mat[2].xyz;
79: return m;
80: }
81:
82: float diffuse(vec3 normal) {
83: vec3 n2 = normal * normal * vec3(.6, .25, .8);
84: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
85: }
86:
87:
88: struct Belt {
89: vec2 light;
90: vec4 color;
91: vec3 pos;
92: float speed;
93: float offset;
94: vec4 rotation;
95: vec2 sourceTexture;
96: vec4 scrollTexture;
97: float scrollMult;
98: };
99:
100:
101: struct Vertex {
102: vec3 pos;
103: vec3 normal;
104: vec2 texCoords;
105: };
106:
107: struct BlockFrag {
108: vec2 texCoords;
109: vec4 color;
110: float diffuse;
111: vec2 light;
112: };
113:
114: BlockFrag FLWMain(Vertex v, Belt instance) {
115: vec3 rotated = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5;
116:
117: vec4 worldPos = vec4(rotated, 1.);
118:
119: vec3 norm = rotateVertexByQuat(v.normal, instance.rotation);
120:
121: FLWFinalizeWorldPos(worldPos);
122: FLWFinalizeNormal(norm);
123:
124: float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y;
125: float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult;
126:
127: BlockFrag b;
128: b.diffuse = diffuse(norm);
129: b.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
130: b.light = instance.light;
131:
132: #if defined(DEBUG_RAINBOW)
133: b.color = instance.color;
134: #elif defined(DEBUG_NORMAL)
135: b.color = vec4(norm, 1.);
136: #else
137: b.color = vec4(1.);
138: #endif
139:
140: return b;
141: }
142: attribute vec3 a_v_pos;
143: attribute vec3 a_v_normal;
144: attribute vec2 a_v_texCoords;
145:
146: attribute vec2 a_i_light;
147: attribute vec4 a_i_color;
148: attribute vec3 a_i_pos;
149: attribute float a_i_speed;
150: attribute float a_i_offset;
151: attribute vec4 a_i_rotation;
152: attribute vec2 a_i_sourceTexture;
153: attribute vec4 a_i_scrollTexture;
154: attribute float a_i_scrollMult;
155:
156:
157: varying vec2 v2f_texCoords;
158: varying vec4 v2f_color;
159: varying float v2f_diffuse;
160: varying vec2 v2f_light;
161:
162:
163: void main() {
164: Vertex v;
165: v.pos = a_v_pos;
166: v.normal = a_v_normal;
167: v.texCoords = a_v_texCoords;
168:
169:
170: Belt i;
171: i.light = a_i_light;
172: i.color = a_i_color;
173: i.pos = a_i_pos;
174: i.speed = a_i_speed;
175: i.offset = a_i_offset;
176: i.rotation = a_i_rotation;
177: i.sourceTexture = a_i_sourceTexture;
178: i.scrollTexture = a_i_scrollTexture;
179: i.scrollMult = a_i_scrollMult;
180:
181:
182: BlockFrag o = FLWMain(v, i);
183:
184: v2f_texCoords = o.texCoords;
185: v2f_color = o.color;
186: v2f_diffuse = o.diffuse;
187: v2f_light = o.light;
188:
189: }
[12:43:14] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:14] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24:
25: uniform vec2 uTextureScale;
26: uniform sampler2D uBlockAtlas;
27: uniform sampler2D uLightMap;
28: uniform sampler2D uCrumbling;
29:
30: vec4 FLWBlockTexture(vec2 texCoords) {
31: vec4 cr = texture2D(uCrumbling, texCoords * uTextureScale);
32: float diffuseAlpha = texture2D(uBlockAtlas, texCoords).a;
33: cr.a = cr.a * diffuseAlpha;
34: return cr;
35: }
36:
37: void FLWFinalizeColor(vec4 color) {
38: #if defined(USE_FOG)
39: float a = color.a;
40: float fog = clamp(FLWFogFactor(), 0., 1.);
41:
42: color = mix(uFogColor, color, fog);
43: color.a = a;
44: #endif
45:
46: gl_FragColor = color;
47: }
48:
49: vec4 FLWLight(vec2 lightCoords) {
50: return vec4(1.);
51: }
52:
53:
54:
55: struct BlockFrag {
56: vec2 texCoords;
57: vec4 color;
58: float diffuse;
59: vec2 light;
60: };
61:
62: void FLWMain(BlockFrag r) {
63: vec4 tex = FLWBlockTexture(r.texCoords);
64:
65: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
66:
67: // flw_WorldPos = ;
68: // flw_Normal = ;
69: // flw_Albedo = tex.rgb;
70: // flw_Alpha = tex.a;
71: // flw_LightMap = r.light;
72: // flw_Tint = r.color;
73: FLWFinalizeColor(color);
74: }
75:
76: varying vec2 v2f_texCoords;
77: varying vec4 v2f_color;
78: varying float v2f_diffuse;
79: varying vec2 v2f_light;
80:
81:
82: //vec3 flw_WorldPos;
83: //vec3 flw_Normal;
84: //vec3 flw_Albedo;
85: //float flw_Alpha;
86: //vec2 flw_LightMap;
87: //vec4 flw_Tint;
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:43:18] [main/INFO]: Loading context 'flywheel:context/world'
[12:43:18] [main/ERROR]: Shader compilation log for create:rotating.vert: No errors.
[12:43:18] [main/ERROR]: Source for shader 'create:rotating.vert':
1: #version 110
2: #define DEBUG_RAINBOW
3:
4: #define PI 3.1415926538
5:
6: uniform float uTime;
7: uniform mat4 uViewProjection;
8: uniform vec3 uCameraPos;
9:
10: #if defined(USE_FOG)
11: varying float FragDistance;
12: #endif
13:
14: void FLWFinalizeWorldPos(inout vec4 worldPos) {
15: #if defined(USE_FOG)
16: FragDistance = length(worldPos.xyz - uCameraPos);
17: #endif
18:
19: gl_Position = uViewProjection * worldPos;
20: }
21:
22: void FLWFinalizeNormal(inout vec3 normal) {
23: // noop
24: }
25:
26:
27: mat4 rotate(vec3 axis, float angle) {
28: float s = sin(angle);
29: float c = cos(angle);
30: float oc = 1. - c;
31:
32: vec3 sa = axis * s;
33:
34: mat4 mr = mat4(1.);
35: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
36: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
37: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
38:
39: return mr;
40: }
41:
42: mat4 rotation(vec3 rot) {
43: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
44: }
45:
46: mat3 modelToNormal(mat4 mat) {
47: // Discard the edges. This won't be accurate for scaled or skewed matrices,
48: // but we don't have to work with those often.
49: mat3 m;
50: m[0] = mat[0].xyz;
51: m[1] = mat[1].xyz;
52: m[2] = mat[2].xyz;
53: return m;
54: }
55:
56: float diffuse(vec3 normal) {
57: vec3 n2 = normal * normal * vec3(.6, .25, .8);
58: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
59: }
60:
61:
62: struct Rotating {
63: vec2 light;
64: vec4 color;
65: vec3 pos;
66: float speed;
67: float offset;
68: vec3 axis;
69: };
70:
71:
72: struct Vertex {
73: vec3 pos;
74: vec3 normal;
75: vec2 texCoords;
76: };
77:
78: struct BlockFrag {
79: vec2 texCoords;
80: vec4 color;
81: float diffuse;
82: vec2 light;
83: };
84:
85: mat4 kineticRotation(float offset, float speed, vec3 axis) {
86: float degrees = offset + uTime * speed * 3./10.;
87: float angle = fract(degrees / 360.) * PI * 2.;
88:
89: return rotate(axis, angle);
90: }
91:
92: BlockFrag FLWMain(Vertex v, Rotating instance) {
93: mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis);
94:
95: vec4 worldPos = spin * vec4(v.pos - .5, 1.);
96: worldPos += vec4(instance.pos + .5, 0.);
97:
98: vec3 norm = modelToNormal(spin) * v.normal;
99:
100: FLWFinalizeWorldPos(worldPos);
101: FLWFinalizeNormal(norm);
102:
103: BlockFrag b;
104: b.diffuse = diffuse(norm);
105: b.texCoords = v.texCoords;
106: b.light = instance.light;
107:
108: #if defined(DEBUG_RAINBOW)
109: b.color = instance.color;
110: #elif defined(DEBUG_NORMAL)
111: b.color = vec4(norm, 1.);
112: #else
113: b.color = vec4(1.);
114: #endif
115:
116: return b;
117: }
118: attribute vec3 a_v_pos;
119: attribute vec3 a_v_normal;
120: attribute vec2 a_v_texCoords;
121:
122: attribute vec2 a_i_light;
123: attribute vec4 a_i_color;
124: attribute vec3 a_i_pos;
125: attribute float a_i_speed;
126: attribute float a_i_offset;
127: attribute vec3 a_i_axis;
128:
129:
130: varying vec2 v2f_texCoords;
131: varying vec4 v2f_color;
132: varying float v2f_diffuse;
133: varying vec2 v2f_light;
134:
135:
136: void main() {
137: Vertex v;
138: v.pos = a_v_pos;
139: v.normal = a_v_normal;
140: v.texCoords = a_v_texCoords;
141:
142:
143: Rotating i;
144: i.light = a_i_light;
145: i.color = a_i_color;
146: i.pos = a_i_pos;
147: i.speed = a_i_speed;
148: i.offset = a_i_offset;
149: i.axis = a_i_axis;
150:
151:
152: BlockFrag o = FLWMain(v, i);
153:
154: v2f_texCoords = o.texCoords;
155: v2f_color = o.color;
156: v2f_diffuse = o.diffuse;
157: v2f_light = o.light;
158:
159: }
[12:43:22] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:22] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_RAINBOW
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: uniform sampler2D uBlockAtlas;
31: uniform sampler2D uLightMap;
32:
33: vec4 FLWBlockTexture(vec2 texCoords) {
34: return texture2D(uBlockAtlas, texCoords);
35: }
36:
37: void FLWFinalizeColor(vec4 color) {
38: #if defined(USE_FOG)
39: float a = color.a;
40: float fog = clamp(FLWFogFactor(), 0., 1.);
41:
42: color = mix(uFogColor, color, fog);
43: color.a = a;
44: #endif
45:
46: gl_FragColor = color;
47: }
48:
49: vec4 FLWLight(vec2 lightCoords) {
50: return texture2D(uLightMap, shiftLight(lightCoords));
51: }
52:
53:
54:
55: struct BlockFrag {
56: vec2 texCoords;
57: vec4 color;
58: float diffuse;
59: vec2 light;
60: };
61:
62: void FLWMain(BlockFrag r) {
63: vec4 tex = FLWBlockTexture(r.texCoords);
64:
65: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
66:
67: // flw_WorldPos = ;
68: // flw_Normal = ;
69: // flw_Albedo = tex.rgb;
70: // flw_Alpha = tex.a;
71: // flw_LightMap = r.light;
72: // flw_Tint = r.color;
73: FLWFinalizeColor(color);
74: }
75:
76: varying vec2 v2f_texCoords;
77: varying vec4 v2f_color;
78: varying float v2f_diffuse;
79: varying vec2 v2f_light;
80:
81:
82: //vec3 flw_WorldPos;
83: //vec3 flw_Normal;
84: //vec3 flw_Albedo;
85: //float flw_Alpha;
86: //vec2 flw_LightMap;
87: //vec4 flw_Tint;
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:43:22] [main/ERROR]: Shader compilation log for create:rotating.vert: No errors.
[12:43:22] [main/ERROR]: Source for shader 'create:rotating.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #define PI 3.1415926538
5:
6: uniform float uTime;
7: uniform mat4 uViewProjection;
8: uniform vec3 uCameraPos;
9:
10: #if defined(USE_FOG)
11: varying float FragDistance;
12: #endif
13:
14: void FLWFinalizeWorldPos(inout vec4 worldPos) {
15: #if defined(USE_FOG)
16: FragDistance = length(worldPos.xyz - uCameraPos);
17: #endif
18:
19: gl_Position = uViewProjection * worldPos;
20: }
21:
22: void FLWFinalizeNormal(inout vec3 normal) {
23: // noop
24: }
25:
26:
27: mat4 rotate(vec3 axis, float angle) {
28: float s = sin(angle);
29: float c = cos(angle);
30: float oc = 1. - c;
31:
32: vec3 sa = axis * s;
33:
34: mat4 mr = mat4(1.);
35: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
36: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
37: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
38:
39: return mr;
40: }
41:
42: mat4 rotation(vec3 rot) {
43: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
44: }
45:
46: mat3 modelToNormal(mat4 mat) {
47: // Discard the edges. This won't be accurate for scaled or skewed matrices,
48: // but we don't have to work with those often.
49: mat3 m;
50: m[0] = mat[0].xyz;
51: m[1] = mat[1].xyz;
52: m[2] = mat[2].xyz;
53: return m;
54: }
55:
56: float diffuse(vec3 normal) {
57: vec3 n2 = normal * normal * vec3(.6, .25, .8);
58: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
59: }
60:
61:
62: struct Rotating {
63: vec2 light;
64: vec4 color;
65: vec3 pos;
66: float speed;
67: float offset;
68: vec3 axis;
69: };
70:
71:
72: struct Vertex {
73: vec3 pos;
74: vec3 normal;
75: vec2 texCoords;
76: };
77:
78: struct BlockFrag {
79: vec2 texCoords;
80: vec4 color;
81: float diffuse;
82: vec2 light;
83: };
84:
85: mat4 kineticRotation(float offset, float speed, vec3 axis) {
86: float degrees = offset + uTime * speed * 3./10.;
87: float angle = fract(degrees / 360.) * PI * 2.;
88:
89: return rotate(axis, angle);
90: }
91:
92: BlockFrag FLWMain(Vertex v, Rotating instance) {
93: mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis);
94:
95: vec4 worldPos = spin * vec4(v.pos - .5, 1.);
96: worldPos += vec4(instance.pos + .5, 0.);
97:
98: vec3 norm = modelToNormal(spin) * v.normal;
99:
100: FLWFinalizeWorldPos(worldPos);
101: FLWFinalizeNormal(norm);
102:
103: BlockFrag b;
104: b.diffuse = diffuse(norm);
105: b.texCoords = v.texCoords;
106: b.light = instance.light;
107:
108: #if defined(DEBUG_RAINBOW)
109: b.color = instance.color;
110: #elif defined(DEBUG_NORMAL)
111: b.color = vec4(norm, 1.);
112: #else
113: b.color = vec4(1.);
114: #endif
115:
116: return b;
117: }
118: attribute vec3 a_v_pos;
119: attribute vec3 a_v_normal;
120: attribute vec2 a_v_texCoords;
121:
122: attribute vec2 a_i_light;
123: attribute vec4 a_i_color;
124: attribute vec3 a_i_pos;
125: attribute float a_i_speed;
126: attribute float a_i_offset;
127: attribute vec3 a_i_axis;
128:
129:
130: varying vec2 v2f_texCoords;
131: varying vec4 v2f_color;
132: varying float v2f_diffuse;
133: varying vec2 v2f_light;
134:
135:
136: void main() {
137: Vertex v;
138: v.pos = a_v_pos;
139: v.normal = a_v_normal;
140: v.texCoords = a_v_texCoords;
141:
142:
143: Rotating i;
144: i.light = a_i_light;
145: i.color = a_i_color;
146: i.pos = a_i_pos;
147: i.speed = a_i_speed;
148: i.offset = a_i_offset;
149: i.axis = a_i_axis;
150:
151:
152: BlockFrag o = FLWMain(v, i);
153:
154: v2f_texCoords = o.texCoords;
155: v2f_color = o.color;
156: v2f_diffuse = o.diffuse;
157: v2f_light = o.light;
158:
159: }
[12:43:25] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:25] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: uniform sampler2D uBlockAtlas;
31: uniform sampler2D uLightMap;
32:
33: vec4 FLWBlockTexture(vec2 texCoords) {
34: return texture2D(uBlockAtlas, texCoords);
35: }
36:
37: void FLWFinalizeColor(vec4 color) {
38: #if defined(USE_FOG)
39: float a = color.a;
40: float fog = clamp(FLWFogFactor(), 0., 1.);
41:
42: color = mix(uFogColor, color, fog);
43: color.a = a;
44: #endif
45:
46: gl_FragColor = color;
47: }
48:
49: vec4 FLWLight(vec2 lightCoords) {
50: return texture2D(uLightMap, shiftLight(lightCoords));
51: }
52:
53:
54:
55: struct BlockFrag {
56: vec2 texCoords;
57: vec4 color;
58: float diffuse;
59: vec2 light;
60: };
61:
62: void FLWMain(BlockFrag r) {
63: vec4 tex = FLWBlockTexture(r.texCoords);
64:
65: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
66:
67: // flw_WorldPos = ;
68: // flw_Normal = ;
69: // flw_Albedo = tex.rgb;
70: // flw_Alpha = tex.a;
71: // flw_LightMap = r.light;
72: // flw_Tint = r.color;
73: FLWFinalizeColor(color);
74: }
75:
76: varying vec2 v2f_texCoords;
77: varying vec4 v2f_color;
78: varying float v2f_diffuse;
79: varying vec2 v2f_light;
80:
81:
82: //vec3 flw_WorldPos;
83: //vec3 flw_Normal;
84: //vec3 flw_Albedo;
85: //float flw_Alpha;
86: //vec2 flw_LightMap;
87: //vec4 flw_Tint;
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:43:25] [main/ERROR]: Shader compilation log for create:rotating.vert: No errors.
[12:43:25] [main/ERROR]: Source for shader 'create:rotating.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: mat4 rotate(vec3 axis, float angle) {
29: float s = sin(angle);
30: float c = cos(angle);
31: float oc = 1. - c;
32:
33: vec3 sa = axis * s;
34:
35: mat4 mr = mat4(1.);
36: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
37: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
38: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
39:
40: return mr;
41: }
42:
43: mat4 rotation(vec3 rot) {
44: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
45: }
46:
47: mat3 modelToNormal(mat4 mat) {
48: // Discard the edges. This won't be accurate for scaled or skewed matrices,
49: // but we don't have to work with those often.
50: mat3 m;
51: m[0] = mat[0].xyz;
52: m[1] = mat[1].xyz;
53: m[2] = mat[2].xyz;
54: return m;
55: }
56:
57: float diffuse(vec3 normal) {
58: vec3 n2 = normal * normal * vec3(.6, .25, .8);
59: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
60: }
61:
62:
63: struct Rotating {
64: vec2 light;
65: vec4 color;
66: vec3 pos;
67: float speed;
68: float offset;
69: vec3 axis;
70: };
71:
72:
73: struct Vertex {
74: vec3 pos;
75: vec3 normal;
76: vec2 texCoords;
77: };
78:
79: struct BlockFrag {
80: vec2 texCoords;
81: vec4 color;
82: float diffuse;
83: vec2 light;
84: };
85:
86: mat4 kineticRotation(float offset, float speed, vec3 axis) {
87: float degrees = offset + uTime * speed * 3./10.;
88: float angle = fract(degrees / 360.) * PI * 2.;
89:
90: return rotate(axis, angle);
91: }
92:
93: BlockFrag FLWMain(Vertex v, Rotating instance) {
94: mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis);
95:
96: vec4 worldPos = spin * vec4(v.pos - .5, 1.);
97: worldPos += vec4(instance.pos + .5, 0.);
98:
99: vec3 norm = modelToNormal(spin) * v.normal;
100:
101: FLWFinalizeWorldPos(worldPos);
102: FLWFinalizeNormal(norm);
103:
104: BlockFrag b;
105: b.diffuse = diffuse(norm);
106: b.texCoords = v.texCoords;
107: b.light = instance.light;
108:
109: #if defined(DEBUG_RAINBOW)
110: b.color = instance.color;
111: #elif defined(DEBUG_NORMAL)
112: b.color = vec4(norm, 1.);
113: #else
114: b.color = vec4(1.);
115: #endif
116:
117: return b;
118: }
119: attribute vec3 a_v_pos;
120: attribute vec3 a_v_normal;
121: attribute vec2 a_v_texCoords;
122:
123: attribute vec2 a_i_light;
124: attribute vec4 a_i_color;
125: attribute vec3 a_i_pos;
126: attribute float a_i_speed;
127: attribute float a_i_offset;
128: attribute vec3 a_i_axis;
129:
130:
131: varying vec2 v2f_texCoords;
132: varying vec4 v2f_color;
133: varying float v2f_diffuse;
134: varying vec2 v2f_light;
135:
136:
137: void main() {
138: Vertex v;
139: v.pos = a_v_pos;
140: v.normal = a_v_normal;
141: v.texCoords = a_v_texCoords;
142:
143:
144: Rotating i;
145: i.light = a_i_light;
146: i.color = a_i_color;
147: i.pos = a_i_pos;
148: i.speed = a_i_speed;
149: i.offset = a_i_offset;
150: i.axis = a_i_axis;
151:
152:
153: BlockFrag o = FLWMain(v, i);
154:
155: v2f_texCoords = o.texCoords;
156: v2f_color = o.color;
157: v2f_diffuse = o.diffuse;
158: v2f_light = o.light;
159:
160: }
[12:43:28] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:28] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: uniform sampler2D uBlockAtlas;
32: uniform sampler2D uLightMap;
33:
34: vec4 FLWBlockTexture(vec2 texCoords) {
35: return texture2D(uBlockAtlas, texCoords);
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return texture2D(uLightMap, shiftLight(lightCoords));
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:43:28] [main/ERROR]: Shader compilation log for create:rotating.vert: No errors.
[12:43:28] [main/ERROR]: Source for shader 'create:rotating.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: mat4 rotate(vec3 axis, float angle) {
29: float s = sin(angle);
30: float c = cos(angle);
31: float oc = 1. - c;
32:
33: vec3 sa = axis * s;
34:
35: mat4 mr = mat4(1.);
36: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
37: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
38: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
39:
40: return mr;
41: }
42:
43: mat4 rotation(vec3 rot) {
44: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
45: }
46:
47: mat3 modelToNormal(mat4 mat) {
48: // Discard the edges. This won't be accurate for scaled or skewed matrices,
49: // but we don't have to work with those often.
50: mat3 m;
51: m[0] = mat[0].xyz;
52: m[1] = mat[1].xyz;
53: m[2] = mat[2].xyz;
54: return m;
55: }
56:
57: float diffuse(vec3 normal) {
58: vec3 n2 = normal * normal * vec3(.6, .25, .8);
59: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
60: }
61:
62:
63: struct Rotating {
64: vec2 light;
65: vec4 color;
66: vec3 pos;
67: float speed;
68: float offset;
69: vec3 axis;
70: };
71:
72:
73: struct Vertex {
74: vec3 pos;
75: vec3 normal;
76: vec2 texCoords;
77: };
78:
79: struct BlockFrag {
80: vec2 texCoords;
81: vec4 color;
82: float diffuse;
83: vec2 light;
84: };
85:
86: mat4 kineticRotation(float offset, float speed, vec3 axis) {
87: float degrees = offset + uTime * speed * 3./10.;
88: float angle = fract(degrees / 360.) * PI * 2.;
89:
90: return rotate(axis, angle);
91: }
92:
93: BlockFrag FLWMain(Vertex v, Rotating instance) {
94: mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis);
95:
96: vec4 worldPos = spin * vec4(v.pos - .5, 1.);
97: worldPos += vec4(instance.pos + .5, 0.);
98:
99: vec3 norm = modelToNormal(spin) * v.normal;
100:
101: FLWFinalizeWorldPos(worldPos);
102: FLWFinalizeNormal(norm);
103:
104: BlockFrag b;
105: b.diffuse = diffuse(norm);
106: b.texCoords = v.texCoords;
107: b.light = instance.light;
108:
109: #if defined(DEBUG_RAINBOW)
110: b.color = instance.color;
111: #elif defined(DEBUG_NORMAL)
112: b.color = vec4(norm, 1.);
113: #else
114: b.color = vec4(1.);
115: #endif
116:
117: return b;
118: }
119: attribute vec3 a_v_pos;
120: attribute vec3 a_v_normal;
121: attribute vec2 a_v_texCoords;
122:
123: attribute vec2 a_i_light;
124: attribute vec4 a_i_color;
125: attribute vec3 a_i_pos;
126: attribute float a_i_speed;
127: attribute float a_i_offset;
128: attribute vec3 a_i_axis;
129:
130:
131: varying vec2 v2f_texCoords;
132: varying vec4 v2f_color;
133: varying float v2f_diffuse;
134: varying vec2 v2f_light;
135:
136:
137: void main() {
138: Vertex v;
139: v.pos = a_v_pos;
140: v.normal = a_v_normal;
141: v.texCoords = a_v_texCoords;
142:
143:
144: Rotating i;
145: i.light = a_i_light;
146: i.color = a_i_color;
147: i.pos = a_i_pos;
148: i.speed = a_i_speed;
149: i.offset = a_i_offset;
150: i.axis = a_i_axis;
151:
152:
153: BlockFrag o = FLWMain(v, i);
154:
155: v2f_texCoords = o.texCoords;
156: v2f_color = o.color;
157: v2f_diffuse = o.diffuse;
158: v2f_light = o.light;
159:
160: }
[12:43:31] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:31] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: uniform sampler2D uBlockAtlas;
32: uniform sampler2D uLightMap;
33:
34: vec4 FLWBlockTexture(vec2 texCoords) {
35: return texture2D(uBlockAtlas, texCoords);
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return texture2D(uLightMap, shiftLight(lightCoords));
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:43:31] [main/ERROR]: Shader compilation log for create:rotating.vert: No errors.
[12:43:31] [main/ERROR]: Source for shader 'create:rotating.vert':
1: #version 110
2:
3: #define PI 3.1415926538
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: mat4 rotate(vec3 axis, float angle) {
27: float s = sin(angle);
28: float c = cos(angle);
29: float oc = 1. - c;
30:
31: vec3 sa = axis * s;
32:
33: mat4 mr = mat4(1.);
34: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
35: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
36: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
37:
38: return mr;
39: }
40:
41: mat4 rotation(vec3 rot) {
42: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
43: }
44:
45: mat3 modelToNormal(mat4 mat) {
46: // Discard the edges. This won't be accurate for scaled or skewed matrices,
47: // but we don't have to work with those often.
48: mat3 m;
49: m[0] = mat[0].xyz;
50: m[1] = mat[1].xyz;
51: m[2] = mat[2].xyz;
52: return m;
53: }
54:
55: float diffuse(vec3 normal) {
56: vec3 n2 = normal * normal * vec3(.6, .25, .8);
57: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
58: }
59:
60:
61: struct Rotating {
62: vec2 light;
63: vec4 color;
64: vec3 pos;
65: float speed;
66: float offset;
67: vec3 axis;
68: };
69:
70:
71: struct Vertex {
72: vec3 pos;
73: vec3 normal;
74: vec2 texCoords;
75: };
76:
77: struct BlockFrag {
78: vec2 texCoords;
79: vec4 color;
80: float diffuse;
81: vec2 light;
82: };
83:
84: mat4 kineticRotation(float offset, float speed, vec3 axis) {
85: float degrees = offset + uTime * speed * 3./10.;
86: float angle = fract(degrees / 360.) * PI * 2.;
87:
88: return rotate(axis, angle);
89: }
90:
91: BlockFrag FLWMain(Vertex v, Rotating instance) {
92: mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis);
93:
94: vec4 worldPos = spin * vec4(v.pos - .5, 1.);
95: worldPos += vec4(instance.pos + .5, 0.);
96:
97: vec3 norm = modelToNormal(spin) * v.normal;
98:
99: FLWFinalizeWorldPos(worldPos);
100: FLWFinalizeNormal(norm);
101:
102: BlockFrag b;
103: b.diffuse = diffuse(norm);
104: b.texCoords = v.texCoords;
105: b.light = instance.light;
106:
107: #if defined(DEBUG_RAINBOW)
108: b.color = instance.color;
109: #elif defined(DEBUG_NORMAL)
110: b.color = vec4(norm, 1.);
111: #else
112: b.color = vec4(1.);
113: #endif
114:
115: return b;
116: }
117: attribute vec3 a_v_pos;
118: attribute vec3 a_v_normal;
119: attribute vec2 a_v_texCoords;
120:
121: attribute vec2 a_i_light;
122: attribute vec4 a_i_color;
123: attribute vec3 a_i_pos;
124: attribute float a_i_speed;
125: attribute float a_i_offset;
126: attribute vec3 a_i_axis;
127:
128:
129: varying vec2 v2f_texCoords;
130: varying vec4 v2f_color;
131: varying float v2f_diffuse;
132: varying vec2 v2f_light;
133:
134:
135: void main() {
136: Vertex v;
137: v.pos = a_v_pos;
138: v.normal = a_v_normal;
139: v.texCoords = a_v_texCoords;
140:
141:
142: Rotating i;
143: i.light = a_i_light;
144: i.color = a_i_color;
145: i.pos = a_i_pos;
146: i.speed = a_i_speed;
147: i.offset = a_i_offset;
148: i.axis = a_i_axis;
149:
150:
151: BlockFrag o = FLWMain(v, i);
152:
153: v2f_texCoords = o.texCoords;
154: v2f_color = o.color;
155: v2f_diffuse = o.diffuse;
156: v2f_light = o.light;
157:
158: }
[12:43:35] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:35] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
25: vec2 shiftLight(vec2 lm) {
26: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
27: }
28:
29: uniform sampler2D uBlockAtlas;
30: uniform sampler2D uLightMap;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: return texture2D(uBlockAtlas, texCoords);
34: }
35:
36: void FLWFinalizeColor(vec4 color) {
37: #if defined(USE_FOG)
38: float a = color.a;
39: float fog = clamp(FLWFogFactor(), 0., 1.);
40:
41: color = mix(uFogColor, color, fog);
42: color.a = a;
43: #endif
44:
45: gl_FragColor = color;
46: }
47:
48: vec4 FLWLight(vec2 lightCoords) {
49: return texture2D(uLightMap, shiftLight(lightCoords));
50: }
51:
52:
53:
54: struct BlockFrag {
55: vec2 texCoords;
56: vec4 color;
57: float diffuse;
58: vec2 light;
59: };
60:
61: void FLWMain(BlockFrag r) {
62: vec4 tex = FLWBlockTexture(r.texCoords);
63:
64: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
65:
66: // flw_WorldPos = ;
67: // flw_Normal = ;
68: // flw_Albedo = tex.rgb;
69: // flw_Alpha = tex.a;
70: // flw_LightMap = r.light;
71: // flw_Tint = r.color;
72: FLWFinalizeColor(color);
73: }
74:
75: varying vec2 v2f_texCoords;
76: varying vec4 v2f_color;
77: varying float v2f_diffuse;
78: varying vec2 v2f_light;
79:
80:
81: //vec3 flw_WorldPos;
82: //vec3 flw_Normal;
83: //vec3 flw_Albedo;
84: //float flw_Alpha;
85: //vec2 flw_LightMap;
86: //vec4 flw_Tint;
87:
88: void main() {
89: BlockFrag f;
90: f.texCoords = v2f_texCoords;
91: f.color = v2f_color;
92: f.diffuse = v2f_diffuse;
93: f.light = v2f_light;
94:
95:
96: FLWMain(f);
97: }
[12:43:35] [main/ERROR]: Shader compilation log for create:contraption_actor.vert: No errors.
[12:43:35] [main/ERROR]: Source for shader 'create:contraption_actor.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #define PI 3.1415926538
5:
6: uniform float uTime;
7: uniform mat4 uViewProjection;
8: uniform vec3 uCameraPos;
9:
10: #if defined(USE_FOG)
11: varying float FragDistance;
12: #endif
13:
14: void FLWFinalizeWorldPos(inout vec4 worldPos) {
15: #if defined(USE_FOG)
16: FragDistance = length(worldPos.xyz - uCameraPos);
17: #endif
18:
19: gl_Position = uViewProjection * worldPos;
20: }
21:
22: void FLWFinalizeNormal(inout vec3 normal) {
23: // noop
24: }
25:
26:
27: mat4 rotate(vec3 axis, float angle) {
28: float s = sin(angle);
29: float c = cos(angle);
30: float oc = 1. - c;
31:
32: vec3 sa = axis * s;
33:
34: mat4 mr = mat4(1.);
35: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
36: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
37: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
38:
39: return mr;
40: }
41:
42: mat4 rotation(vec3 rot) {
43: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
44: }
45:
46: mat3 modelToNormal(mat4 mat) {
47: // Discard the edges. This won't be accurate for scaled or skewed matrices,
48: // but we don't have to work with those often.
49: mat3 m;
50: m[0] = mat[0].xyz;
51: m[1] = mat[1].xyz;
52: m[2] = mat[2].xyz;
53: return m;
54: }
55:
56: #define PIOVER2 1.5707963268
57:
58: vec4 quat(vec3 axis, float angle) {
59: float halfAngle = angle * PIOVER2 / 180.0;
60: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
61: return vec4(axis.xyz * cs.y, cs.x);
62: }
63:
64: vec4 quatMult(vec4 q1, vec4 q2) {
65: // disgustingly vectorized quaternion multiplication
66: vec4 a = q1.w * q2.xyzw;
67: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
68: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
69: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
70:
71: return a + b + c + d;
72: }
73:
74: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
75: vec3 i = q.xyz;
76: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
77: }
78:
79: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
80: return rotateVertexByQuat(v, quat(axis, angle));
81: }
82:
83: float diffuse(vec3 normal) {
84: vec3 n2 = normal * normal * vec3(.6, .25, .8);
85: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
86: }
87:
88:
89: struct Actor {
90: vec3 pos;
91: vec2 light;
92: float offset;
93: vec3 axis;
94: vec4 rotation;
95: vec3 rotationCenter;
96: float speed;
97: };
98:
99:
100: struct Vertex {
101: vec3 pos;
102: vec3 normal;
103: vec2 texCoords;
104: };
105:
106: struct BlockFrag {
107: vec2 texCoords;
108: vec4 color;
109: float diffuse;
110: vec2 light;
111: };
112:
113: BlockFrag FLWMain(Vertex v, Actor instance) {
114: float degrees = instance.offset + uTime * instance.speed / 20.;
115: //float angle = fract(degrees / 360.) * PI * 2.;
116:
117: vec4 kineticRot = quat(instance.axis, degrees);
118: vec3 rotated = rotateVertexByQuat(v.pos - instance.rotationCenter, kineticRot) + instance.rotationCenter;
119:
120: vec4 worldPos = vec4(rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5, 1.);
121: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, kineticRot), instance.rotation);
122:
123: FLWFinalizeWorldPos(worldPos);
124: FLWFinalizeNormal(norm);
125:
126: BlockFrag b;
127: b.diffuse = diffuse(norm);
128: b.texCoords = v.texCoords;
129: b.light = instance.light;
130:
131: #if defined(DEBUG_NORMAL)
132: b.color = vec4(norm, 1.);
133: #else
134: b.color = vec4(1.);
135: #endif
136:
137: return b;
138: }
139: attribute vec3 a_v_pos;
140: attribute vec3 a_v_normal;
141: attribute vec2 a_v_texCoords;
142:
143: attribute vec3 a_i_pos;
144: attribute vec2 a_i_light;
145: attribute float a_i_offset;
146: attribute vec3 a_i_axis;
147: attribute vec4 a_i_rotation;
148: attribute vec3 a_i_rotationCenter;
149: attribute float a_i_speed;
150:
151:
152: varying vec2 v2f_texCoords;
153: varying vec4 v2f_color;
154: varying float v2f_diffuse;
155: varying vec2 v2f_light;
156:
157:
158: void main() {
159: Vertex v;
160: v.pos = a_v_pos;
161: v.normal = a_v_normal;
162: v.texCoords = a_v_texCoords;
163:
164:
165: Actor i;
166: i.pos = a_i_pos;
167: i.light = a_i_light;
168: i.offset = a_i_offset;
169: i.axis = a_i_axis;
170: i.rotation = a_i_rotation;
171: i.rotationCenter = a_i_rotationCenter;
172: i.speed = a_i_speed;
173:
174:
175: BlockFrag o = FLWMain(v, i);
176:
177: v2f_texCoords = o.texCoords;
178: v2f_color = o.color;
179: v2f_diffuse = o.diffuse;
180: v2f_light = o.light;
181:
182: }
[12:43:38] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:38] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: uniform sampler2D uBlockAtlas;
31: uniform sampler2D uLightMap;
32:
33: vec4 FLWBlockTexture(vec2 texCoords) {
34: return texture2D(uBlockAtlas, texCoords);
35: }
36:
37: void FLWFinalizeColor(vec4 color) {
38: #if defined(USE_FOG)
39: float a = color.a;
40: float fog = clamp(FLWFogFactor(), 0., 1.);
41:
42: color = mix(uFogColor, color, fog);
43: color.a = a;
44: #endif
45:
46: gl_FragColor = color;
47: }
48:
49: vec4 FLWLight(vec2 lightCoords) {
50: return texture2D(uLightMap, shiftLight(lightCoords));
51: }
52:
53:
54:
55: struct BlockFrag {
56: vec2 texCoords;
57: vec4 color;
58: float diffuse;
59: vec2 light;
60: };
61:
62: void FLWMain(BlockFrag r) {
63: vec4 tex = FLWBlockTexture(r.texCoords);
64:
65: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
66:
67: // flw_WorldPos = ;
68: // flw_Normal = ;
69: // flw_Albedo = tex.rgb;
70: // flw_Alpha = tex.a;
71: // flw_LightMap = r.light;
72: // flw_Tint = r.color;
73: FLWFinalizeColor(color);
74: }
75:
76: varying vec2 v2f_texCoords;
77: varying vec4 v2f_color;
78: varying float v2f_diffuse;
79: varying vec2 v2f_light;
80:
81:
82: //vec3 flw_WorldPos;
83: //vec3 flw_Normal;
84: //vec3 flw_Albedo;
85: //float flw_Alpha;
86: //vec2 flw_LightMap;
87: //vec4 flw_Tint;
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:43:39] [main/ERROR]: Shader compilation log for create:contraption_actor.vert: No errors.
[12:43:39] [main/ERROR]: Source for shader 'create:contraption_actor.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: mat4 rotate(vec3 axis, float angle) {
29: float s = sin(angle);
30: float c = cos(angle);
31: float oc = 1. - c;
32:
33: vec3 sa = axis * s;
34:
35: mat4 mr = mat4(1.);
36: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
37: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
38: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
39:
40: return mr;
41: }
42:
43: mat4 rotation(vec3 rot) {
44: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
45: }
46:
47: mat3 modelToNormal(mat4 mat) {
48: // Discard the edges. This won't be accurate for scaled or skewed matrices,
49: // but we don't have to work with those often.
50: mat3 m;
51: m[0] = mat[0].xyz;
52: m[1] = mat[1].xyz;
53: m[2] = mat[2].xyz;
54: return m;
55: }
56:
57: #define PIOVER2 1.5707963268
58:
59: vec4 quat(vec3 axis, float angle) {
60: float halfAngle = angle * PIOVER2 / 180.0;
61: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
62: return vec4(axis.xyz * cs.y, cs.x);
63: }
64:
65: vec4 quatMult(vec4 q1, vec4 q2) {
66: // disgustingly vectorized quaternion multiplication
67: vec4 a = q1.w * q2.xyzw;
68: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
69: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
70: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
71:
72: return a + b + c + d;
73: }
74:
75: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
76: vec3 i = q.xyz;
77: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
78: }
79:
80: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
81: return rotateVertexByQuat(v, quat(axis, angle));
82: }
83:
84: float diffuse(vec3 normal) {
85: vec3 n2 = normal * normal * vec3(.6, .25, .8);
86: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
87: }
88:
89:
90: struct Actor {
91: vec3 pos;
92: vec2 light;
93: float offset;
94: vec3 axis;
95: vec4 rotation;
96: vec3 rotationCenter;
97: float speed;
98: };
99:
100:
101: struct Vertex {
102: vec3 pos;
103: vec3 normal;
104: vec2 texCoords;
105: };
106:
107: struct BlockFrag {
108: vec2 texCoords;
109: vec4 color;
110: float diffuse;
111: vec2 light;
112: };
113:
114: BlockFrag FLWMain(Vertex v, Actor instance) {
115: float degrees = instance.offset + uTime * instance.speed / 20.;
116: //float angle = fract(degrees / 360.) * PI * 2.;
117:
118: vec4 kineticRot = quat(instance.axis, degrees);
119: vec3 rotated = rotateVertexByQuat(v.pos - instance.rotationCenter, kineticRot) + instance.rotationCenter;
120:
121: vec4 worldPos = vec4(rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5, 1.);
122: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, kineticRot), instance.rotation);
123:
124: FLWFinalizeWorldPos(worldPos);
125: FLWFinalizeNormal(norm);
126:
127: BlockFrag b;
128: b.diffuse = diffuse(norm);
129: b.texCoords = v.texCoords;
130: b.light = instance.light;
131:
132: #if defined(DEBUG_NORMAL)
133: b.color = vec4(norm, 1.);
134: #else
135: b.color = vec4(1.);
136: #endif
137:
138: return b;
139: }
140: attribute vec3 a_v_pos;
141: attribute vec3 a_v_normal;
142: attribute vec2 a_v_texCoords;
143:
144: attribute vec3 a_i_pos;
145: attribute vec2 a_i_light;
146: attribute float a_i_offset;
147: attribute vec3 a_i_axis;
148: attribute vec4 a_i_rotation;
149: attribute vec3 a_i_rotationCenter;
150: attribute float a_i_speed;
151:
152:
153: varying vec2 v2f_texCoords;
154: varying vec4 v2f_color;
155: varying float v2f_diffuse;
156: varying vec2 v2f_light;
157:
158:
159: void main() {
160: Vertex v;
161: v.pos = a_v_pos;
162: v.normal = a_v_normal;
163: v.texCoords = a_v_texCoords;
164:
165:
166: Actor i;
167: i.pos = a_i_pos;
168: i.light = a_i_light;
169: i.offset = a_i_offset;
170: i.axis = a_i_axis;
171: i.rotation = a_i_rotation;
172: i.rotationCenter = a_i_rotationCenter;
173: i.speed = a_i_speed;
174:
175:
176: BlockFrag o = FLWMain(v, i);
177:
178: v2f_texCoords = o.texCoords;
179: v2f_color = o.color;
180: v2f_diffuse = o.diffuse;
181: v2f_light = o.light;
182:
183: }
[12:43:40] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:40] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: uniform sampler2D uBlockAtlas;
32: uniform sampler2D uLightMap;
33:
34: vec4 FLWBlockTexture(vec2 texCoords) {
35: return texture2D(uBlockAtlas, texCoords);
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return texture2D(uLightMap, shiftLight(lightCoords));
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:43:40] [main/ERROR]: Shader compilation log for create:contraption_actor.vert: No errors.
[12:43:43] [main/ERROR]: Source for shader 'create:contraption_actor.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: mat4 rotate(vec3 axis, float angle) {
29: float s = sin(angle);
30: float c = cos(angle);
31: float oc = 1. - c;
32:
33: vec3 sa = axis * s;
34:
35: mat4 mr = mat4(1.);
36: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
37: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
38: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
39:
40: return mr;
41: }
42:
43: mat4 rotation(vec3 rot) {
44: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
45: }
46:
47: mat3 modelToNormal(mat4 mat) {
48: // Discard the edges. This won't be accurate for scaled or skewed matrices,
49: // but we don't have to work with those often.
50: mat3 m;
51: m[0] = mat[0].xyz;
52: m[1] = mat[1].xyz;
53: m[2] = mat[2].xyz;
54: return m;
55: }
56:
57: #define PIOVER2 1.5707963268
58:
59: vec4 quat(vec3 axis, float angle) {
60: float halfAngle = angle * PIOVER2 / 180.0;
61: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
62: return vec4(axis.xyz * cs.y, cs.x);
63: }
64:
65: vec4 quatMult(vec4 q1, vec4 q2) {
66: // disgustingly vectorized quaternion multiplication
67: vec4 a = q1.w * q2.xyzw;
68: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
69: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
70: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
71:
72: return a + b + c + d;
73: }
74:
75: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
76: vec3 i = q.xyz;
77: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
78: }
79:
80: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
81: return rotateVertexByQuat(v, quat(axis, angle));
82: }
83:
84: float diffuse(vec3 normal) {
85: vec3 n2 = normal * normal * vec3(.6, .25, .8);
86: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
87: }
88:
89:
90: struct Actor {
91: vec3 pos;
92: vec2 light;
93: float offset;
94: vec3 axis;
95: vec4 rotation;
96: vec3 rotationCenter;
97: float speed;
98: };
99:
100:
101: struct Vertex {
102: vec3 pos;
103: vec3 normal;
104: vec2 texCoords;
105: };
106:
107: struct BlockFrag {
108: vec2 texCoords;
109: vec4 color;
110: float diffuse;
111: vec2 light;
112: };
113:
114: BlockFrag FLWMain(Vertex v, Actor instance) {
115: float degrees = instance.offset + uTime * instance.speed / 20.;
116: //float angle = fract(degrees / 360.) * PI * 2.;
117:
118: vec4 kineticRot = quat(instance.axis, degrees);
119: vec3 rotated = rotateVertexByQuat(v.pos - instance.rotationCenter, kineticRot) + instance.rotationCenter;
120:
121: vec4 worldPos = vec4(rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5, 1.);
122: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, kineticRot), instance.rotation);
123:
124: FLWFinalizeWorldPos(worldPos);
125: FLWFinalizeNormal(norm);
126:
127: BlockFrag b;
128: b.diffuse = diffuse(norm);
129: b.texCoords = v.texCoords;
130: b.light = instance.light;
131:
132: #if defined(DEBUG_NORMAL)
133: b.color = vec4(norm, 1.);
134: #else
135: b.color = vec4(1.);
136: #endif
137:
138: return b;
139: }
140: attribute vec3 a_v_pos;
141: attribute vec3 a_v_normal;
142: attribute vec2 a_v_texCoords;
143:
144: attribute vec3 a_i_pos;
145: attribute vec2 a_i_light;
146: attribute float a_i_offset;
147: attribute vec3 a_i_axis;
148: attribute vec4 a_i_rotation;
149: attribute vec3 a_i_rotationCenter;
150: attribute float a_i_speed;
151:
152:
153: varying vec2 v2f_texCoords;
154: varying vec4 v2f_color;
155: varying float v2f_diffuse;
156: varying vec2 v2f_light;
157:
158:
159: void main() {
160: Vertex v;
161: v.pos = a_v_pos;
162: v.normal = a_v_normal;
163: v.texCoords = a_v_texCoords;
164:
165:
166: Actor i;
167: i.pos = a_i_pos;
168: i.light = a_i_light;
169: i.offset = a_i_offset;
170: i.axis = a_i_axis;
171: i.rotation = a_i_rotation;
172: i.rotationCenter = a_i_rotationCenter;
173: i.speed = a_i_speed;
174:
175:
176: BlockFrag o = FLWMain(v, i);
177:
178: v2f_texCoords = o.texCoords;
179: v2f_color = o.color;
180: v2f_diffuse = o.diffuse;
181: v2f_light = o.light;
182:
183: }
[12:43:46] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:46] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: uniform sampler2D uBlockAtlas;
32: uniform sampler2D uLightMap;
33:
34: vec4 FLWBlockTexture(vec2 texCoords) {
35: return texture2D(uBlockAtlas, texCoords);
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return texture2D(uLightMap, shiftLight(lightCoords));
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:43:46] [main/ERROR]: Shader compilation log for create:contraption_actor.vert: No errors.
[12:43:46] [main/ERROR]: Source for shader 'create:contraption_actor.vert':
1: #version 110
2:
3: #define PI 3.1415926538
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: mat4 rotate(vec3 axis, float angle) {
27: float s = sin(angle);
28: float c = cos(angle);
29: float oc = 1. - c;
30:
31: vec3 sa = axis * s;
32:
33: mat4 mr = mat4(1.);
34: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
35: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
36: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
37:
38: return mr;
39: }
40:
41: mat4 rotation(vec3 rot) {
42: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
43: }
44:
45: mat3 modelToNormal(mat4 mat) {
46: // Discard the edges. This won't be accurate for scaled or skewed matrices,
47: // but we don't have to work with those often.
48: mat3 m;
49: m[0] = mat[0].xyz;
50: m[1] = mat[1].xyz;
51: m[2] = mat[2].xyz;
52: return m;
53: }
54:
55: #define PIOVER2 1.5707963268
56:
57: vec4 quat(vec3 axis, float angle) {
58: float halfAngle = angle * PIOVER2 / 180.0;
59: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
60: return vec4(axis.xyz * cs.y, cs.x);
61: }
62:
63: vec4 quatMult(vec4 q1, vec4 q2) {
64: // disgustingly vectorized quaternion multiplication
65: vec4 a = q1.w * q2.xyzw;
66: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
67: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
68: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
69:
70: return a + b + c + d;
71: }
72:
73: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
74: vec3 i = q.xyz;
75: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
76: }
77:
78: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
79: return rotateVertexByQuat(v, quat(axis, angle));
80: }
81:
82: float diffuse(vec3 normal) {
83: vec3 n2 = normal * normal * vec3(.6, .25, .8);
84: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
85: }
86:
87:
88: struct Actor {
89: vec3 pos;
90: vec2 light;
91: float offset;
92: vec3 axis;
93: vec4 rotation;
94: vec3 rotationCenter;
95: float speed;
96: };
97:
98:
99: struct Vertex {
100: vec3 pos;
101: vec3 normal;
102: vec2 texCoords;
103: };
104:
105: struct BlockFrag {
106: vec2 texCoords;
107: vec4 color;
108: float diffuse;
109: vec2 light;
110: };
111:
112: BlockFrag FLWMain(Vertex v, Actor instance) {
113: float degrees = instance.offset + uTime * instance.speed / 20.;
114: //float angle = fract(degrees / 360.) * PI * 2.;
115:
116: vec4 kineticRot = quat(instance.axis, degrees);
117: vec3 rotated = rotateVertexByQuat(v.pos - instance.rotationCenter, kineticRot) + instance.rotationCenter;
118:
119: vec4 worldPos = vec4(rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5, 1.);
120: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, kineticRot), instance.rotation);
121:
122: FLWFinalizeWorldPos(worldPos);
123: FLWFinalizeNormal(norm);
124:
125: BlockFrag b;
126: b.diffuse = diffuse(norm);
127: b.texCoords = v.texCoords;
128: b.light = instance.light;
129:
130: #if defined(DEBUG_NORMAL)
131: b.color = vec4(norm, 1.);
132: #else
133: b.color = vec4(1.);
134: #endif
135:
136: return b;
137: }
138: attribute vec3 a_v_pos;
139: attribute vec3 a_v_normal;
140: attribute vec2 a_v_texCoords;
141:
142: attribute vec3 a_i_pos;
143: attribute vec2 a_i_light;
144: attribute float a_i_offset;
145: attribute vec3 a_i_axis;
146: attribute vec4 a_i_rotation;
147: attribute vec3 a_i_rotationCenter;
148: attribute float a_i_speed;
149:
150:
151: varying vec2 v2f_texCoords;
152: varying vec4 v2f_color;
153: varying float v2f_diffuse;
154: varying vec2 v2f_light;
155:
156:
157: void main() {
158: Vertex v;
159: v.pos = a_v_pos;
160: v.normal = a_v_normal;
161: v.texCoords = a_v_texCoords;
162:
163:
164: Actor i;
165: i.pos = a_i_pos;
166: i.light = a_i_light;
167: i.offset = a_i_offset;
168: i.axis = a_i_axis;
169: i.rotation = a_i_rotation;
170: i.rotationCenter = a_i_rotationCenter;
171: i.speed = a_i_speed;
172:
173:
174: BlockFrag o = FLWMain(v, i);
175:
176: v2f_texCoords = o.texCoords;
177: v2f_color = o.color;
178: v2f_diffuse = o.diffuse;
179: v2f_light = o.light;
180:
181: }
[12:43:48] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:48] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
25: vec2 shiftLight(vec2 lm) {
26: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
27: }
28:
29: uniform sampler2D uBlockAtlas;
30: uniform sampler2D uLightMap;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: return texture2D(uBlockAtlas, texCoords);
34: }
35:
36: void FLWFinalizeColor(vec4 color) {
37: #if defined(USE_FOG)
38: float a = color.a;
39: float fog = clamp(FLWFogFactor(), 0., 1.);
40:
41: color = mix(uFogColor, color, fog);
42: color.a = a;
43: #endif
44:
45: gl_FragColor = color;
46: }
47:
48: vec4 FLWLight(vec2 lightCoords) {
49: return texture2D(uLightMap, shiftLight(lightCoords));
50: }
51:
52:
53:
54: struct BlockFrag {
55: vec2 texCoords;
56: vec4 color;
57: float diffuse;
58: vec2 light;
59: };
60:
61: void FLWMain(BlockFrag r) {
62: vec4 tex = FLWBlockTexture(r.texCoords);
63:
64: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
65:
66: // flw_WorldPos = ;
67: // flw_Normal = ;
68: // flw_Albedo = tex.rgb;
69: // flw_Alpha = tex.a;
70: // flw_LightMap = r.light;
71: // flw_Tint = r.color;
72: FLWFinalizeColor(color);
73: }
74:
75: varying vec2 v2f_texCoords;
76: varying vec4 v2f_color;
77: varying float v2f_diffuse;
78: varying vec2 v2f_light;
79:
80:
81: //vec3 flw_WorldPos;
82: //vec3 flw_Normal;
83: //vec3 flw_Albedo;
84: //float flw_Alpha;
85: //vec2 flw_LightMap;
86: //vec4 flw_Tint;
87:
88: void main() {
89: BlockFrag f;
90: f.texCoords = v2f_texCoords;
91: f.color = v2f_color;
92: f.diffuse = v2f_diffuse;
93: f.light = v2f_light;
94:
95:
96: FLWMain(f);
97: }
[12:43:48] [main/ERROR]: Shader compilation log for create:flap.vert: No errors.
[12:43:48] [main/ERROR]: Source for shader 'create:flap.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #define PI 3.1415926538
5:
6: uniform float uTime;
7: uniform mat4 uViewProjection;
8: uniform vec3 uCameraPos;
9:
10: #if defined(USE_FOG)
11: varying float FragDistance;
12: #endif
13:
14: void FLWFinalizeWorldPos(inout vec4 worldPos) {
15: #if defined(USE_FOG)
16: FragDistance = length(worldPos.xyz - uCameraPos);
17: #endif
18:
19: gl_Position = uViewProjection * worldPos;
20: }
21:
22: void FLWFinalizeNormal(inout vec3 normal) {
23: // noop
24: }
25:
26:
27: mat4 rotate(vec3 axis, float angle) {
28: float s = sin(angle);
29: float c = cos(angle);
30: float oc = 1. - c;
31:
32: vec3 sa = axis * s;
33:
34: mat4 mr = mat4(1.);
35: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
36: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
37: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
38:
39: return mr;
40: }
41:
42: mat4 rotation(vec3 rot) {
43: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
44: }
45:
46: mat3 modelToNormal(mat4 mat) {
47: // Discard the edges. This won't be accurate for scaled or skewed matrices,
48: // but we don't have to work with those often.
49: mat3 m;
50: m[0] = mat[0].xyz;
51: m[1] = mat[1].xyz;
52: m[2] = mat[2].xyz;
53: return m;
54: }
55:
56: #define PIOVER2 1.5707963268
57:
58: vec4 quat(vec3 axis, float angle) {
59: float halfAngle = angle * PIOVER2 / 180.0;
60: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
61: return vec4(axis.xyz * cs.y, cs.x);
62: }
63:
64: vec4 quatMult(vec4 q1, vec4 q2) {
65: // disgustingly vectorized quaternion multiplication
66: vec4 a = q1.w * q2.xyzw;
67: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
68: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
69: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
70:
71: return a + b + c + d;
72: }
73:
74: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
75: vec3 i = q.xyz;
76: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
77: }
78:
79: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
80: return rotateVertexByQuat(v, quat(axis, angle));
81: }
82:
83: float diffuse(vec3 normal) {
84: vec3 n2 = normal * normal * vec3(.6, .25, .8);
85: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
86: }
87:
88:
89: struct Flap {
90: vec3 instancePos;
91: vec2 light;
92: vec3 segmentOffset;
93: vec3 pivot;
94: float horizontalAngle;
95: float intensity;
96: float flapScale;
97: float flapness;
98: };
99:
100:
101: struct Vertex {
102: vec3 pos;
103: vec3 normal;
104: vec2 texCoords;
105: };
106:
107: struct BlockFrag {
108: vec2 texCoords;
109: vec4 color;
110: float diffuse;
111: vec2 light;
112: };
113:
114:
115: float toRad(float degrees) {
116: return fract(degrees / 360.) * PI * 2.;
117: }
118:
119: float getFlapAngle(float flapness, float intensity, float scale) {
120: float absFlap = abs(flapness);
121:
122: float angle = sin((1. - absFlap) * PI * intensity) * 30. * flapness * scale;
123:
124: float halfAngle = angle * 0.5;
125:
126: float which = step(0., flapness);// 0 if negative, 1 if positive
127: float degrees = which * halfAngle + (1. - which) * angle;// branchless conditional multiply
128:
129: return degrees;
130: }
131:
132: BlockFrag FLWMain(Vertex v, Flap flap) {
133: float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale);
134:
135: vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle);
136: vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle);
137:
138: vec3 rotated = rotateVertexByQuat(v.pos - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset;
139: rotated = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5;
140:
141: vec4 worldPos = vec4(rotated, 1.);
142: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, flapRotation), orientation);
143:
144: FLWFinalizeWorldPos(worldPos);
145: FLWFinalizeNormal(norm);
146:
147: BlockFrag b;
148: b.diffuse = diffuse(norm);
149: b.texCoords = v.texCoords;
150: b.light = flap.light;
151: #if defined(DEBUG_NORMAL)
152: b.color = vec4(norm, 1.);
153: #else
154: b.color = vec4(1.);
155: #endif
156: return b;
157: }
158: attribute vec3 a_v_pos;
159: attribute vec3 a_v_normal;
160: attribute vec2 a_v_texCoords;
161:
162: attribute vec3 a_i_instancePos;
163: attribute vec2 a_i_light;
164: attribute vec3 a_i_segmentOffset;
165: attribute vec3 a_i_pivot;
166: attribute float a_i_horizontalAngle;
167: attribute float a_i_intensity;
168: attribute float a_i_flapScale;
169: attribute float a_i_flapness;
170:
171:
172: varying vec2 v2f_texCoords;
173: varying vec4 v2f_color;
174: varying float v2f_diffuse;
175: varying vec2 v2f_light;
176:
177:
178: void main() {
179: Vertex v;
180: v.pos = a_v_pos;
181: v.normal = a_v_normal;
182: v.texCoords = a_v_texCoords;
183:
184:
185: Flap i;
186: i.instancePos = a_i_instancePos;
187: i.light = a_i_light;
188: i.segmentOffset = a_i_segmentOffset;
189: i.pivot = a_i_pivot;
190: i.horizontalAngle = a_i_horizontalAngle;
191: i.intensity = a_i_intensity;
192: i.flapScale = a_i_flapScale;
193: i.flapness = a_i_flapness;
194:
195:
196: BlockFrag o = FLWMain(v, i);
197:
198: v2f_texCoords = o.texCoords;
199: v2f_color = o.color;
200: v2f_diffuse = o.diffuse;
201: v2f_light = o.light;
202:
203: }
[12:43:49] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:49] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: uniform sampler2D uBlockAtlas;
31: uniform sampler2D uLightMap;
32:
33: vec4 FLWBlockTexture(vec2 texCoords) {
34: return texture2D(uBlockAtlas, texCoords);
35: }
36:
37: void FLWFinalizeColor(vec4 color) {
38: #if defined(USE_FOG)
39: float a = color.a;
40: float fog = clamp(FLWFogFactor(), 0., 1.);
41:
42: color = mix(uFogColor, color, fog);
43: color.a = a;
44: #endif
45:
46: gl_FragColor = color;
47: }
48:
49: vec4 FLWLight(vec2 lightCoords) {
50: return texture2D(uLightMap, shiftLight(lightCoords));
51: }
52:
53:
54:
55: struct BlockFrag {
56: vec2 texCoords;
57: vec4 color;
58: float diffuse;
59: vec2 light;
60: };
61:
62: void FLWMain(BlockFrag r) {
63: vec4 tex = FLWBlockTexture(r.texCoords);
64:
65: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
66:
67: // flw_WorldPos = ;
68: // flw_Normal = ;
69: // flw_Albedo = tex.rgb;
70: // flw_Alpha = tex.a;
71: // flw_LightMap = r.light;
72: // flw_Tint = r.color;
73: FLWFinalizeColor(color);
74: }
75:
76: varying vec2 v2f_texCoords;
77: varying vec4 v2f_color;
78: varying float v2f_diffuse;
79: varying vec2 v2f_light;
80:
81:
82: //vec3 flw_WorldPos;
83: //vec3 flw_Normal;
84: //vec3 flw_Albedo;
85: //float flw_Alpha;
86: //vec2 flw_LightMap;
87: //vec4 flw_Tint;
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:43:52] [main/ERROR]: Shader compilation log for create:flap.vert: No errors.
[12:43:52] [main/ERROR]: Source for shader 'create:flap.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: mat4 rotate(vec3 axis, float angle) {
29: float s = sin(angle);
30: float c = cos(angle);
31: float oc = 1. - c;
32:
33: vec3 sa = axis * s;
34:
35: mat4 mr = mat4(1.);
36: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
37: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
38: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
39:
40: return mr;
41: }
42:
43: mat4 rotation(vec3 rot) {
44: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
45: }
46:
47: mat3 modelToNormal(mat4 mat) {
48: // Discard the edges. This won't be accurate for scaled or skewed matrices,
49: // but we don't have to work with those often.
50: mat3 m;
51: m[0] = mat[0].xyz;
52: m[1] = mat[1].xyz;
53: m[2] = mat[2].xyz;
54: return m;
55: }
56:
57: #define PIOVER2 1.5707963268
58:
59: vec4 quat(vec3 axis, float angle) {
60: float halfAngle = angle * PIOVER2 / 180.0;
61: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
62: return vec4(axis.xyz * cs.y, cs.x);
63: }
64:
65: vec4 quatMult(vec4 q1, vec4 q2) {
66: // disgustingly vectorized quaternion multiplication
67: vec4 a = q1.w * q2.xyzw;
68: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
69: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
70: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
71:
72: return a + b + c + d;
73: }
74:
75: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
76: vec3 i = q.xyz;
77: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
78: }
79:
80: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
81: return rotateVertexByQuat(v, quat(axis, angle));
82: }
83:
84: float diffuse(vec3 normal) {
85: vec3 n2 = normal * normal * vec3(.6, .25, .8);
86: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
87: }
88:
89:
90: struct Flap {
91: vec3 instancePos;
92: vec2 light;
93: vec3 segmentOffset;
94: vec3 pivot;
95: float horizontalAngle;
96: float intensity;
97: float flapScale;
98: float flapness;
99: };
100:
101:
102: struct Vertex {
103: vec3 pos;
104: vec3 normal;
105: vec2 texCoords;
106: };
107:
108: struct BlockFrag {
109: vec2 texCoords;
110: vec4 color;
111: float diffuse;
112: vec2 light;
113: };
114:
115:
116: float toRad(float degrees) {
117: return fract(degrees / 360.) * PI * 2.;
118: }
119:
120: float getFlapAngle(float flapness, float intensity, float scale) {
121: float absFlap = abs(flapness);
122:
123: float angle = sin((1. - absFlap) * PI * intensity) * 30. * flapness * scale;
124:
125: float halfAngle = angle * 0.5;
126:
127: float which = step(0., flapness);// 0 if negative, 1 if positive
128: float degrees = which * halfAngle + (1. - which) * angle;// branchless conditional multiply
129:
130: return degrees;
131: }
132:
133: BlockFrag FLWMain(Vertex v, Flap flap) {
134: float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale);
135:
136: vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle);
137: vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle);
138:
139: vec3 rotated = rotateVertexByQuat(v.pos - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset;
140: rotated = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5;
141:
142: vec4 worldPos = vec4(rotated, 1.);
143: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, flapRotation), orientation);
144:
145: FLWFinalizeWorldPos(worldPos);
146: FLWFinalizeNormal(norm);
147:
148: BlockFrag b;
149: b.diffuse = diffuse(norm);
150: b.texCoords = v.texCoords;
151: b.light = flap.light;
152: #if defined(DEBUG_NORMAL)
153: b.color = vec4(norm, 1.);
154: #else
155: b.color = vec4(1.);
156: #endif
157: return b;
158: }
159: attribute vec3 a_v_pos;
160: attribute vec3 a_v_normal;
161: attribute vec2 a_v_texCoords;
162:
163: attribute vec3 a_i_instancePos;
164: attribute vec2 a_i_light;
165: attribute vec3 a_i_segmentOffset;
166: attribute vec3 a_i_pivot;
167: attribute float a_i_horizontalAngle;
168: attribute float a_i_intensity;
169: attribute float a_i_flapScale;
170: attribute float a_i_flapness;
171:
172:
173: varying vec2 v2f_texCoords;
174: varying vec4 v2f_color;
175: varying float v2f_diffuse;
176: varying vec2 v2f_light;
177:
178:
179: void main() {
180: Vertex v;
181: v.pos = a_v_pos;
182: v.normal = a_v_normal;
183: v.texCoords = a_v_texCoords;
184:
185:
186: Flap i;
187: i.instancePos = a_i_instancePos;
188: i.light = a_i_light;
189: i.segmentOffset = a_i_segmentOffset;
190: i.pivot = a_i_pivot;
191: i.horizontalAngle = a_i_horizontalAngle;
192: i.intensity = a_i_intensity;
193: i.flapScale = a_i_flapScale;
194: i.flapness = a_i_flapness;
195:
196:
197: BlockFrag o = FLWMain(v, i);
198:
199: v2f_texCoords = o.texCoords;
200: v2f_color = o.color;
201: v2f_diffuse = o.diffuse;
202: v2f_light = o.light;
203:
204: }
[12:43:57] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:43:57] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: uniform sampler2D uBlockAtlas;
32: uniform sampler2D uLightMap;
33:
34: vec4 FLWBlockTexture(vec2 texCoords) {
35: return texture2D(uBlockAtlas, texCoords);
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return texture2D(uLightMap, shiftLight(lightCoords));
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:43:57] [main/ERROR]: Shader compilation log for create:flap.vert: No errors.
[12:43:57] [main/ERROR]: Source for shader 'create:flap.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: mat4 rotate(vec3 axis, float angle) {
29: float s = sin(angle);
30: float c = cos(angle);
31: float oc = 1. - c;
32:
33: vec3 sa = axis * s;
34:
35: mat4 mr = mat4(1.);
36: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
37: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
38: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
39:
40: return mr;
41: }
42:
43: mat4 rotation(vec3 rot) {
44: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
45: }
46:
47: mat3 modelToNormal(mat4 mat) {
48: // Discard the edges. This won't be accurate for scaled or skewed matrices,
49: // but we don't have to work with those often.
50: mat3 m;
51: m[0] = mat[0].xyz;
52: m[1] = mat[1].xyz;
53: m[2] = mat[2].xyz;
54: return m;
55: }
56:
57: #define PIOVER2 1.5707963268
58:
59: vec4 quat(vec3 axis, float angle) {
60: float halfAngle = angle * PIOVER2 / 180.0;
61: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
62: return vec4(axis.xyz * cs.y, cs.x);
63: }
64:
65: vec4 quatMult(vec4 q1, vec4 q2) {
66: // disgustingly vectorized quaternion multiplication
67: vec4 a = q1.w * q2.xyzw;
68: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
69: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
70: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
71:
72: return a + b + c + d;
73: }
74:
75: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
76: vec3 i = q.xyz;
77: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
78: }
79:
80: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
81: return rotateVertexByQuat(v, quat(axis, angle));
82: }
83:
84: float diffuse(vec3 normal) {
85: vec3 n2 = normal * normal * vec3(.6, .25, .8);
86: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
87: }
88:
89:
90: struct Flap {
91: vec3 instancePos;
92: vec2 light;
93: vec3 segmentOffset;
94: vec3 pivot;
95: float horizontalAngle;
96: float intensity;
97: float flapScale;
98: float flapness;
99: };
100:
101:
102: struct Vertex {
103: vec3 pos;
104: vec3 normal;
105: vec2 texCoords;
106: };
107:
108: struct BlockFrag {
109: vec2 texCoords;
110: vec4 color;
111: float diffuse;
112: vec2 light;
113: };
114:
115:
116: float toRad(float degrees) {
117: return fract(degrees / 360.) * PI * 2.;
118: }
119:
120: float getFlapAngle(float flapness, float intensity, float scale) {
121: float absFlap = abs(flapness);
122:
123: float angle = sin((1. - absFlap) * PI * intensity) * 30. * flapness * scale;
124:
125: float halfAngle = angle * 0.5;
126:
127: float which = step(0., flapness);// 0 if negative, 1 if positive
128: float degrees = which * halfAngle + (1. - which) * angle;// branchless conditional multiply
129:
130: return degrees;
131: }
132:
133: BlockFrag FLWMain(Vertex v, Flap flap) {
134: float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale);
135:
136: vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle);
137: vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle);
138:
139: vec3 rotated = rotateVertexByQuat(v.pos - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset;
140: rotated = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5;
141:
142: vec4 worldPos = vec4(rotated, 1.);
143: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, flapRotation), orientation);
144:
145: FLWFinalizeWorldPos(worldPos);
146: FLWFinalizeNormal(norm);
147:
148: BlockFrag b;
149: b.diffuse = diffuse(norm);
150: b.texCoords = v.texCoords;
151: b.light = flap.light;
152: #if defined(DEBUG_NORMAL)
153: b.color = vec4(norm, 1.);
154: #else
155: b.color = vec4(1.);
156: #endif
157: return b;
158: }
159: attribute vec3 a_v_pos;
160: attribute vec3 a_v_normal;
161: attribute vec2 a_v_texCoords;
162:
163: attribute vec3 a_i_instancePos;
164: attribute vec2 a_i_light;
165: attribute vec3 a_i_segmentOffset;
166: attribute vec3 a_i_pivot;
167: attribute float a_i_horizontalAngle;
168: attribute float a_i_intensity;
169: attribute float a_i_flapScale;
170: attribute float a_i_flapness;
171:
172:
173: varying vec2 v2f_texCoords;
174: varying vec4 v2f_color;
175: varying float v2f_diffuse;
176: varying vec2 v2f_light;
177:
178:
179: void main() {
180: Vertex v;
181: v.pos = a_v_pos;
182: v.normal = a_v_normal;
183: v.texCoords = a_v_texCoords;
184:
185:
186: Flap i;
187: i.instancePos = a_i_instancePos;
188: i.light = a_i_light;
189: i.segmentOffset = a_i_segmentOffset;
190: i.pivot = a_i_pivot;
191: i.horizontalAngle = a_i_horizontalAngle;
192: i.intensity = a_i_intensity;
193: i.flapScale = a_i_flapScale;
194: i.flapness = a_i_flapness;
195:
196:
197: BlockFrag o = FLWMain(v, i);
198:
199: v2f_texCoords = o.texCoords;
200: v2f_color = o.color;
201: v2f_diffuse = o.diffuse;
202: v2f_light = o.light;
203:
204: }
[12:44:00] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:00] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: uniform sampler2D uBlockAtlas;
32: uniform sampler2D uLightMap;
33:
34: vec4 FLWBlockTexture(vec2 texCoords) {
35: return texture2D(uBlockAtlas, texCoords);
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return texture2D(uLightMap, shiftLight(lightCoords));
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:44:02] [main/ERROR]: Shader compilation log for create:flap.vert: No errors.
[12:44:02] [main/ERROR]: Source for shader 'create:flap.vert':
1: #version 110
2:
3: #define PI 3.1415926538
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: mat4 rotate(vec3 axis, float angle) {
27: float s = sin(angle);
28: float c = cos(angle);
29: float oc = 1. - c;
30:
31: vec3 sa = axis * s;
32:
33: mat4 mr = mat4(1.);
34: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
35: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
36: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
37:
38: return mr;
39: }
40:
41: mat4 rotation(vec3 rot) {
42: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
43: }
44:
45: mat3 modelToNormal(mat4 mat) {
46: // Discard the edges. This won't be accurate for scaled or skewed matrices,
47: // but we don't have to work with those often.
48: mat3 m;
49: m[0] = mat[0].xyz;
50: m[1] = mat[1].xyz;
51: m[2] = mat[2].xyz;
52: return m;
53: }
54:
55: #define PIOVER2 1.5707963268
56:
57: vec4 quat(vec3 axis, float angle) {
58: float halfAngle = angle * PIOVER2 / 180.0;
59: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
60: return vec4(axis.xyz * cs.y, cs.x);
61: }
62:
63: vec4 quatMult(vec4 q1, vec4 q2) {
64: // disgustingly vectorized quaternion multiplication
65: vec4 a = q1.w * q2.xyzw;
66: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
67: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
68: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
69:
70: return a + b + c + d;
71: }
72:
73: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
74: vec3 i = q.xyz;
75: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
76: }
77:
78: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
79: return rotateVertexByQuat(v, quat(axis, angle));
80: }
81:
82: float diffuse(vec3 normal) {
83: vec3 n2 = normal * normal * vec3(.6, .25, .8);
84: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
85: }
86:
87:
88: struct Flap {
89: vec3 instancePos;
90: vec2 light;
91: vec3 segmentOffset;
92: vec3 pivot;
93: float horizontalAngle;
94: float intensity;
95: float flapScale;
96: float flapness;
97: };
98:
99:
100: struct Vertex {
101: vec3 pos;
102: vec3 normal;
103: vec2 texCoords;
104: };
105:
106: struct BlockFrag {
107: vec2 texCoords;
108: vec4 color;
109: float diffuse;
110: vec2 light;
111: };
112:
113:
114: float toRad(float degrees) {
115: return fract(degrees / 360.) * PI * 2.;
116: }
117:
118: float getFlapAngle(float flapness, float intensity, float scale) {
119: float absFlap = abs(flapness);
120:
121: float angle = sin((1. - absFlap) * PI * intensity) * 30. * flapness * scale;
122:
123: float halfAngle = angle * 0.5;
124:
125: float which = step(0., flapness);// 0 if negative, 1 if positive
126: float degrees = which * halfAngle + (1. - which) * angle;// branchless conditional multiply
127:
128: return degrees;
129: }
130:
131: BlockFrag FLWMain(Vertex v, Flap flap) {
132: float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale);
133:
134: vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle);
135: vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle);
136:
137: vec3 rotated = rotateVertexByQuat(v.pos - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset;
138: rotated = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5;
139:
140: vec4 worldPos = vec4(rotated, 1.);
141: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, flapRotation), orientation);
142:
143: FLWFinalizeWorldPos(worldPos);
144: FLWFinalizeNormal(norm);
145:
146: BlockFrag b;
147: b.diffuse = diffuse(norm);
148: b.texCoords = v.texCoords;
149: b.light = flap.light;
150: #if defined(DEBUG_NORMAL)
151: b.color = vec4(norm, 1.);
152: #else
153: b.color = vec4(1.);
154: #endif
155: return b;
156: }
157: attribute vec3 a_v_pos;
158: attribute vec3 a_v_normal;
159: attribute vec2 a_v_texCoords;
160:
161: attribute vec3 a_i_instancePos;
162: attribute vec2 a_i_light;
163: attribute vec3 a_i_segmentOffset;
164: attribute vec3 a_i_pivot;
165: attribute float a_i_horizontalAngle;
166: attribute float a_i_intensity;
167: attribute float a_i_flapScale;
168: attribute float a_i_flapness;
169:
170:
171: varying vec2 v2f_texCoords;
172: varying vec4 v2f_color;
173: varying float v2f_diffuse;
174: varying vec2 v2f_light;
175:
176:
177: void main() {
178: Vertex v;
179: v.pos = a_v_pos;
180: v.normal = a_v_normal;
181: v.texCoords = a_v_texCoords;
182:
183:
184: Flap i;
185: i.instancePos = a_i_instancePos;
186: i.light = a_i_light;
187: i.segmentOffset = a_i_segmentOffset;
188: i.pivot = a_i_pivot;
189: i.horizontalAngle = a_i_horizontalAngle;
190: i.intensity = a_i_intensity;
191: i.flapScale = a_i_flapScale;
192: i.flapness = a_i_flapness;
193:
194:
195: BlockFrag o = FLWMain(v, i);
196:
197: v2f_texCoords = o.texCoords;
198: v2f_color = o.color;
199: v2f_diffuse = o.diffuse;
200: v2f_light = o.light;
201:
202: }
[12:44:05] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:05] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
25: vec2 shiftLight(vec2 lm) {
26: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
27: }
28:
29: uniform sampler2D uBlockAtlas;
30: uniform sampler2D uLightMap;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: return texture2D(uBlockAtlas, texCoords);
34: }
35:
36: void FLWFinalizeColor(vec4 color) {
37: #if defined(USE_FOG)
38: float a = color.a;
39: float fog = clamp(FLWFogFactor(), 0., 1.);
40:
41: color = mix(uFogColor, color, fog);
42: color.a = a;
43: #endif
44:
45: gl_FragColor = color;
46: }
47:
48: vec4 FLWLight(vec2 lightCoords) {
49: return texture2D(uLightMap, shiftLight(lightCoords));
50: }
51:
52:
53:
54: struct BlockFrag {
55: vec2 texCoords;
56: vec4 color;
57: float diffuse;
58: vec2 light;
59: };
60:
61: void FLWMain(BlockFrag r) {
62: vec4 tex = FLWBlockTexture(r.texCoords);
63:
64: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
65:
66: // flw_WorldPos = ;
67: // flw_Normal = ;
68: // flw_Albedo = tex.rgb;
69: // flw_Alpha = tex.a;
70: // flw_LightMap = r.light;
71: // flw_Tint = r.color;
72: FLWFinalizeColor(color);
73: }
74:
75: varying vec2 v2f_texCoords;
76: varying vec4 v2f_color;
77: varying float v2f_diffuse;
78: varying vec2 v2f_light;
79:
80:
81: //vec3 flw_WorldPos;
82: //vec3 flw_Normal;
83: //vec3 flw_Albedo;
84: //float flw_Alpha;
85: //vec2 flw_LightMap;
86: //vec4 flw_Tint;
87:
88: void main() {
89: BlockFrag f;
90: f.texCoords = v2f_texCoords;
91: f.color = v2f_color;
92: f.diffuse = v2f_diffuse;
93: f.light = v2f_light;
94:
95:
96: FLWMain(f);
97: }
[12:44:05] [main/ERROR]: Shader compilation log for flywheel:oriented.vert: No errors.
[12:44:05] [main/ERROR]: Source for shader 'flywheel:oriented.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: uniform float uTime;
5: uniform mat4 uViewProjection;
6: uniform vec3 uCameraPos;
7:
8: #if defined(USE_FOG)
9: varying float FragDistance;
10: #endif
11:
12: void FLWFinalizeWorldPos(inout vec4 worldPos) {
13: #if defined(USE_FOG)
14: FragDistance = length(worldPos.xyz - uCameraPos);
15: #endif
16:
17: gl_Position = uViewProjection * worldPos;
18: }
19:
20: void FLWFinalizeNormal(inout vec3 normal) {
21: // noop
22: }
23:
24:
25: mat4 rotate(vec3 axis, float angle) {
26: float s = sin(angle);
27: float c = cos(angle);
28: float oc = 1. - c;
29:
30: vec3 sa = axis * s;
31:
32: mat4 mr = mat4(1.);
33: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
34: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
35: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
36:
37: return mr;
38: }
39:
40: mat4 rotation(vec3 rot) {
41: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
42: }
43:
44: mat3 modelToNormal(mat4 mat) {
45: // Discard the edges. This won't be accurate for scaled or skewed matrices,
46: // but we don't have to work with those often.
47: mat3 m;
48: m[0] = mat[0].xyz;
49: m[1] = mat[1].xyz;
50: m[2] = mat[2].xyz;
51: return m;
52: }
53:
54: #define PIOVER2 1.5707963268
55:
56: vec4 quat(vec3 axis, float angle) {
57: float halfAngle = angle * PIOVER2 / 180.0;
58: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
59: return vec4(axis.xyz * cs.y, cs.x);
60: }
61:
62: vec4 quatMult(vec4 q1, vec4 q2) {
63: // disgustingly vectorized quaternion multiplication
64: vec4 a = q1.w * q2.xyzw;
65: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
66: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
67: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
68:
69: return a + b + c + d;
70: }
71:
72: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
73: vec3 i = q.xyz;
74: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
75: }
76:
77: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
78: return rotateVertexByQuat(v, quat(axis, angle));
79: }
80:
81: float diffuse(vec3 normal) {
82: vec3 n2 = normal * normal * vec3(.6, .25, .8);
83: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
84: }
85:
86:
87: struct Oriented {
88: vec2 light;
89: vec4 color;
90: vec3 pos;
91: vec3 pivot;
92: vec4 rotation;
93: };
94:
95:
96: struct Vertex {
97: vec3 pos;
98: vec3 normal;
99: vec2 texCoords;
100: };
101:
102: struct BlockFrag {
103: vec2 texCoords;
104: vec4 color;
105: float diffuse;
106: vec2 light;
107: };
108:
109: BlockFrag FLWMain(Vertex v, Oriented o) {
110: vec4 worldPos = vec4(rotateVertexByQuat(v.pos - o.pivot, o.rotation) + o.pivot + o.pos, 1.);
111:
112: vec3 norm = rotateVertexByQuat(v.normal, o.rotation);
113:
114: FLWFinalizeWorldPos(worldPos);
115: FLWFinalizeNormal(norm);
116:
117: BlockFrag b;
118: b.diffuse = diffuse(norm);
119: b.texCoords = v.texCoords;
120: b.light = o.light;
121: #if defined(DEBUG_NORMAL)
122: b.color = vec4(norm, 1.);
123: #else
124: b.color = o.color;
125: #endif
126: return b;
127: }
128: attribute vec3 a_v_pos;
129: attribute vec3 a_v_normal;
130: attribute vec2 a_v_texCoords;
131:
132: attribute vec2 a_i_light;
133: attribute vec4 a_i_color;
134: attribute vec3 a_i_pos;
135: attribute vec3 a_i_pivot;
136: attribute vec4 a_i_rotation;
137:
138:
139: varying vec2 v2f_texCoords;
140: varying vec4 v2f_color;
141: varying float v2f_diffuse;
142: varying vec2 v2f_light;
143:
144:
145: void main() {
146: Vertex v;
147: v.pos = a_v_pos;
148: v.normal = a_v_normal;
149: v.texCoords = a_v_texCoords;
150:
151:
152: Oriented i;
153: i.light = a_i_light;
154: i.color = a_i_color;
155: i.pos = a_i_pos;
156: i.pivot = a_i_pivot;
157: i.rotation = a_i_rotation;
158:
159:
160: BlockFrag o = FLWMain(v, i);
161:
162: v2f_texCoords = o.texCoords;
163: v2f_color = o.color;
164: v2f_diffuse = o.diffuse;
165: v2f_light = o.light;
166:
167: }
[12:44:07] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:07] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: uniform sampler2D uBlockAtlas;
31: uniform sampler2D uLightMap;
32:
33: vec4 FLWBlockTexture(vec2 texCoords) {
34: return texture2D(uBlockAtlas, texCoords);
35: }
36:
37: void FLWFinalizeColor(vec4 color) {
38: #if defined(USE_FOG)
39: float a = color.a;
40: float fog = clamp(FLWFogFactor(), 0., 1.);
41:
42: color = mix(uFogColor, color, fog);
43: color.a = a;
44: #endif
45:
46: gl_FragColor = color;
47: }
48:
49: vec4 FLWLight(vec2 lightCoords) {
50: return texture2D(uLightMap, shiftLight(lightCoords));
51: }
52:
53:
54:
55: struct BlockFrag {
56: vec2 texCoords;
57: vec4 color;
58: float diffuse;
59: vec2 light;
60: };
61:
62: void FLWMain(BlockFrag r) {
63: vec4 tex = FLWBlockTexture(r.texCoords);
64:
65: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
66:
67: // flw_WorldPos = ;
68: // flw_Normal = ;
69: // flw_Albedo = tex.rgb;
70: // flw_Alpha = tex.a;
71: // flw_LightMap = r.light;
72: // flw_Tint = r.color;
73: FLWFinalizeColor(color);
74: }
75:
76: varying vec2 v2f_texCoords;
77: varying vec4 v2f_color;
78: varying float v2f_diffuse;
79: varying vec2 v2f_light;
80:
81:
82: //vec3 flw_WorldPos;
83: //vec3 flw_Normal;
84: //vec3 flw_Albedo;
85: //float flw_Alpha;
86: //vec2 flw_LightMap;
87: //vec4 flw_Tint;
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:44:07] [main/ERROR]: Shader compilation log for flywheel:oriented.vert: No errors.
[12:44:07] [main/ERROR]: Source for shader 'flywheel:oriented.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: mat4 rotate(vec3 axis, float angle) {
27: float s = sin(angle);
28: float c = cos(angle);
29: float oc = 1. - c;
30:
31: vec3 sa = axis * s;
32:
33: mat4 mr = mat4(1.);
34: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
35: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
36: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
37:
38: return mr;
39: }
40:
41: mat4 rotation(vec3 rot) {
42: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
43: }
44:
45: mat3 modelToNormal(mat4 mat) {
46: // Discard the edges. This won't be accurate for scaled or skewed matrices,
47: // but we don't have to work with those often.
48: mat3 m;
49: m[0] = mat[0].xyz;
50: m[1] = mat[1].xyz;
51: m[2] = mat[2].xyz;
52: return m;
53: }
54:
55: #define PIOVER2 1.5707963268
56:
57: vec4 quat(vec3 axis, float angle) {
58: float halfAngle = angle * PIOVER2 / 180.0;
59: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
60: return vec4(axis.xyz * cs.y, cs.x);
61: }
62:
63: vec4 quatMult(vec4 q1, vec4 q2) {
64: // disgustingly vectorized quaternion multiplication
65: vec4 a = q1.w * q2.xyzw;
66: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
67: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
68: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
69:
70: return a + b + c + d;
71: }
72:
73: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
74: vec3 i = q.xyz;
75: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
76: }
77:
78: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
79: return rotateVertexByQuat(v, quat(axis, angle));
80: }
81:
82: float diffuse(vec3 normal) {
83: vec3 n2 = normal * normal * vec3(.6, .25, .8);
84: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
85: }
86:
87:
88: struct Oriented {
89: vec2 light;
90: vec4 color;
91: vec3 pos;
92: vec3 pivot;
93: vec4 rotation;
94: };
95:
96:
97: struct Vertex {
98: vec3 pos;
99: vec3 normal;
100: vec2 texCoords;
101: };
102:
103: struct BlockFrag {
104: vec2 texCoords;
105: vec4 color;
106: float diffuse;
107: vec2 light;
108: };
109:
110: BlockFrag FLWMain(Vertex v, Oriented o) {
111: vec4 worldPos = vec4(rotateVertexByQuat(v.pos - o.pivot, o.rotation) + o.pivot + o.pos, 1.);
112:
113: vec3 norm = rotateVertexByQuat(v.normal, o.rotation);
114:
115: FLWFinalizeWorldPos(worldPos);
116: FLWFinalizeNormal(norm);
117:
118: BlockFrag b;
119: b.diffuse = diffuse(norm);
120: b.texCoords = v.texCoords;
121: b.light = o.light;
122: #if defined(DEBUG_NORMAL)
123: b.color = vec4(norm, 1.);
124: #else
125: b.color = o.color;
126: #endif
127: return b;
128: }
129: attribute vec3 a_v_pos;
130: attribute vec3 a_v_normal;
131: attribute vec2 a_v_texCoords;
132:
133: attribute vec2 a_i_light;
134: attribute vec4 a_i_color;
135: attribute vec3 a_i_pos;
136: attribute vec3 a_i_pivot;
137: attribute vec4 a_i_rotation;
138:
139:
140: varying vec2 v2f_texCoords;
141: varying vec4 v2f_color;
142: varying float v2f_diffuse;
143: varying vec2 v2f_light;
144:
145:
146: void main() {
147: Vertex v;
148: v.pos = a_v_pos;
149: v.normal = a_v_normal;
150: v.texCoords = a_v_texCoords;
151:
152:
153: Oriented i;
154: i.light = a_i_light;
155: i.color = a_i_color;
156: i.pos = a_i_pos;
157: i.pivot = a_i_pivot;
158: i.rotation = a_i_rotation;
159:
160:
161: BlockFrag o = FLWMain(v, i);
162:
163: v2f_texCoords = o.texCoords;
164: v2f_color = o.color;
165: v2f_diffuse = o.diffuse;
166: v2f_light = o.light;
167:
168: }
[12:44:11] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:11] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: uniform sampler2D uBlockAtlas;
32: uniform sampler2D uLightMap;
33:
34: vec4 FLWBlockTexture(vec2 texCoords) {
35: return texture2D(uBlockAtlas, texCoords);
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return texture2D(uLightMap, shiftLight(lightCoords));
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:44:11] [main/ERROR]: Shader compilation log for flywheel:oriented.vert: No errors.
[12:44:11] [main/ERROR]: Source for shader 'flywheel:oriented.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: mat4 rotate(vec3 axis, float angle) {
27: float s = sin(angle);
28: float c = cos(angle);
29: float oc = 1. - c;
30:
31: vec3 sa = axis * s;
32:
33: mat4 mr = mat4(1.);
34: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
35: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
36: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
37:
38: return mr;
39: }
40:
41: mat4 rotation(vec3 rot) {
42: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
43: }
44:
45: mat3 modelToNormal(mat4 mat) {
46: // Discard the edges. This won't be accurate for scaled or skewed matrices,
47: // but we don't have to work with those often.
48: mat3 m;
49: m[0] = mat[0].xyz;
50: m[1] = mat[1].xyz;
51: m[2] = mat[2].xyz;
52: return m;
53: }
54:
55: #define PIOVER2 1.5707963268
56:
57: vec4 quat(vec3 axis, float angle) {
58: float halfAngle = angle * PIOVER2 / 180.0;
59: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
60: return vec4(axis.xyz * cs.y, cs.x);
61: }
62:
63: vec4 quatMult(vec4 q1, vec4 q2) {
64: // disgustingly vectorized quaternion multiplication
65: vec4 a = q1.w * q2.xyzw;
66: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
67: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
68: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
69:
70: return a + b + c + d;
71: }
72:
73: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
74: vec3 i = q.xyz;
75: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
76: }
77:
78: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
79: return rotateVertexByQuat(v, quat(axis, angle));
80: }
81:
82: float diffuse(vec3 normal) {
83: vec3 n2 = normal * normal * vec3(.6, .25, .8);
84: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
85: }
86:
87:
88: struct Oriented {
89: vec2 light;
90: vec4 color;
91: vec3 pos;
92: vec3 pivot;
93: vec4 rotation;
94: };
95:
96:
97: struct Vertex {
98: vec3 pos;
99: vec3 normal;
100: vec2 texCoords;
101: };
102:
103: struct BlockFrag {
104: vec2 texCoords;
105: vec4 color;
106: float diffuse;
107: vec2 light;
108: };
109:
110: BlockFrag FLWMain(Vertex v, Oriented o) {
111: vec4 worldPos = vec4(rotateVertexByQuat(v.pos - o.pivot, o.rotation) + o.pivot + o.pos, 1.);
112:
113: vec3 norm = rotateVertexByQuat(v.normal, o.rotation);
114:
115: FLWFinalizeWorldPos(worldPos);
116: FLWFinalizeNormal(norm);
117:
118: BlockFrag b;
119: b.diffuse = diffuse(norm);
120: b.texCoords = v.texCoords;
121: b.light = o.light;
122: #if defined(DEBUG_NORMAL)
123: b.color = vec4(norm, 1.);
124: #else
125: b.color = o.color;
126: #endif
127: return b;
128: }
129: attribute vec3 a_v_pos;
130: attribute vec3 a_v_normal;
131: attribute vec2 a_v_texCoords;
132:
133: attribute vec2 a_i_light;
134: attribute vec4 a_i_color;
135: attribute vec3 a_i_pos;
136: attribute vec3 a_i_pivot;
137: attribute vec4 a_i_rotation;
138:
139:
140: varying vec2 v2f_texCoords;
141: varying vec4 v2f_color;
142: varying float v2f_diffuse;
143: varying vec2 v2f_light;
144:
145:
146: void main() {
147: Vertex v;
148: v.pos = a_v_pos;
149: v.normal = a_v_normal;
150: v.texCoords = a_v_texCoords;
151:
152:
153: Oriented i;
154: i.light = a_i_light;
155: i.color = a_i_color;
156: i.pos = a_i_pos;
157: i.pivot = a_i_pivot;
158: i.rotation = a_i_rotation;
159:
160:
161: BlockFrag o = FLWMain(v, i);
162:
163: v2f_texCoords = o.texCoords;
164: v2f_color = o.color;
165: v2f_diffuse = o.diffuse;
166: v2f_light = o.light;
167:
168: }
[12:44:15] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:15] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: uniform sampler2D uBlockAtlas;
32: uniform sampler2D uLightMap;
33:
34: vec4 FLWBlockTexture(vec2 texCoords) {
35: return texture2D(uBlockAtlas, texCoords);
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return texture2D(uLightMap, shiftLight(lightCoords));
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:44:15] [main/ERROR]: Shader compilation log for flywheel:oriented.vert: No errors.
[12:44:15] [main/ERROR]: Source for shader 'flywheel:oriented.vert':
1: #version 110
2:
3: uniform float uTime;
4: uniform mat4 uViewProjection;
5: uniform vec3 uCameraPos;
6:
7: #if defined(USE_FOG)
8: varying float FragDistance;
9: #endif
10:
11: void FLWFinalizeWorldPos(inout vec4 worldPos) {
12: #if defined(USE_FOG)
13: FragDistance = length(worldPos.xyz - uCameraPos);
14: #endif
15:
16: gl_Position = uViewProjection * worldPos;
17: }
18:
19: void FLWFinalizeNormal(inout vec3 normal) {
20: // noop
21: }
22:
23:
24: mat4 rotate(vec3 axis, float angle) {
25: float s = sin(angle);
26: float c = cos(angle);
27: float oc = 1. - c;
28:
29: vec3 sa = axis * s;
30:
31: mat4 mr = mat4(1.);
32: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
33: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
34: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
35:
36: return mr;
37: }
38:
39: mat4 rotation(vec3 rot) {
40: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
41: }
42:
43: mat3 modelToNormal(mat4 mat) {
44: // Discard the edges. This won't be accurate for scaled or skewed matrices,
45: // but we don't have to work with those often.
46: mat3 m;
47: m[0] = mat[0].xyz;
48: m[1] = mat[1].xyz;
49: m[2] = mat[2].xyz;
50: return m;
51: }
52:
53: #define PIOVER2 1.5707963268
54:
55: vec4 quat(vec3 axis, float angle) {
56: float halfAngle = angle * PIOVER2 / 180.0;
57: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
58: return vec4(axis.xyz * cs.y, cs.x);
59: }
60:
61: vec4 quatMult(vec4 q1, vec4 q2) {
62: // disgustingly vectorized quaternion multiplication
63: vec4 a = q1.w * q2.xyzw;
64: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
65: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
66: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
67:
68: return a + b + c + d;
69: }
70:
71: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
72: vec3 i = q.xyz;
73: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
74: }
75:
76: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
77: return rotateVertexByQuat(v, quat(axis, angle));
78: }
79:
80: float diffuse(vec3 normal) {
81: vec3 n2 = normal * normal * vec3(.6, .25, .8);
82: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
83: }
84:
85:
86: struct Oriented {
87: vec2 light;
88: vec4 color;
89: vec3 pos;
90: vec3 pivot;
91: vec4 rotation;
92: };
93:
94:
95: struct Vertex {
96: vec3 pos;
97: vec3 normal;
98: vec2 texCoords;
99: };
100:
101: struct BlockFrag {
102: vec2 texCoords;
103: vec4 color;
104: float diffuse;
105: vec2 light;
106: };
107:
108: BlockFrag FLWMain(Vertex v, Oriented o) {
109: vec4 worldPos = vec4(rotateVertexByQuat(v.pos - o.pivot, o.rotation) + o.pivot + o.pos, 1.);
110:
111: vec3 norm = rotateVertexByQuat(v.normal, o.rotation);
112:
113: FLWFinalizeWorldPos(worldPos);
114: FLWFinalizeNormal(norm);
115:
116: BlockFrag b;
117: b.diffuse = diffuse(norm);
118: b.texCoords = v.texCoords;
119: b.light = o.light;
120: #if defined(DEBUG_NORMAL)
121: b.color = vec4(norm, 1.);
122: #else
123: b.color = o.color;
124: #endif
125: return b;
126: }
127: attribute vec3 a_v_pos;
128: attribute vec3 a_v_normal;
129: attribute vec2 a_v_texCoords;
130:
131: attribute vec2 a_i_light;
132: attribute vec4 a_i_color;
133: attribute vec3 a_i_pos;
134: attribute vec3 a_i_pivot;
135: attribute vec4 a_i_rotation;
136:
137:
138: varying vec2 v2f_texCoords;
139: varying vec4 v2f_color;
140: varying float v2f_diffuse;
141: varying vec2 v2f_light;
142:
143:
144: void main() {
145: Vertex v;
146: v.pos = a_v_pos;
147: v.normal = a_v_normal;
148: v.texCoords = a_v_texCoords;
149:
150:
151: Oriented i;
152: i.light = a_i_light;
153: i.color = a_i_color;
154: i.pos = a_i_pos;
155: i.pivot = a_i_pivot;
156: i.rotation = a_i_rotation;
157:
158:
159: BlockFrag o = FLWMain(v, i);
160:
161: v2f_texCoords = o.texCoords;
162: v2f_color = o.color;
163: v2f_diffuse = o.diffuse;
164: v2f_light = o.light;
165:
166: }
[12:44:15] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:15] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
25: vec2 shiftLight(vec2 lm) {
26: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
27: }
28:
29: uniform sampler2D uBlockAtlas;
30: uniform sampler2D uLightMap;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: return texture2D(uBlockAtlas, texCoords);
34: }
35:
36: void FLWFinalizeColor(vec4 color) {
37: #if defined(USE_FOG)
38: float a = color.a;
39: float fog = clamp(FLWFogFactor(), 0., 1.);
40:
41: color = mix(uFogColor, color, fog);
42: color.a = a;
43: #endif
44:
45: gl_FragColor = color;
46: }
47:
48: vec4 FLWLight(vec2 lightCoords) {
49: return texture2D(uLightMap, shiftLight(lightCoords));
50: }
51:
52:
53:
54: struct BlockFrag {
55: vec2 texCoords;
56: vec4 color;
57: float diffuse;
58: vec2 light;
59: };
60:
61: void FLWMain(BlockFrag r) {
62: vec4 tex = FLWBlockTexture(r.texCoords);
63:
64: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
65:
66: // flw_WorldPos = ;
67: // flw_Normal = ;
68: // flw_Albedo = tex.rgb;
69: // flw_Alpha = tex.a;
70: // flw_LightMap = r.light;
71: // flw_Tint = r.color;
72: FLWFinalizeColor(color);
73: }
74:
75: varying vec2 v2f_texCoords;
76: varying vec4 v2f_color;
77: varying float v2f_diffuse;
78: varying vec2 v2f_light;
79:
80:
81: //vec3 flw_WorldPos;
82: //vec3 flw_Normal;
83: //vec3 flw_Albedo;
84: //float flw_Alpha;
85: //vec2 flw_LightMap;
86: //vec4 flw_Tint;
87:
88: void main() {
89: BlockFrag f;
90: f.texCoords = v2f_texCoords;
91: f.color = v2f_color;
92: f.diffuse = v2f_diffuse;
93: f.light = v2f_light;
94:
95:
96: FLWMain(f);
97: }
[12:44:15] [main/ERROR]: Shader compilation log for flywheel:model.vert: No errors.
[12:44:15] [main/ERROR]: Source for shader 'flywheel:model.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: uniform float uTime;
5: uniform mat4 uViewProjection;
6: uniform vec3 uCameraPos;
7:
8: #if defined(USE_FOG)
9: varying float FragDistance;
10: #endif
11:
12: void FLWFinalizeWorldPos(inout vec4 worldPos) {
13: #if defined(USE_FOG)
14: FragDistance = length(worldPos.xyz - uCameraPos);
15: #endif
16:
17: gl_Position = uViewProjection * worldPos;
18: }
19:
20: void FLWFinalizeNormal(inout vec3 normal) {
21: // noop
22: }
23:
24:
25: float diffuse(vec3 normal) {
26: vec3 n2 = normal * normal * vec3(.6, .25, .8);
27: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
28: }
29:
30:
31: struct Vertex {
32: vec3 pos;
33: vec3 normal;
34: vec2 texCoords;
35: };
36:
37: struct BlockFrag {
38: vec2 texCoords;
39: vec4 color;
40: float diffuse;
41: vec2 light;
42: };
43:
44:
45: struct Instance {
46: vec2 light;
47: vec4 color;
48: mat4 transform;
49: mat3 normalMat;
50: };
51:
52: BlockFrag FLWMain(Vertex v, Instance i) {
53: vec4 worldPos = i.transform * vec4(v.pos, 1.);
54:
55: vec3 norm = i.normalMat * v.normal;
56:
57: FLWFinalizeWorldPos(worldPos);
58: FLWFinalizeNormal(norm);
59:
60: norm = normalize(norm);
61:
62: BlockFrag b;
63: b.diffuse = diffuse(norm);
64: b.texCoords = v.texCoords;
65: b.light = i.light;
66: #if defined(DEBUG_NORMAL)
67: b.color = vec4(norm, 1.);
68: #else
69: b.color = i.color;
70: #endif
71: return b;
72: }
73: attribute vec3 a_v_pos;
74: attribute vec3 a_v_normal;
75: attribute vec2 a_v_texCoords;
76:
77: attribute vec2 a_i_light;
78: attribute vec4 a_i_color;
79: attribute mat4 a_i_transform;
80: attribute mat3 a_i_normalMat;
81:
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: void main() {
90: Vertex v;
91: v.pos = a_v_pos;
92: v.normal = a_v_normal;
93: v.texCoords = a_v_texCoords;
94:
95:
96: Instance i;
97: i.light = a_i_light;
98: i.color = a_i_color;
99: i.transform = a_i_transform;
100: i.normalMat = a_i_normalMat;
101:
102:
103: BlockFrag o = FLWMain(v, i);
104:
105: v2f_texCoords = o.texCoords;
106: v2f_color = o.color;
107: v2f_diffuse = o.diffuse;
108: v2f_light = o.light;
109:
110: }
[12:44:16] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:16] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: uniform sampler2D uBlockAtlas;
31: uniform sampler2D uLightMap;
32:
33: vec4 FLWBlockTexture(vec2 texCoords) {
34: return texture2D(uBlockAtlas, texCoords);
35: }
36:
37: void FLWFinalizeColor(vec4 color) {
38: #if defined(USE_FOG)
39: float a = color.a;
40: float fog = clamp(FLWFogFactor(), 0., 1.);
41:
42: color = mix(uFogColor, color, fog);
43: color.a = a;
44: #endif
45:
46: gl_FragColor = color;
47: }
48:
49: vec4 FLWLight(vec2 lightCoords) {
50: return texture2D(uLightMap, shiftLight(lightCoords));
51: }
52:
53:
54:
55: struct BlockFrag {
56: vec2 texCoords;
57: vec4 color;
58: float diffuse;
59: vec2 light;
60: };
61:
62: void FLWMain(BlockFrag r) {
63: vec4 tex = FLWBlockTexture(r.texCoords);
64:
65: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
66:
67: // flw_WorldPos = ;
68: // flw_Normal = ;
69: // flw_Albedo = tex.rgb;
70: // flw_Alpha = tex.a;
71: // flw_LightMap = r.light;
72: // flw_Tint = r.color;
73: FLWFinalizeColor(color);
74: }
75:
76: varying vec2 v2f_texCoords;
77: varying vec4 v2f_color;
78: varying float v2f_diffuse;
79: varying vec2 v2f_light;
80:
81:
82: //vec3 flw_WorldPos;
83: //vec3 flw_Normal;
84: //vec3 flw_Albedo;
85: //float flw_Alpha;
86: //vec2 flw_LightMap;
87: //vec4 flw_Tint;
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:44:16] [main/ERROR]: Shader compilation log for flywheel:model.vert: No errors.
[12:44:16] [main/ERROR]: Source for shader 'flywheel:model.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: float diffuse(vec3 normal) {
27: vec3 n2 = normal * normal * vec3(.6, .25, .8);
28: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
29: }
30:
31:
32: struct Vertex {
33: vec3 pos;
34: vec3 normal;
35: vec2 texCoords;
36: };
37:
38: struct BlockFrag {
39: vec2 texCoords;
40: vec4 color;
41: float diffuse;
42: vec2 light;
43: };
44:
45:
46: struct Instance {
47: vec2 light;
48: vec4 color;
49: mat4 transform;
50: mat3 normalMat;
51: };
52:
53: BlockFrag FLWMain(Vertex v, Instance i) {
54: vec4 worldPos = i.transform * vec4(v.pos, 1.);
55:
56: vec3 norm = i.normalMat * v.normal;
57:
58: FLWFinalizeWorldPos(worldPos);
59: FLWFinalizeNormal(norm);
60:
61: norm = normalize(norm);
62:
63: BlockFrag b;
64: b.diffuse = diffuse(norm);
65: b.texCoords = v.texCoords;
66: b.light = i.light;
67: #if defined(DEBUG_NORMAL)
68: b.color = vec4(norm, 1.);
69: #else
70: b.color = i.color;
71: #endif
72: return b;
73: }
74: attribute vec3 a_v_pos;
75: attribute vec3 a_v_normal;
76: attribute vec2 a_v_texCoords;
77:
78: attribute vec2 a_i_light;
79: attribute vec4 a_i_color;
80: attribute mat4 a_i_transform;
81: attribute mat3 a_i_normalMat;
82:
83:
84: varying vec2 v2f_texCoords;
85: varying vec4 v2f_color;
86: varying float v2f_diffuse;
87: varying vec2 v2f_light;
88:
89:
90: void main() {
91: Vertex v;
92: v.pos = a_v_pos;
93: v.normal = a_v_normal;
94: v.texCoords = a_v_texCoords;
95:
96:
97: Instance i;
98: i.light = a_i_light;
99: i.color = a_i_color;
100: i.transform = a_i_transform;
101: i.normalMat = a_i_normalMat;
102:
103:
104: BlockFrag o = FLWMain(v, i);
105:
106: v2f_texCoords = o.texCoords;
107: v2f_color = o.color;
108: v2f_diffuse = o.diffuse;
109: v2f_light = o.light;
110:
111: }
[12:44:16] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:16] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: uniform sampler2D uBlockAtlas;
32: uniform sampler2D uLightMap;
33:
34: vec4 FLWBlockTexture(vec2 texCoords) {
35: return texture2D(uBlockAtlas, texCoords);
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return texture2D(uLightMap, shiftLight(lightCoords));
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:44:16] [main/ERROR]: Shader compilation log for flywheel:model.vert: No errors.
[12:44:16] [main/ERROR]: Source for shader 'flywheel:model.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: float diffuse(vec3 normal) {
27: vec3 n2 = normal * normal * vec3(.6, .25, .8);
28: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
29: }
30:
31:
32: struct Vertex {
33: vec3 pos;
34: vec3 normal;
35: vec2 texCoords;
36: };
37:
38: struct BlockFrag {
39: vec2 texCoords;
40: vec4 color;
41: float diffuse;
42: vec2 light;
43: };
44:
45:
46: struct Instance {
47: vec2 light;
48: vec4 color;
49: mat4 transform;
50: mat3 normalMat;
51: };
52:
53: BlockFrag FLWMain(Vertex v, Instance i) {
54: vec4 worldPos = i.transform * vec4(v.pos, 1.);
55:
56: vec3 norm = i.normalMat * v.normal;
57:
58: FLWFinalizeWorldPos(worldPos);
59: FLWFinalizeNormal(norm);
60:
61: norm = normalize(norm);
62:
63: BlockFrag b;
64: b.diffuse = diffuse(norm);
65: b.texCoords = v.texCoords;
66: b.light = i.light;
67: #if defined(DEBUG_NORMAL)
68: b.color = vec4(norm, 1.);
69: #else
70: b.color = i.color;
71: #endif
72: return b;
73: }
74: attribute vec3 a_v_pos;
75: attribute vec3 a_v_normal;
76: attribute vec2 a_v_texCoords;
77:
78: attribute vec2 a_i_light;
79: attribute vec4 a_i_color;
80: attribute mat4 a_i_transform;
81: attribute mat3 a_i_normalMat;
82:
83:
84: varying vec2 v2f_texCoords;
85: varying vec4 v2f_color;
86: varying float v2f_diffuse;
87: varying vec2 v2f_light;
88:
89:
90: void main() {
91: Vertex v;
92: v.pos = a_v_pos;
93: v.normal = a_v_normal;
94: v.texCoords = a_v_texCoords;
95:
96:
97: Instance i;
98: i.light = a_i_light;
99: i.color = a_i_color;
100: i.transform = a_i_transform;
101: i.normalMat = a_i_normalMat;
102:
103:
104: BlockFrag o = FLWMain(v, i);
105:
106: v2f_texCoords = o.texCoords;
107: v2f_color = o.color;
108: v2f_diffuse = o.diffuse;
109: v2f_light = o.light;
110:
111: }
[12:44:16] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:16] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: uniform sampler2D uBlockAtlas;
32: uniform sampler2D uLightMap;
33:
34: vec4 FLWBlockTexture(vec2 texCoords) {
35: return texture2D(uBlockAtlas, texCoords);
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return texture2D(uLightMap, shiftLight(lightCoords));
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:44:19] [main/ERROR]: Shader compilation log for flywheel:model.vert: No errors.
[12:44:19] [main/ERROR]: Source for shader 'flywheel:model.vert':
1: #version 110
2:
3: uniform float uTime;
4: uniform mat4 uViewProjection;
5: uniform vec3 uCameraPos;
6:
7: #if defined(USE_FOG)
8: varying float FragDistance;
9: #endif
10:
11: void FLWFinalizeWorldPos(inout vec4 worldPos) {
12: #if defined(USE_FOG)
13: FragDistance = length(worldPos.xyz - uCameraPos);
14: #endif
15:
16: gl_Position = uViewProjection * worldPos;
17: }
18:
19: void FLWFinalizeNormal(inout vec3 normal) {
20: // noop
21: }
22:
23:
24: float diffuse(vec3 normal) {
25: vec3 n2 = normal * normal * vec3(.6, .25, .8);
26: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
27: }
28:
29:
30: struct Vertex {
31: vec3 pos;
32: vec3 normal;
33: vec2 texCoords;
34: };
35:
36: struct BlockFrag {
37: vec2 texCoords;
38: vec4 color;
39: float diffuse;
40: vec2 light;
41: };
42:
43:
44: struct Instance {
45: vec2 light;
46: vec4 color;
47: mat4 transform;
48: mat3 normalMat;
49: };
50:
51: BlockFrag FLWMain(Vertex v, Instance i) {
52: vec4 worldPos = i.transform * vec4(v.pos, 1.);
53:
54: vec3 norm = i.normalMat * v.normal;
55:
56: FLWFinalizeWorldPos(worldPos);
57: FLWFinalizeNormal(norm);
58:
59: norm = normalize(norm);
60:
61: BlockFrag b;
62: b.diffuse = diffuse(norm);
63: b.texCoords = v.texCoords;
64: b.light = i.light;
65: #if defined(DEBUG_NORMAL)
66: b.color = vec4(norm, 1.);
67: #else
68: b.color = i.color;
69: #endif
70: return b;
71: }
72: attribute vec3 a_v_pos;
73: attribute vec3 a_v_normal;
74: attribute vec2 a_v_texCoords;
75:
76: attribute vec2 a_i_light;
77: attribute vec4 a_i_color;
78: attribute mat4 a_i_transform;
79: attribute mat3 a_i_normalMat;
80:
81:
82: varying vec2 v2f_texCoords;
83: varying vec4 v2f_color;
84: varying float v2f_diffuse;
85: varying vec2 v2f_light;
86:
87:
88: void main() {
89: Vertex v;
90: v.pos = a_v_pos;
91: v.normal = a_v_normal;
92: v.texCoords = a_v_texCoords;
93:
94:
95: Instance i;
96: i.light = a_i_light;
97: i.color = a_i_color;
98: i.transform = a_i_transform;
99: i.normalMat = a_i_normalMat;
100:
101:
102: BlockFrag o = FLWMain(v, i);
103:
104: v2f_texCoords = o.texCoords;
105: v2f_color = o.color;
106: v2f_diffuse = o.diffuse;
107: v2f_light = o.light;
108:
109: }
[12:44:19] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:19] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
25: vec2 shiftLight(vec2 lm) {
26: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
27: }
28:
29: uniform sampler2D uBlockAtlas;
30: uniform sampler2D uLightMap;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: return texture2D(uBlockAtlas, texCoords);
34: }
35:
36: void FLWFinalizeColor(vec4 color) {
37: #if defined(USE_FOG)
38: float a = color.a;
39: float fog = clamp(FLWFogFactor(), 0., 1.);
40:
41: color = mix(uFogColor, color, fog);
42: color.a = a;
43: #endif
44:
45: gl_FragColor = color;
46: }
47:
48: vec4 FLWLight(vec2 lightCoords) {
49: return texture2D(uLightMap, shiftLight(lightCoords));
50: }
51:
52:
53:
54: struct BlockFrag {
55: vec2 texCoords;
56: vec4 color;
57: float diffuse;
58: vec2 light;
59: };
60:
61: void FLWMain(BlockFrag r) {
62: vec4 tex = FLWBlockTexture(r.texCoords);
63:
64: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
65:
66: // flw_WorldPos = ;
67: // flw_Normal = ;
68: // flw_Albedo = tex.rgb;
69: // flw_Alpha = tex.a;
70: // flw_LightMap = r.light;
71: // flw_Tint = r.color;
72: FLWFinalizeColor(color);
73: }
74:
75: varying vec2 v2f_texCoords;
76: varying vec4 v2f_color;
77: varying float v2f_diffuse;
78: varying vec2 v2f_light;
79:
80:
81: //vec3 flw_WorldPos;
82: //vec3 flw_Normal;
83: //vec3 flw_Albedo;
84: //float flw_Alpha;
85: //vec2 flw_LightMap;
86: //vec4 flw_Tint;
87:
88: void main() {
89: BlockFrag f;
90: f.texCoords = v2f_texCoords;
91: f.color = v2f_color;
92: f.diffuse = v2f_diffuse;
93: f.light = v2f_light;
94:
95:
96: FLWMain(f);
97: }
[12:44:22] [main/ERROR]: Shader compilation log for create:belt.vert: No errors.
[12:44:22] [main/ERROR]: Source for shader 'create:belt.vert':
1: #version 110
2: #define DEBUG_RAINBOW
3:
4: #define PI 3.1415926538
5:
6: uniform float uTime;
7: uniform mat4 uViewProjection;
8: uniform vec3 uCameraPos;
9:
10: #if defined(USE_FOG)
11: varying float FragDistance;
12: #endif
13:
14: void FLWFinalizeWorldPos(inout vec4 worldPos) {
15: #if defined(USE_FOG)
16: FragDistance = length(worldPos.xyz - uCameraPos);
17: #endif
18:
19: gl_Position = uViewProjection * worldPos;
20: }
21:
22: void FLWFinalizeNormal(inout vec3 normal) {
23: // noop
24: }
25:
26:
27: #define PIOVER2 1.5707963268
28:
29: vec4 quat(vec3 axis, float angle) {
30: float halfAngle = angle * PIOVER2 / 180.0;
31: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
32: return vec4(axis.xyz * cs.y, cs.x);
33: }
34:
35: vec4 quatMult(vec4 q1, vec4 q2) {
36: // disgustingly vectorized quaternion multiplication
37: vec4 a = q1.w * q2.xyzw;
38: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
39: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
40: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
41:
42: return a + b + c + d;
43: }
44:
45: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
46: vec3 i = q.xyz;
47: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
48: }
49:
50: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
51: return rotateVertexByQuat(v, quat(axis, angle));
52: }
53:
54: mat4 rotate(vec3 axis, float angle) {
55: float s = sin(angle);
56: float c = cos(angle);
57: float oc = 1. - c;
58:
59: vec3 sa = axis * s;
60:
61: mat4 mr = mat4(1.);
62: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
63: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
64: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
65:
66: return mr;
67: }
68:
69: mat4 rotation(vec3 rot) {
70: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
71: }
72:
73: mat3 modelToNormal(mat4 mat) {
74: // Discard the edges. This won't be accurate for scaled or skewed matrices,
75: // but we don't have to work with those often.
76: mat3 m;
77: m[0] = mat[0].xyz;
78: m[1] = mat[1].xyz;
79: m[2] = mat[2].xyz;
80: return m;
81: }
82:
83: float diffuse(vec3 normal) {
84: vec3 n2 = normal * normal * vec3(.6, .25, .8);
85: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
86: }
87:
88:
89: struct Belt {
90: vec2 light;
91: vec4 color;
92: vec3 pos;
93: float speed;
94: float offset;
95: vec4 rotation;
96: vec2 sourceTexture;
97: vec4 scrollTexture;
98: float scrollMult;
99: };
100:
101:
102: struct Vertex {
103: vec3 pos;
104: vec3 normal;
105: vec2 texCoords;
106: };
107:
108: struct BlockFrag {
109: vec2 texCoords;
110: vec4 color;
111: float diffuse;
112: vec2 light;
113: };
114:
115: BlockFrag FLWMain(Vertex v, Belt instance) {
116: vec3 rotated = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5;
117:
118: vec4 worldPos = vec4(rotated, 1.);
119:
120: vec3 norm = rotateVertexByQuat(v.normal, instance.rotation);
121:
122: FLWFinalizeWorldPos(worldPos);
123: FLWFinalizeNormal(norm);
124:
125: float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y;
126: float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult;
127:
128: BlockFrag b;
129: b.diffuse = diffuse(norm);
130: b.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
131: b.light = instance.light;
132:
133: #if defined(DEBUG_RAINBOW)
134: b.color = instance.color;
135: #elif defined(DEBUG_NORMAL)
136: b.color = vec4(norm, 1.);
137: #else
138: b.color = vec4(1.);
139: #endif
140:
141: return b;
142: }
143: attribute vec3 a_v_pos;
144: attribute vec3 a_v_normal;
145: attribute vec2 a_v_texCoords;
146:
147: attribute vec2 a_i_light;
148: attribute vec4 a_i_color;
149: attribute vec3 a_i_pos;
150: attribute float a_i_speed;
151: attribute float a_i_offset;
152: attribute vec4 a_i_rotation;
153: attribute vec2 a_i_sourceTexture;
154: attribute vec4 a_i_scrollTexture;
155: attribute float a_i_scrollMult;
156:
157:
158: varying vec2 v2f_texCoords;
159: varying vec4 v2f_color;
160: varying float v2f_diffuse;
161: varying vec2 v2f_light;
162:
163:
164: void main() {
165: Vertex v;
166: v.pos = a_v_pos;
167: v.normal = a_v_normal;
168: v.texCoords = a_v_texCoords;
169:
170:
171: Belt i;
172: i.light = a_i_light;
173: i.color = a_i_color;
174: i.pos = a_i_pos;
175: i.speed = a_i_speed;
176: i.offset = a_i_offset;
177: i.rotation = a_i_rotation;
178: i.sourceTexture = a_i_sourceTexture;
179: i.scrollTexture = a_i_scrollTexture;
180: i.scrollMult = a_i_scrollMult;
181:
182:
183: BlockFrag o = FLWMain(v, i);
184:
185: v2f_texCoords = o.texCoords;
186: v2f_color = o.color;
187: v2f_diffuse = o.diffuse;
188: v2f_light = o.light;
189:
190: }
[12:44:26] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:26] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_RAINBOW
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: uniform sampler2D uBlockAtlas;
31: uniform sampler2D uLightMap;
32:
33: vec4 FLWBlockTexture(vec2 texCoords) {
34: return texture2D(uBlockAtlas, texCoords);
35: }
36:
37: void FLWFinalizeColor(vec4 color) {
38: #if defined(USE_FOG)
39: float a = color.a;
40: float fog = clamp(FLWFogFactor(), 0., 1.);
41:
42: color = mix(uFogColor, color, fog);
43: color.a = a;
44: #endif
45:
46: gl_FragColor = color;
47: }
48:
49: vec4 FLWLight(vec2 lightCoords) {
50: return texture2D(uLightMap, shiftLight(lightCoords));
51: }
52:
53:
54:
55: struct BlockFrag {
56: vec2 texCoords;
57: vec4 color;
58: float diffuse;
59: vec2 light;
60: };
61:
62: void FLWMain(BlockFrag r) {
63: vec4 tex = FLWBlockTexture(r.texCoords);
64:
65: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
66:
67: // flw_WorldPos = ;
68: // flw_Normal = ;
69: // flw_Albedo = tex.rgb;
70: // flw_Alpha = tex.a;
71: // flw_LightMap = r.light;
72: // flw_Tint = r.color;
73: FLWFinalizeColor(color);
74: }
75:
76: varying vec2 v2f_texCoords;
77: varying vec4 v2f_color;
78: varying float v2f_diffuse;
79: varying vec2 v2f_light;
80:
81:
82: //vec3 flw_WorldPos;
83: //vec3 flw_Normal;
84: //vec3 flw_Albedo;
85: //float flw_Alpha;
86: //vec2 flw_LightMap;
87: //vec4 flw_Tint;
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:44:26] [main/ERROR]: Shader compilation log for create:belt.vert: No errors.
[12:44:26] [main/ERROR]: Source for shader 'create:belt.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #define PI 3.1415926538
5:
6: uniform float uTime;
7: uniform mat4 uViewProjection;
8: uniform vec3 uCameraPos;
9:
10: #if defined(USE_FOG)
11: varying float FragDistance;
12: #endif
13:
14: void FLWFinalizeWorldPos(inout vec4 worldPos) {
15: #if defined(USE_FOG)
16: FragDistance = length(worldPos.xyz - uCameraPos);
17: #endif
18:
19: gl_Position = uViewProjection * worldPos;
20: }
21:
22: void FLWFinalizeNormal(inout vec3 normal) {
23: // noop
24: }
25:
26:
27: #define PIOVER2 1.5707963268
28:
29: vec4 quat(vec3 axis, float angle) {
30: float halfAngle = angle * PIOVER2 / 180.0;
31: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
32: return vec4(axis.xyz * cs.y, cs.x);
33: }
34:
35: vec4 quatMult(vec4 q1, vec4 q2) {
36: // disgustingly vectorized quaternion multiplication
37: vec4 a = q1.w * q2.xyzw;
38: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
39: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
40: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
41:
42: return a + b + c + d;
43: }
44:
45: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
46: vec3 i = q.xyz;
47: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
48: }
49:
50: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
51: return rotateVertexByQuat(v, quat(axis, angle));
52: }
53:
54: mat4 rotate(vec3 axis, float angle) {
55: float s = sin(angle);
56: float c = cos(angle);
57: float oc = 1. - c;
58:
59: vec3 sa = axis * s;
60:
61: mat4 mr = mat4(1.);
62: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
63: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
64: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
65:
66: return mr;
67: }
68:
69: mat4 rotation(vec3 rot) {
70: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
71: }
72:
73: mat3 modelToNormal(mat4 mat) {
74: // Discard the edges. This won't be accurate for scaled or skewed matrices,
75: // but we don't have to work with those often.
76: mat3 m;
77: m[0] = mat[0].xyz;
78: m[1] = mat[1].xyz;
79: m[2] = mat[2].xyz;
80: return m;
81: }
82:
83: float diffuse(vec3 normal) {
84: vec3 n2 = normal * normal * vec3(.6, .25, .8);
85: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
86: }
87:
88:
89: struct Belt {
90: vec2 light;
91: vec4 color;
92: vec3 pos;
93: float speed;
94: float offset;
95: vec4 rotation;
96: vec2 sourceTexture;
97: vec4 scrollTexture;
98: float scrollMult;
99: };
100:
101:
102: struct Vertex {
103: vec3 pos;
104: vec3 normal;
105: vec2 texCoords;
106: };
107:
108: struct BlockFrag {
109: vec2 texCoords;
110: vec4 color;
111: float diffuse;
112: vec2 light;
113: };
114:
115: BlockFrag FLWMain(Vertex v, Belt instance) {
116: vec3 rotated = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5;
117:
118: vec4 worldPos = vec4(rotated, 1.);
119:
120: vec3 norm = rotateVertexByQuat(v.normal, instance.rotation);
121:
122: FLWFinalizeWorldPos(worldPos);
123: FLWFinalizeNormal(norm);
124:
125: float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y;
126: float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult;
127:
128: BlockFrag b;
129: b.diffuse = diffuse(norm);
130: b.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
131: b.light = instance.light;
132:
133: #if defined(DEBUG_RAINBOW)
134: b.color = instance.color;
135: #elif defined(DEBUG_NORMAL)
136: b.color = vec4(norm, 1.);
137: #else
138: b.color = vec4(1.);
139: #endif
140:
141: return b;
142: }
143: attribute vec3 a_v_pos;
144: attribute vec3 a_v_normal;
145: attribute vec2 a_v_texCoords;
146:
147: attribute vec2 a_i_light;
148: attribute vec4 a_i_color;
149: attribute vec3 a_i_pos;
150: attribute float a_i_speed;
151: attribute float a_i_offset;
152: attribute vec4 a_i_rotation;
153: attribute vec2 a_i_sourceTexture;
154: attribute vec4 a_i_scrollTexture;
155: attribute float a_i_scrollMult;
156:
157:
158: varying vec2 v2f_texCoords;
159: varying vec4 v2f_color;
160: varying float v2f_diffuse;
161: varying vec2 v2f_light;
162:
163:
164: void main() {
165: Vertex v;
166: v.pos = a_v_pos;
167: v.normal = a_v_normal;
168: v.texCoords = a_v_texCoords;
169:
170:
171: Belt i;
172: i.light = a_i_light;
173: i.color = a_i_color;
174: i.pos = a_i_pos;
175: i.speed = a_i_speed;
176: i.offset = a_i_offset;
177: i.rotation = a_i_rotation;
178: i.sourceTexture = a_i_sourceTexture;
179: i.scrollTexture = a_i_scrollTexture;
180: i.scrollMult = a_i_scrollMult;
181:
182:
183: BlockFrag o = FLWMain(v, i);
184:
185: v2f_texCoords = o.texCoords;
186: v2f_color = o.color;
187: v2f_diffuse = o.diffuse;
188: v2f_light = o.light;
189:
190: }
[12:44:29] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:29] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: uniform sampler2D uBlockAtlas;
31: uniform sampler2D uLightMap;
32:
33: vec4 FLWBlockTexture(vec2 texCoords) {
34: return texture2D(uBlockAtlas, texCoords);
35: }
36:
37: void FLWFinalizeColor(vec4 color) {
38: #if defined(USE_FOG)
39: float a = color.a;
40: float fog = clamp(FLWFogFactor(), 0., 1.);
41:
42: color = mix(uFogColor, color, fog);
43: color.a = a;
44: #endif
45:
46: gl_FragColor = color;
47: }
48:
49: vec4 FLWLight(vec2 lightCoords) {
50: return texture2D(uLightMap, shiftLight(lightCoords));
51: }
52:
53:
54:
55: struct BlockFrag {
56: vec2 texCoords;
57: vec4 color;
58: float diffuse;
59: vec2 light;
60: };
61:
62: void FLWMain(BlockFrag r) {
63: vec4 tex = FLWBlockTexture(r.texCoords);
64:
65: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
66:
67: // flw_WorldPos = ;
68: // flw_Normal = ;
69: // flw_Albedo = tex.rgb;
70: // flw_Alpha = tex.a;
71: // flw_LightMap = r.light;
72: // flw_Tint = r.color;
73: FLWFinalizeColor(color);
74: }
75:
76: varying vec2 v2f_texCoords;
77: varying vec4 v2f_color;
78: varying float v2f_diffuse;
79: varying vec2 v2f_light;
80:
81:
82: //vec3 flw_WorldPos;
83: //vec3 flw_Normal;
84: //vec3 flw_Albedo;
85: //float flw_Alpha;
86: //vec2 flw_LightMap;
87: //vec4 flw_Tint;
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:44:29] [main/ERROR]: Shader compilation log for create:belt.vert: No errors.
[12:44:29] [main/ERROR]: Source for shader 'create:belt.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: #define PIOVER2 1.5707963268
29:
30: vec4 quat(vec3 axis, float angle) {
31: float halfAngle = angle * PIOVER2 / 180.0;
32: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
33: return vec4(axis.xyz * cs.y, cs.x);
34: }
35:
36: vec4 quatMult(vec4 q1, vec4 q2) {
37: // disgustingly vectorized quaternion multiplication
38: vec4 a = q1.w * q2.xyzw;
39: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
40: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
41: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
42:
43: return a + b + c + d;
44: }
45:
46: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
47: vec3 i = q.xyz;
48: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
49: }
50:
51: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
52: return rotateVertexByQuat(v, quat(axis, angle));
53: }
54:
55: mat4 rotate(vec3 axis, float angle) {
56: float s = sin(angle);
57: float c = cos(angle);
58: float oc = 1. - c;
59:
60: vec3 sa = axis * s;
61:
62: mat4 mr = mat4(1.);
63: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
64: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
65: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
66:
67: return mr;
68: }
69:
70: mat4 rotation(vec3 rot) {
71: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
72: }
73:
74: mat3 modelToNormal(mat4 mat) {
75: // Discard the edges. This won't be accurate for scaled or skewed matrices,
76: // but we don't have to work with those often.
77: mat3 m;
78: m[0] = mat[0].xyz;
79: m[1] = mat[1].xyz;
80: m[2] = mat[2].xyz;
81: return m;
82: }
83:
84: float diffuse(vec3 normal) {
85: vec3 n2 = normal * normal * vec3(.6, .25, .8);
86: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
87: }
88:
89:
90: struct Belt {
91: vec2 light;
92: vec4 color;
93: vec3 pos;
94: float speed;
95: float offset;
96: vec4 rotation;
97: vec2 sourceTexture;
98: vec4 scrollTexture;
99: float scrollMult;
100: };
101:
102:
103: struct Vertex {
104: vec3 pos;
105: vec3 normal;
106: vec2 texCoords;
107: };
108:
109: struct BlockFrag {
110: vec2 texCoords;
111: vec4 color;
112: float diffuse;
113: vec2 light;
114: };
115:
116: BlockFrag FLWMain(Vertex v, Belt instance) {
117: vec3 rotated = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5;
118:
119: vec4 worldPos = vec4(rotated, 1.);
120:
121: vec3 norm = rotateVertexByQuat(v.normal, instance.rotation);
122:
123: FLWFinalizeWorldPos(worldPos);
124: FLWFinalizeNormal(norm);
125:
126: float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y;
127: float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult;
128:
129: BlockFrag b;
130: b.diffuse = diffuse(norm);
131: b.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
132: b.light = instance.light;
133:
134: #if defined(DEBUG_RAINBOW)
135: b.color = instance.color;
136: #elif defined(DEBUG_NORMAL)
137: b.color = vec4(norm, 1.);
138: #else
139: b.color = vec4(1.);
140: #endif
141:
142: return b;
143: }
144: attribute vec3 a_v_pos;
145: attribute vec3 a_v_normal;
146: attribute vec2 a_v_texCoords;
147:
148: attribute vec2 a_i_light;
149: attribute vec4 a_i_color;
150: attribute vec3 a_i_pos;
151: attribute float a_i_speed;
152: attribute float a_i_offset;
153: attribute vec4 a_i_rotation;
154: attribute vec2 a_i_sourceTexture;
155: attribute vec4 a_i_scrollTexture;
156: attribute float a_i_scrollMult;
157:
158:
159: varying vec2 v2f_texCoords;
160: varying vec4 v2f_color;
161: varying float v2f_diffuse;
162: varying vec2 v2f_light;
163:
164:
165: void main() {
166: Vertex v;
167: v.pos = a_v_pos;
168: v.normal = a_v_normal;
169: v.texCoords = a_v_texCoords;
170:
171:
172: Belt i;
173: i.light = a_i_light;
174: i.color = a_i_color;
175: i.pos = a_i_pos;
176: i.speed = a_i_speed;
177: i.offset = a_i_offset;
178: i.rotation = a_i_rotation;
179: i.sourceTexture = a_i_sourceTexture;
180: i.scrollTexture = a_i_scrollTexture;
181: i.scrollMult = a_i_scrollMult;
182:
183:
184: BlockFrag o = FLWMain(v, i);
185:
186: v2f_texCoords = o.texCoords;
187: v2f_color = o.color;
188: v2f_diffuse = o.diffuse;
189: v2f_light = o.light;
190:
191: }
[12:44:30] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:30] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: uniform sampler2D uBlockAtlas;
32: uniform sampler2D uLightMap;
33:
34: vec4 FLWBlockTexture(vec2 texCoords) {
35: return texture2D(uBlockAtlas, texCoords);
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return texture2D(uLightMap, shiftLight(lightCoords));
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:44:35] [main/ERROR]: Shader compilation log for create:belt.vert: No errors.
[12:44:35] [main/ERROR]: Source for shader 'create:belt.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #define PI 3.1415926538
6:
7: uniform float uTime;
8: uniform mat4 uViewProjection;
9: uniform vec3 uCameraPos;
10:
11: #if defined(USE_FOG)
12: varying float FragDistance;
13: #endif
14:
15: void FLWFinalizeWorldPos(inout vec4 worldPos) {
16: #if defined(USE_FOG)
17: FragDistance = length(worldPos.xyz - uCameraPos);
18: #endif
19:
20: gl_Position = uViewProjection * worldPos;
21: }
22:
23: void FLWFinalizeNormal(inout vec3 normal) {
24: // noop
25: }
26:
27:
28: #define PIOVER2 1.5707963268
29:
30: vec4 quat(vec3 axis, float angle) {
31: float halfAngle = angle * PIOVER2 / 180.0;
32: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
33: return vec4(axis.xyz * cs.y, cs.x);
34: }
35:
36: vec4 quatMult(vec4 q1, vec4 q2) {
37: // disgustingly vectorized quaternion multiplication
38: vec4 a = q1.w * q2.xyzw;
39: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
40: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
41: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
42:
43: return a + b + c + d;
44: }
45:
46: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
47: vec3 i = q.xyz;
48: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
49: }
50:
51: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
52: return rotateVertexByQuat(v, quat(axis, angle));
53: }
54:
55: mat4 rotate(vec3 axis, float angle) {
56: float s = sin(angle);
57: float c = cos(angle);
58: float oc = 1. - c;
59:
60: vec3 sa = axis * s;
61:
62: mat4 mr = mat4(1.);
63: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
64: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
65: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
66:
67: return mr;
68: }
69:
70: mat4 rotation(vec3 rot) {
71: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
72: }
73:
74: mat3 modelToNormal(mat4 mat) {
75: // Discard the edges. This won't be accurate for scaled or skewed matrices,
76: // but we don't have to work with those often.
77: mat3 m;
78: m[0] = mat[0].xyz;
79: m[1] = mat[1].xyz;
80: m[2] = mat[2].xyz;
81: return m;
82: }
83:
84: float diffuse(vec3 normal) {
85: vec3 n2 = normal * normal * vec3(.6, .25, .8);
86: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
87: }
88:
89:
90: struct Belt {
91: vec2 light;
92: vec4 color;
93: vec3 pos;
94: float speed;
95: float offset;
96: vec4 rotation;
97: vec2 sourceTexture;
98: vec4 scrollTexture;
99: float scrollMult;
100: };
101:
102:
103: struct Vertex {
104: vec3 pos;
105: vec3 normal;
106: vec2 texCoords;
107: };
108:
109: struct BlockFrag {
110: vec2 texCoords;
111: vec4 color;
112: float diffuse;
113: vec2 light;
114: };
115:
116: BlockFrag FLWMain(Vertex v, Belt instance) {
117: vec3 rotated = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5;
118:
119: vec4 worldPos = vec4(rotated, 1.);
120:
121: vec3 norm = rotateVertexByQuat(v.normal, instance.rotation);
122:
123: FLWFinalizeWorldPos(worldPos);
124: FLWFinalizeNormal(norm);
125:
126: float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y;
127: float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult;
128:
129: BlockFrag b;
130: b.diffuse = diffuse(norm);
131: b.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
132: b.light = instance.light;
133:
134: #if defined(DEBUG_RAINBOW)
135: b.color = instance.color;
136: #elif defined(DEBUG_NORMAL)
137: b.color = vec4(norm, 1.);
138: #else
139: b.color = vec4(1.);
140: #endif
141:
142: return b;
143: }
144: attribute vec3 a_v_pos;
145: attribute vec3 a_v_normal;
146: attribute vec2 a_v_texCoords;
147:
148: attribute vec2 a_i_light;
149: attribute vec4 a_i_color;
150: attribute vec3 a_i_pos;
151: attribute float a_i_speed;
152: attribute float a_i_offset;
153: attribute vec4 a_i_rotation;
154: attribute vec2 a_i_sourceTexture;
155: attribute vec4 a_i_scrollTexture;
156: attribute float a_i_scrollMult;
157:
158:
159: varying vec2 v2f_texCoords;
160: varying vec4 v2f_color;
161: varying float v2f_diffuse;
162: varying vec2 v2f_light;
163:
164:
165: void main() {
166: Vertex v;
167: v.pos = a_v_pos;
168: v.normal = a_v_normal;
169: v.texCoords = a_v_texCoords;
170:
171:
172: Belt i;
173: i.light = a_i_light;
174: i.color = a_i_color;
175: i.pos = a_i_pos;
176: i.speed = a_i_speed;
177: i.offset = a_i_offset;
178: i.rotation = a_i_rotation;
179: i.sourceTexture = a_i_sourceTexture;
180: i.scrollTexture = a_i_scrollTexture;
181: i.scrollMult = a_i_scrollMult;
182:
183:
184: BlockFrag o = FLWMain(v, i);
185:
186: v2f_texCoords = o.texCoords;
187: v2f_color = o.color;
188: v2f_diffuse = o.diffuse;
189: v2f_light = o.light;
190:
191: }
[12:44:36] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:36] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: uniform sampler2D uBlockAtlas;
32: uniform sampler2D uLightMap;
33:
34: vec4 FLWBlockTexture(vec2 texCoords) {
35: return texture2D(uBlockAtlas, texCoords);
36: }
37:
38: void FLWFinalizeColor(vec4 color) {
39: #if defined(USE_FOG)
40: float a = color.a;
41: float fog = clamp(FLWFogFactor(), 0., 1.);
42:
43: color = mix(uFogColor, color, fog);
44: color.a = a;
45: #endif
46:
47: gl_FragColor = color;
48: }
49:
50: vec4 FLWLight(vec2 lightCoords) {
51: return texture2D(uLightMap, shiftLight(lightCoords));
52: }
53:
54:
55:
56: struct BlockFrag {
57: vec2 texCoords;
58: vec4 color;
59: float diffuse;
60: vec2 light;
61: };
62:
63: void FLWMain(BlockFrag r) {
64: vec4 tex = FLWBlockTexture(r.texCoords);
65:
66: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
67:
68: // flw_WorldPos = ;
69: // flw_Normal = ;
70: // flw_Albedo = tex.rgb;
71: // flw_Alpha = tex.a;
72: // flw_LightMap = r.light;
73: // flw_Tint = r.color;
74: FLWFinalizeColor(color);
75: }
76:
77: varying vec2 v2f_texCoords;
78: varying vec4 v2f_color;
79: varying float v2f_diffuse;
80: varying vec2 v2f_light;
81:
82:
83: //vec3 flw_WorldPos;
84: //vec3 flw_Normal;
85: //vec3 flw_Albedo;
86: //float flw_Alpha;
87: //vec2 flw_LightMap;
88: //vec4 flw_Tint;
89:
90: void main() {
91: BlockFrag f;
92: f.texCoords = v2f_texCoords;
93: f.color = v2f_color;
94: f.diffuse = v2f_diffuse;
95: f.light = v2f_light;
96:
97:
98: FLWMain(f);
99: }
[12:44:36] [main/ERROR]: Shader compilation log for create:belt.vert: No errors.
[12:44:36] [main/ERROR]: Source for shader 'create:belt.vert':
1: #version 110
2:
3: #define PI 3.1415926538
4:
5: uniform float uTime;
6: uniform mat4 uViewProjection;
7: uniform vec3 uCameraPos;
8:
9: #if defined(USE_FOG)
10: varying float FragDistance;
11: #endif
12:
13: void FLWFinalizeWorldPos(inout vec4 worldPos) {
14: #if defined(USE_FOG)
15: FragDistance = length(worldPos.xyz - uCameraPos);
16: #endif
17:
18: gl_Position = uViewProjection * worldPos;
19: }
20:
21: void FLWFinalizeNormal(inout vec3 normal) {
22: // noop
23: }
24:
25:
26: #define PIOVER2 1.5707963268
27:
28: vec4 quat(vec3 axis, float angle) {
29: float halfAngle = angle * PIOVER2 / 180.0;
30: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
31: return vec4(axis.xyz * cs.y, cs.x);
32: }
33:
34: vec4 quatMult(vec4 q1, vec4 q2) {
35: // disgustingly vectorized quaternion multiplication
36: vec4 a = q1.w * q2.xyzw;
37: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
38: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
39: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
40:
41: return a + b + c + d;
42: }
43:
44: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
45: vec3 i = q.xyz;
46: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
47: }
48:
49: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
50: return rotateVertexByQuat(v, quat(axis, angle));
51: }
52:
53: mat4 rotate(vec3 axis, float angle) {
54: float s = sin(angle);
55: float c = cos(angle);
56: float oc = 1. - c;
57:
58: vec3 sa = axis * s;
59:
60: mat4 mr = mat4(1.);
61: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
62: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
63: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
64:
65: return mr;
66: }
67:
68: mat4 rotation(vec3 rot) {
69: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
70: }
71:
72: mat3 modelToNormal(mat4 mat) {
73: // Discard the edges. This won't be accurate for scaled or skewed matrices,
74: // but we don't have to work with those often.
75: mat3 m;
76: m[0] = mat[0].xyz;
77: m[1] = mat[1].xyz;
78: m[2] = mat[2].xyz;
79: return m;
80: }
81:
82: float diffuse(vec3 normal) {
83: vec3 n2 = normal * normal * vec3(.6, .25, .8);
84: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
85: }
86:
87:
88: struct Belt {
89: vec2 light;
90: vec4 color;
91: vec3 pos;
92: float speed;
93: float offset;
94: vec4 rotation;
95: vec2 sourceTexture;
96: vec4 scrollTexture;
97: float scrollMult;
98: };
99:
100:
101: struct Vertex {
102: vec3 pos;
103: vec3 normal;
104: vec2 texCoords;
105: };
106:
107: struct BlockFrag {
108: vec2 texCoords;
109: vec4 color;
110: float diffuse;
111: vec2 light;
112: };
113:
114: BlockFrag FLWMain(Vertex v, Belt instance) {
115: vec3 rotated = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5;
116:
117: vec4 worldPos = vec4(rotated, 1.);
118:
119: vec3 norm = rotateVertexByQuat(v.normal, instance.rotation);
120:
121: FLWFinalizeWorldPos(worldPos);
122: FLWFinalizeNormal(norm);
123:
124: float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y;
125: float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult;
126:
127: BlockFrag b;
128: b.diffuse = diffuse(norm);
129: b.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
130: b.light = instance.light;
131:
132: #if defined(DEBUG_RAINBOW)
133: b.color = instance.color;
134: #elif defined(DEBUG_NORMAL)
135: b.color = vec4(norm, 1.);
136: #else
137: b.color = vec4(1.);
138: #endif
139:
140: return b;
141: }
142: attribute vec3 a_v_pos;
143: attribute vec3 a_v_normal;
144: attribute vec2 a_v_texCoords;
145:
146: attribute vec2 a_i_light;
147: attribute vec4 a_i_color;
148: attribute vec3 a_i_pos;
149: attribute float a_i_speed;
150: attribute float a_i_offset;
151: attribute vec4 a_i_rotation;
152: attribute vec2 a_i_sourceTexture;
153: attribute vec4 a_i_scrollTexture;
154: attribute float a_i_scrollMult;
155:
156:
157: varying vec2 v2f_texCoords;
158: varying vec4 v2f_color;
159: varying float v2f_diffuse;
160: varying vec2 v2f_light;
161:
162:
163: void main() {
164: Vertex v;
165: v.pos = a_v_pos;
166: v.normal = a_v_normal;
167: v.texCoords = a_v_texCoords;
168:
169:
170: Belt i;
171: i.light = a_i_light;
172: i.color = a_i_color;
173: i.pos = a_i_pos;
174: i.speed = a_i_speed;
175: i.offset = a_i_offset;
176: i.rotation = a_i_rotation;
177: i.sourceTexture = a_i_sourceTexture;
178: i.scrollTexture = a_i_scrollTexture;
179: i.scrollMult = a_i_scrollMult;
180:
181:
182: BlockFrag o = FLWMain(v, i);
183:
184: v2f_texCoords = o.texCoords;
185: v2f_color = o.color;
186: v2f_diffuse = o.diffuse;
187: v2f_light = o.light;
188:
189: }
[12:44:36] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:36] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
25: vec2 shiftLight(vec2 lm) {
26: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
27: }
28:
29: uniform sampler2D uBlockAtlas;
30: uniform sampler2D uLightMap;
31:
32: vec4 FLWBlockTexture(vec2 texCoords) {
33: return texture2D(uBlockAtlas, texCoords);
34: }
35:
36: void FLWFinalizeColor(vec4 color) {
37: #if defined(USE_FOG)
38: float a = color.a;
39: float fog = clamp(FLWFogFactor(), 0., 1.);
40:
41: color = mix(uFogColor, color, fog);
42: color.a = a;
43: #endif
44:
45: gl_FragColor = color;
46: }
47:
48: vec4 FLWLight(vec2 lightCoords) {
49: return texture2D(uLightMap, shiftLight(lightCoords));
50: }
51:
52:
53:
54: struct BlockFrag {
55: vec2 texCoords;
56: vec4 color;
57: float diffuse;
58: vec2 light;
59: };
60:
61: void FLWMain(BlockFrag r) {
62: vec4 tex = FLWBlockTexture(r.texCoords);
63:
64: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
65:
66: // flw_WorldPos = ;
67: // flw_Normal = ;
68: // flw_Albedo = tex.rgb;
69: // flw_Alpha = tex.a;
70: // flw_LightMap = r.light;
71: // flw_Tint = r.color;
72: FLWFinalizeColor(color);
73: }
74:
75: varying vec2 v2f_texCoords;
76: varying vec4 v2f_color;
77: varying float v2f_diffuse;
78: varying vec2 v2f_light;
79:
80:
81: //vec3 flw_WorldPos;
82: //vec3 flw_Normal;
83: //vec3 flw_Albedo;
84: //float flw_Alpha;
85: //vec2 flw_LightMap;
86: //vec4 flw_Tint;
87:
88: void main() {
89: BlockFrag f;
90: f.texCoords = v2f_texCoords;
91: f.color = v2f_color;
92: f.diffuse = v2f_diffuse;
93: f.light = v2f_light;
94:
95:
96: FLWMain(f);
97: }
[12:44:37] [main/INFO]: Loading context 'create:context/contraption'
[12:44:37] [main/ERROR]: Shader compilation log for create:rotating.vert: No errors.
[12:44:37] [main/ERROR]: Source for shader 'create:rotating.vert':
1: #version 110
2: #define DEBUG_RAINBOW
3:
4: #define PI 3.1415926538
5:
6: #if defined(USE_FOG)
7: varying float FragDistance;
8: #endif
9:
10: varying vec3 BoxCoord;
11:
12: uniform vec3 uLightBoxSize;
13: uniform vec3 uLightBoxMin;
14: uniform mat4 uModel;
15:
16: uniform float uTime;
17: uniform mat4 uViewProjection;
18: uniform vec3 uCameraPos;
19:
20: void FLWFinalizeWorldPos(inout vec4 worldPos) {
21: worldPos = uModel * worldPos;
22:
23: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
24:
25: #if defined(USE_FOG)
26: FragDistance = length(worldPos.xyz);
27: #endif
28:
29: gl_Position = uViewProjection * worldPos;
30: }
31:
32: void FLWFinalizeNormal(inout vec3 normal) {
33: mat3 m;
34: m[0] = uModel[0].xyz;
35: m[1] = uModel[1].xyz;
36: m[2] = uModel[2].xyz;
37: normal = m * normal;
38: }
39:
40:
41:
42: mat4 rotate(vec3 axis, float angle) {
43: float s = sin(angle);
44: float c = cos(angle);
45: float oc = 1. - c;
46:
47: vec3 sa = axis * s;
48:
49: mat4 mr = mat4(1.);
50: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
51: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
52: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
53:
54: return mr;
55: }
56:
57: mat4 rotation(vec3 rot) {
58: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
59: }
60:
61: mat3 modelToNormal(mat4 mat) {
62: // Discard the edges. This won't be accurate for scaled or skewed matrices,
63: // but we don't have to work with those often.
64: mat3 m;
65: m[0] = mat[0].xyz;
66: m[1] = mat[1].xyz;
67: m[2] = mat[2].xyz;
68: return m;
69: }
70:
71: float diffuse(vec3 normal) {
72: vec3 n2 = normal * normal * vec3(.6, .25, .8);
73: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
74: }
75:
76:
77: struct Rotating {
78: vec2 light;
79: vec4 color;
80: vec3 pos;
81: float speed;
82: float offset;
83: vec3 axis;
84: };
85:
86:
87: struct Vertex {
88: vec3 pos;
89: vec3 normal;
90: vec2 texCoords;
91: };
92:
93: struct BlockFrag {
94: vec2 texCoords;
95: vec4 color;
96: float diffuse;
97: vec2 light;
98: };
99:
100: mat4 kineticRotation(float offset, float speed, vec3 axis) {
101: float degrees = offset + uTime * speed * 3./10.;
102: float angle = fract(degrees / 360.) * PI * 2.;
103:
104: return rotate(axis, angle);
105: }
106:
107: BlockFrag FLWMain(Vertex v, Rotating instance) {
108: mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis);
109:
110: vec4 worldPos = spin * vec4(v.pos - .5, 1.);
111: worldPos += vec4(instance.pos + .5, 0.);
112:
113: vec3 norm = modelToNormal(spin) * v.normal;
114:
115: FLWFinalizeWorldPos(worldPos);
116: FLWFinalizeNormal(norm);
117:
118: BlockFrag b;
119: b.diffuse = diffuse(norm);
120: b.texCoords = v.texCoords;
121: b.light = instance.light;
122:
123: #if defined(DEBUG_RAINBOW)
124: b.color = instance.color;
125: #elif defined(DEBUG_NORMAL)
126: b.color = vec4(norm, 1.);
127: #else
128: b.color = vec4(1.);
129: #endif
130:
131: return b;
132: }
133: attribute vec3 a_v_pos;
134: attribute vec3 a_v_normal;
135: attribute vec2 a_v_texCoords;
136:
137: attribute vec2 a_i_light;
138: attribute vec4 a_i_color;
139: attribute vec3 a_i_pos;
140: attribute float a_i_speed;
141: attribute float a_i_offset;
142: attribute vec3 a_i_axis;
143:
144:
145: varying vec2 v2f_texCoords;
146: varying vec4 v2f_color;
147: varying float v2f_diffuse;
148: varying vec2 v2f_light;
149:
150:
151: void main() {
152: Vertex v;
153: v.pos = a_v_pos;
154: v.normal = a_v_normal;
155: v.texCoords = a_v_texCoords;
156:
157:
158: Rotating i;
159: i.light = a_i_light;
160: i.color = a_i_color;
161: i.pos = a_i_pos;
162: i.speed = a_i_speed;
163: i.offset = a_i_offset;
164: i.axis = a_i_axis;
165:
166:
167: BlockFrag o = FLWMain(v, i);
168:
169: v2f_texCoords = o.texCoords;
170: v2f_color = o.color;
171: v2f_diffuse = o.diffuse;
172: v2f_light = o.light;
173:
174: }
[12:44:37] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:37] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_RAINBOW
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: varying vec3 BoxCoord;
31: varying vec2 BoxLight;
32: uniform sampler3D uLightVolume;
33:
34: uniform sampler2D uBlockAtlas;
35: uniform sampler2D uLightMap;
36:
37: vec4 FLWBlockTexture(vec2 texCoords) {
38: return texture2D(uBlockAtlas, texCoords);
39: }
40:
41: void FLWFinalizeColor(vec4 color) {
42: #if defined(USE_FOG)
43: float a = color.a;
44: float fog = clamp(FLWFogFactor(), 0., 1.);
45:
46: color = mix(uFogColor, color, fog);
47: color.a = a;
48: #endif
49:
50: gl_FragColor = color;
51: }
52:
53: vec4 FLWLight(vec2 lightCoords) {
54: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
55:
56: return texture2D(uLightMap, shiftLight(lightCoords));
57: }
58:
59:
60:
61: struct BlockFrag {
62: vec2 texCoords;
63: vec4 color;
64: float diffuse;
65: vec2 light;
66: };
67:
68: void FLWMain(BlockFrag r) {
69: vec4 tex = FLWBlockTexture(r.texCoords);
70:
71: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
72:
73: // flw_WorldPos = ;
74: // flw_Normal = ;
75: // flw_Albedo = tex.rgb;
76: // flw_Alpha = tex.a;
77: // flw_LightMap = r.light;
78: // flw_Tint = r.color;
79: FLWFinalizeColor(color);
80: }
81:
82: varying vec2 v2f_texCoords;
83: varying vec4 v2f_color;
84: varying float v2f_diffuse;
85: varying vec2 v2f_light;
86:
87:
88: //vec3 flw_WorldPos;
89: //vec3 flw_Normal;
90: //vec3 flw_Albedo;
91: //float flw_Alpha;
92: //vec2 flw_LightMap;
93: //vec4 flw_Tint;
94:
95: void main() {
96: BlockFrag f;
97: f.texCoords = v2f_texCoords;
98: f.color = v2f_color;
99: f.diffuse = v2f_diffuse;
100: f.light = v2f_light;
101:
102:
103: FLWMain(f);
104: }
[12:44:37] [main/ERROR]: Shader compilation log for create:rotating.vert: No errors.
[12:44:37] [main/ERROR]: Source for shader 'create:rotating.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #define PI 3.1415926538
5:
6: #if defined(USE_FOG)
7: varying float FragDistance;
8: #endif
9:
10: varying vec3 BoxCoord;
11:
12: uniform vec3 uLightBoxSize;
13: uniform vec3 uLightBoxMin;
14: uniform mat4 uModel;
15:
16: uniform float uTime;
17: uniform mat4 uViewProjection;
18: uniform vec3 uCameraPos;
19:
20: void FLWFinalizeWorldPos(inout vec4 worldPos) {
21: worldPos = uModel * worldPos;
22:
23: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
24:
25: #if defined(USE_FOG)
26: FragDistance = length(worldPos.xyz);
27: #endif
28:
29: gl_Position = uViewProjection * worldPos;
30: }
31:
32: void FLWFinalizeNormal(inout vec3 normal) {
33: mat3 m;
34: m[0] = uModel[0].xyz;
35: m[1] = uModel[1].xyz;
36: m[2] = uModel[2].xyz;
37: normal = m * normal;
38: }
39:
40:
41:
42: mat4 rotate(vec3 axis, float angle) {
43: float s = sin(angle);
44: float c = cos(angle);
45: float oc = 1. - c;
46:
47: vec3 sa = axis * s;
48:
49: mat4 mr = mat4(1.);
50: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
51: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
52: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
53:
54: return mr;
55: }
56:
57: mat4 rotation(vec3 rot) {
58: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
59: }
60:
61: mat3 modelToNormal(mat4 mat) {
62: // Discard the edges. This won't be accurate for scaled or skewed matrices,
63: // but we don't have to work with those often.
64: mat3 m;
65: m[0] = mat[0].xyz;
66: m[1] = mat[1].xyz;
67: m[2] = mat[2].xyz;
68: return m;
69: }
70:
71: float diffuse(vec3 normal) {
72: vec3 n2 = normal * normal * vec3(.6, .25, .8);
73: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
74: }
75:
76:
77: struct Rotating {
78: vec2 light;
79: vec4 color;
80: vec3 pos;
81: float speed;
82: float offset;
83: vec3 axis;
84: };
85:
86:
87: struct Vertex {
88: vec3 pos;
89: vec3 normal;
90: vec2 texCoords;
91: };
92:
93: struct BlockFrag {
94: vec2 texCoords;
95: vec4 color;
96: float diffuse;
97: vec2 light;
98: };
99:
100: mat4 kineticRotation(float offset, float speed, vec3 axis) {
101: float degrees = offset + uTime * speed * 3./10.;
102: float angle = fract(degrees / 360.) * PI * 2.;
103:
104: return rotate(axis, angle);
105: }
106:
107: BlockFrag FLWMain(Vertex v, Rotating instance) {
108: mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis);
109:
110: vec4 worldPos = spin * vec4(v.pos - .5, 1.);
111: worldPos += vec4(instance.pos + .5, 0.);
112:
113: vec3 norm = modelToNormal(spin) * v.normal;
114:
115: FLWFinalizeWorldPos(worldPos);
116: FLWFinalizeNormal(norm);
117:
118: BlockFrag b;
119: b.diffuse = diffuse(norm);
120: b.texCoords = v.texCoords;
121: b.light = instance.light;
122:
123: #if defined(DEBUG_RAINBOW)
124: b.color = instance.color;
125: #elif defined(DEBUG_NORMAL)
126: b.color = vec4(norm, 1.);
127: #else
128: b.color = vec4(1.);
129: #endif
130:
131: return b;
132: }
133: attribute vec3 a_v_pos;
134: attribute vec3 a_v_normal;
135: attribute vec2 a_v_texCoords;
136:
137: attribute vec2 a_i_light;
138: attribute vec4 a_i_color;
139: attribute vec3 a_i_pos;
140: attribute float a_i_speed;
141: attribute float a_i_offset;
142: attribute vec3 a_i_axis;
143:
144:
145: varying vec2 v2f_texCoords;
146: varying vec4 v2f_color;
147: varying float v2f_diffuse;
148: varying vec2 v2f_light;
149:
150:
151: void main() {
152: Vertex v;
153: v.pos = a_v_pos;
154: v.normal = a_v_normal;
155: v.texCoords = a_v_texCoords;
156:
157:
158: Rotating i;
159: i.light = a_i_light;
160: i.color = a_i_color;
161: i.pos = a_i_pos;
162: i.speed = a_i_speed;
163: i.offset = a_i_offset;
164: i.axis = a_i_axis;
165:
166:
167: BlockFrag o = FLWMain(v, i);
168:
169: v2f_texCoords = o.texCoords;
170: v2f_color = o.color;
171: v2f_diffuse = o.diffuse;
172: v2f_light = o.light;
173:
174: }
[12:44:37] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:37] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: varying vec3 BoxCoord;
31: varying vec2 BoxLight;
32: uniform sampler3D uLightVolume;
33:
34: uniform sampler2D uBlockAtlas;
35: uniform sampler2D uLightMap;
36:
37: vec4 FLWBlockTexture(vec2 texCoords) {
38: return texture2D(uBlockAtlas, texCoords);
39: }
40:
41: void FLWFinalizeColor(vec4 color) {
42: #if defined(USE_FOG)
43: float a = color.a;
44: float fog = clamp(FLWFogFactor(), 0., 1.);
45:
46: color = mix(uFogColor, color, fog);
47: color.a = a;
48: #endif
49:
50: gl_FragColor = color;
51: }
52:
53: vec4 FLWLight(vec2 lightCoords) {
54: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
55:
56: return texture2D(uLightMap, shiftLight(lightCoords));
57: }
58:
59:
60:
61: struct BlockFrag {
62: vec2 texCoords;
63: vec4 color;
64: float diffuse;
65: vec2 light;
66: };
67:
68: void FLWMain(BlockFrag r) {
69: vec4 tex = FLWBlockTexture(r.texCoords);
70:
71: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
72:
73: // flw_WorldPos = ;
74: // flw_Normal = ;
75: // flw_Albedo = tex.rgb;
76: // flw_Alpha = tex.a;
77: // flw_LightMap = r.light;
78: // flw_Tint = r.color;
79: FLWFinalizeColor(color);
80: }
81:
82: varying vec2 v2f_texCoords;
83: varying vec4 v2f_color;
84: varying float v2f_diffuse;
85: varying vec2 v2f_light;
86:
87:
88: //vec3 flw_WorldPos;
89: //vec3 flw_Normal;
90: //vec3 flw_Albedo;
91: //float flw_Alpha;
92: //vec2 flw_LightMap;
93: //vec4 flw_Tint;
94:
95: void main() {
96: BlockFrag f;
97: f.texCoords = v2f_texCoords;
98: f.color = v2f_color;
99: f.diffuse = v2f_diffuse;
100: f.light = v2f_light;
101:
102:
103: FLWMain(f);
104: }
[12:44:37] [main/ERROR]: Shader compilation log for create:rotating.vert: No errors.
[12:44:37] [main/ERROR]: Source for shader 'create:rotating.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #define PI 3.1415926538
6:
7: #if defined(USE_FOG)
8: varying float FragDistance;
9: #endif
10:
11: varying vec3 BoxCoord;
12:
13: uniform vec3 uLightBoxSize;
14: uniform vec3 uLightBoxMin;
15: uniform mat4 uModel;
16:
17: uniform float uTime;
18: uniform mat4 uViewProjection;
19: uniform vec3 uCameraPos;
20:
21: void FLWFinalizeWorldPos(inout vec4 worldPos) {
22: worldPos = uModel * worldPos;
23:
24: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
25:
26: #if defined(USE_FOG)
27: FragDistance = length(worldPos.xyz);
28: #endif
29:
30: gl_Position = uViewProjection * worldPos;
31: }
32:
33: void FLWFinalizeNormal(inout vec3 normal) {
34: mat3 m;
35: m[0] = uModel[0].xyz;
36: m[1] = uModel[1].xyz;
37: m[2] = uModel[2].xyz;
38: normal = m * normal;
39: }
40:
41:
42:
43: mat4 rotate(vec3 axis, float angle) {
44: float s = sin(angle);
45: float c = cos(angle);
46: float oc = 1. - c;
47:
48: vec3 sa = axis * s;
49:
50: mat4 mr = mat4(1.);
51: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
52: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
53: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
54:
55: return mr;
56: }
57:
58: mat4 rotation(vec3 rot) {
59: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
60: }
61:
62: mat3 modelToNormal(mat4 mat) {
63: // Discard the edges. This won't be accurate for scaled or skewed matrices,
64: // but we don't have to work with those often.
65: mat3 m;
66: m[0] = mat[0].xyz;
67: m[1] = mat[1].xyz;
68: m[2] = mat[2].xyz;
69: return m;
70: }
71:
72: float diffuse(vec3 normal) {
73: vec3 n2 = normal * normal * vec3(.6, .25, .8);
74: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
75: }
76:
77:
78: struct Rotating {
79: vec2 light;
80: vec4 color;
81: vec3 pos;
82: float speed;
83: float offset;
84: vec3 axis;
85: };
86:
87:
88: struct Vertex {
89: vec3 pos;
90: vec3 normal;
91: vec2 texCoords;
92: };
93:
94: struct BlockFrag {
95: vec2 texCoords;
96: vec4 color;
97: float diffuse;
98: vec2 light;
99: };
100:
101: mat4 kineticRotation(float offset, float speed, vec3 axis) {
102: float degrees = offset + uTime * speed * 3./10.;
103: float angle = fract(degrees / 360.) * PI * 2.;
104:
105: return rotate(axis, angle);
106: }
107:
108: BlockFrag FLWMain(Vertex v, Rotating instance) {
109: mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis);
110:
111: vec4 worldPos = spin * vec4(v.pos - .5, 1.);
112: worldPos += vec4(instance.pos + .5, 0.);
113:
114: vec3 norm = modelToNormal(spin) * v.normal;
115:
116: FLWFinalizeWorldPos(worldPos);
117: FLWFinalizeNormal(norm);
118:
119: BlockFrag b;
120: b.diffuse = diffuse(norm);
121: b.texCoords = v.texCoords;
122: b.light = instance.light;
123:
124: #if defined(DEBUG_RAINBOW)
125: b.color = instance.color;
126: #elif defined(DEBUG_NORMAL)
127: b.color = vec4(norm, 1.);
128: #else
129: b.color = vec4(1.);
130: #endif
131:
132: return b;
133: }
134: attribute vec3 a_v_pos;
135: attribute vec3 a_v_normal;
136: attribute vec2 a_v_texCoords;
137:
138: attribute vec2 a_i_light;
139: attribute vec4 a_i_color;
140: attribute vec3 a_i_pos;
141: attribute float a_i_speed;
142: attribute float a_i_offset;
143: attribute vec3 a_i_axis;
144:
145:
146: varying vec2 v2f_texCoords;
147: varying vec4 v2f_color;
148: varying float v2f_diffuse;
149: varying vec2 v2f_light;
150:
151:
152: void main() {
153: Vertex v;
154: v.pos = a_v_pos;
155: v.normal = a_v_normal;
156: v.texCoords = a_v_texCoords;
157:
158:
159: Rotating i;
160: i.light = a_i_light;
161: i.color = a_i_color;
162: i.pos = a_i_pos;
163: i.speed = a_i_speed;
164: i.offset = a_i_offset;
165: i.axis = a_i_axis;
166:
167:
168: BlockFrag o = FLWMain(v, i);
169:
170: v2f_texCoords = o.texCoords;
171: v2f_color = o.color;
172: v2f_diffuse = o.diffuse;
173: v2f_light = o.light;
174:
175: }
[12:44:37] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:37] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: varying vec3 BoxCoord;
32: varying vec2 BoxLight;
33: uniform sampler3D uLightVolume;
34:
35: uniform sampler2D uBlockAtlas;
36: uniform sampler2D uLightMap;
37:
38: vec4 FLWBlockTexture(vec2 texCoords) {
39: return texture2D(uBlockAtlas, texCoords);
40: }
41:
42: void FLWFinalizeColor(vec4 color) {
43: #if defined(USE_FOG)
44: float a = color.a;
45: float fog = clamp(FLWFogFactor(), 0., 1.);
46:
47: color = mix(uFogColor, color, fog);
48: color.a = a;
49: #endif
50:
51: gl_FragColor = color;
52: }
53:
54: vec4 FLWLight(vec2 lightCoords) {
55: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
56:
57: return texture2D(uLightMap, shiftLight(lightCoords));
58: }
59:
60:
61:
62: struct BlockFrag {
63: vec2 texCoords;
64: vec4 color;
65: float diffuse;
66: vec2 light;
67: };
68:
69: void FLWMain(BlockFrag r) {
70: vec4 tex = FLWBlockTexture(r.texCoords);
71:
72: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
73:
74: // flw_WorldPos = ;
75: // flw_Normal = ;
76: // flw_Albedo = tex.rgb;
77: // flw_Alpha = tex.a;
78: // flw_LightMap = r.light;
79: // flw_Tint = r.color;
80: FLWFinalizeColor(color);
81: }
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: //vec3 flw_WorldPos;
90: //vec3 flw_Normal;
91: //vec3 flw_Albedo;
92: //float flw_Alpha;
93: //vec2 flw_LightMap;
94: //vec4 flw_Tint;
95:
96: void main() {
97: BlockFrag f;
98: f.texCoords = v2f_texCoords;
99: f.color = v2f_color;
100: f.diffuse = v2f_diffuse;
101: f.light = v2f_light;
102:
103:
104: FLWMain(f);
105: }
[12:44:37] [main/ERROR]: Shader compilation log for create:rotating.vert: No errors.
[12:44:37] [main/ERROR]: Source for shader 'create:rotating.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #define PI 3.1415926538
6:
7: #if defined(USE_FOG)
8: varying float FragDistance;
9: #endif
10:
11: varying vec3 BoxCoord;
12:
13: uniform vec3 uLightBoxSize;
14: uniform vec3 uLightBoxMin;
15: uniform mat4 uModel;
16:
17: uniform float uTime;
18: uniform mat4 uViewProjection;
19: uniform vec3 uCameraPos;
20:
21: void FLWFinalizeWorldPos(inout vec4 worldPos) {
22: worldPos = uModel * worldPos;
23:
24: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
25:
26: #if defined(USE_FOG)
27: FragDistance = length(worldPos.xyz);
28: #endif
29:
30: gl_Position = uViewProjection * worldPos;
31: }
32:
33: void FLWFinalizeNormal(inout vec3 normal) {
34: mat3 m;
35: m[0] = uModel[0].xyz;
36: m[1] = uModel[1].xyz;
37: m[2] = uModel[2].xyz;
38: normal = m * normal;
39: }
40:
41:
42:
43: mat4 rotate(vec3 axis, float angle) {
44: float s = sin(angle);
45: float c = cos(angle);
46: float oc = 1. - c;
47:
48: vec3 sa = axis * s;
49:
50: mat4 mr = mat4(1.);
51: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
52: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
53: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
54:
55: return mr;
56: }
57:
58: mat4 rotation(vec3 rot) {
59: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
60: }
61:
62: mat3 modelToNormal(mat4 mat) {
63: // Discard the edges. This won't be accurate for scaled or skewed matrices,
64: // but we don't have to work with those often.
65: mat3 m;
66: m[0] = mat[0].xyz;
67: m[1] = mat[1].xyz;
68: m[2] = mat[2].xyz;
69: return m;
70: }
71:
72: float diffuse(vec3 normal) {
73: vec3 n2 = normal * normal * vec3(.6, .25, .8);
74: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
75: }
76:
77:
78: struct Rotating {
79: vec2 light;
80: vec4 color;
81: vec3 pos;
82: float speed;
83: float offset;
84: vec3 axis;
85: };
86:
87:
88: struct Vertex {
89: vec3 pos;
90: vec3 normal;
91: vec2 texCoords;
92: };
93:
94: struct BlockFrag {
95: vec2 texCoords;
96: vec4 color;
97: float diffuse;
98: vec2 light;
99: };
100:
101: mat4 kineticRotation(float offset, float speed, vec3 axis) {
102: float degrees = offset + uTime * speed * 3./10.;
103: float angle = fract(degrees / 360.) * PI * 2.;
104:
105: return rotate(axis, angle);
106: }
107:
108: BlockFrag FLWMain(Vertex v, Rotating instance) {
109: mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis);
110:
111: vec4 worldPos = spin * vec4(v.pos - .5, 1.);
112: worldPos += vec4(instance.pos + .5, 0.);
113:
114: vec3 norm = modelToNormal(spin) * v.normal;
115:
116: FLWFinalizeWorldPos(worldPos);
117: FLWFinalizeNormal(norm);
118:
119: BlockFrag b;
120: b.diffuse = diffuse(norm);
121: b.texCoords = v.texCoords;
122: b.light = instance.light;
123:
124: #if defined(DEBUG_RAINBOW)
125: b.color = instance.color;
126: #elif defined(DEBUG_NORMAL)
127: b.color = vec4(norm, 1.);
128: #else
129: b.color = vec4(1.);
130: #endif
131:
132: return b;
133: }
134: attribute vec3 a_v_pos;
135: attribute vec3 a_v_normal;
136: attribute vec2 a_v_texCoords;
137:
138: attribute vec2 a_i_light;
139: attribute vec4 a_i_color;
140: attribute vec3 a_i_pos;
141: attribute float a_i_speed;
142: attribute float a_i_offset;
143: attribute vec3 a_i_axis;
144:
145:
146: varying vec2 v2f_texCoords;
147: varying vec4 v2f_color;
148: varying float v2f_diffuse;
149: varying vec2 v2f_light;
150:
151:
152: void main() {
153: Vertex v;
154: v.pos = a_v_pos;
155: v.normal = a_v_normal;
156: v.texCoords = a_v_texCoords;
157:
158:
159: Rotating i;
160: i.light = a_i_light;
161: i.color = a_i_color;
162: i.pos = a_i_pos;
163: i.speed = a_i_speed;
164: i.offset = a_i_offset;
165: i.axis = a_i_axis;
166:
167:
168: BlockFrag o = FLWMain(v, i);
169:
170: v2f_texCoords = o.texCoords;
171: v2f_color = o.color;
172: v2f_diffuse = o.diffuse;
173: v2f_light = o.light;
174:
175: }
[12:44:37] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:37] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: varying vec3 BoxCoord;
32: varying vec2 BoxLight;
33: uniform sampler3D uLightVolume;
34:
35: uniform sampler2D uBlockAtlas;
36: uniform sampler2D uLightMap;
37:
38: vec4 FLWBlockTexture(vec2 texCoords) {
39: return texture2D(uBlockAtlas, texCoords);
40: }
41:
42: void FLWFinalizeColor(vec4 color) {
43: #if defined(USE_FOG)
44: float a = color.a;
45: float fog = clamp(FLWFogFactor(), 0., 1.);
46:
47: color = mix(uFogColor, color, fog);
48: color.a = a;
49: #endif
50:
51: gl_FragColor = color;
52: }
53:
54: vec4 FLWLight(vec2 lightCoords) {
55: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
56:
57: return texture2D(uLightMap, shiftLight(lightCoords));
58: }
59:
60:
61:
62: struct BlockFrag {
63: vec2 texCoords;
64: vec4 color;
65: float diffuse;
66: vec2 light;
67: };
68:
69: void FLWMain(BlockFrag r) {
70: vec4 tex = FLWBlockTexture(r.texCoords);
71:
72: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
73:
74: // flw_WorldPos = ;
75: // flw_Normal = ;
76: // flw_Albedo = tex.rgb;
77: // flw_Alpha = tex.a;
78: // flw_LightMap = r.light;
79: // flw_Tint = r.color;
80: FLWFinalizeColor(color);
81: }
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: //vec3 flw_WorldPos;
90: //vec3 flw_Normal;
91: //vec3 flw_Albedo;
92: //float flw_Alpha;
93: //vec2 flw_LightMap;
94: //vec4 flw_Tint;
95:
96: void main() {
97: BlockFrag f;
98: f.texCoords = v2f_texCoords;
99: f.color = v2f_color;
100: f.diffuse = v2f_diffuse;
101: f.light = v2f_light;
102:
103:
104: FLWMain(f);
105: }
[12:44:38] [main/ERROR]: Shader compilation log for create:rotating.vert: No errors.
[12:44:38] [main/ERROR]: Source for shader 'create:rotating.vert':
1: #version 110
2:
3: #define PI 3.1415926538
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: #endif
8:
9: varying vec3 BoxCoord;
10:
11: uniform vec3 uLightBoxSize;
12: uniform vec3 uLightBoxMin;
13: uniform mat4 uModel;
14:
15: uniform float uTime;
16: uniform mat4 uViewProjection;
17: uniform vec3 uCameraPos;
18:
19: void FLWFinalizeWorldPos(inout vec4 worldPos) {
20: worldPos = uModel * worldPos;
21:
22: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
23:
24: #if defined(USE_FOG)
25: FragDistance = length(worldPos.xyz);
26: #endif
27:
28: gl_Position = uViewProjection * worldPos;
29: }
30:
31: void FLWFinalizeNormal(inout vec3 normal) {
32: mat3 m;
33: m[0] = uModel[0].xyz;
34: m[1] = uModel[1].xyz;
35: m[2] = uModel[2].xyz;
36: normal = m * normal;
37: }
38:
39:
40:
41: mat4 rotate(vec3 axis, float angle) {
42: float s = sin(angle);
43: float c = cos(angle);
44: float oc = 1. - c;
45:
46: vec3 sa = axis * s;
47:
48: mat4 mr = mat4(1.);
49: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
50: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
51: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
52:
53: return mr;
54: }
55:
56: mat4 rotation(vec3 rot) {
57: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
58: }
59:
60: mat3 modelToNormal(mat4 mat) {
61: // Discard the edges. This won't be accurate for scaled or skewed matrices,
62: // but we don't have to work with those often.
63: mat3 m;
64: m[0] = mat[0].xyz;
65: m[1] = mat[1].xyz;
66: m[2] = mat[2].xyz;
67: return m;
68: }
69:
70: float diffuse(vec3 normal) {
71: vec3 n2 = normal * normal * vec3(.6, .25, .8);
72: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
73: }
74:
75:
76: struct Rotating {
77: vec2 light;
78: vec4 color;
79: vec3 pos;
80: float speed;
81: float offset;
82: vec3 axis;
83: };
84:
85:
86: struct Vertex {
87: vec3 pos;
88: vec3 normal;
89: vec2 texCoords;
90: };
91:
92: struct BlockFrag {
93: vec2 texCoords;
94: vec4 color;
95: float diffuse;
96: vec2 light;
97: };
98:
99: mat4 kineticRotation(float offset, float speed, vec3 axis) {
100: float degrees = offset + uTime * speed * 3./10.;
101: float angle = fract(degrees / 360.) * PI * 2.;
102:
103: return rotate(axis, angle);
104: }
105:
106: BlockFrag FLWMain(Vertex v, Rotating instance) {
107: mat4 spin = kineticRotation(instance.offset, instance.speed, instance.axis);
108:
109: vec4 worldPos = spin * vec4(v.pos - .5, 1.);
110: worldPos += vec4(instance.pos + .5, 0.);
111:
112: vec3 norm = modelToNormal(spin) * v.normal;
113:
114: FLWFinalizeWorldPos(worldPos);
115: FLWFinalizeNormal(norm);
116:
117: BlockFrag b;
118: b.diffuse = diffuse(norm);
119: b.texCoords = v.texCoords;
120: b.light = instance.light;
121:
122: #if defined(DEBUG_RAINBOW)
123: b.color = instance.color;
124: #elif defined(DEBUG_NORMAL)
125: b.color = vec4(norm, 1.);
126: #else
127: b.color = vec4(1.);
128: #endif
129:
130: return b;
131: }
132: attribute vec3 a_v_pos;
133: attribute vec3 a_v_normal;
134: attribute vec2 a_v_texCoords;
135:
136: attribute vec2 a_i_light;
137: attribute vec4 a_i_color;
138: attribute vec3 a_i_pos;
139: attribute float a_i_speed;
140: attribute float a_i_offset;
141: attribute vec3 a_i_axis;
142:
143:
144: varying vec2 v2f_texCoords;
145: varying vec4 v2f_color;
146: varying float v2f_diffuse;
147: varying vec2 v2f_light;
148:
149:
150: void main() {
151: Vertex v;
152: v.pos = a_v_pos;
153: v.normal = a_v_normal;
154: v.texCoords = a_v_texCoords;
155:
156:
157: Rotating i;
158: i.light = a_i_light;
159: i.color = a_i_color;
160: i.pos = a_i_pos;
161: i.speed = a_i_speed;
162: i.offset = a_i_offset;
163: i.axis = a_i_axis;
164:
165:
166: BlockFrag o = FLWMain(v, i);
167:
168: v2f_texCoords = o.texCoords;
169: v2f_color = o.color;
170: v2f_diffuse = o.diffuse;
171: v2f_light = o.light;
172:
173: }
[12:44:38] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:38] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
25: vec2 shiftLight(vec2 lm) {
26: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
27: }
28:
29: varying vec3 BoxCoord;
30: varying vec2 BoxLight;
31: uniform sampler3D uLightVolume;
32:
33: uniform sampler2D uBlockAtlas;
34: uniform sampler2D uLightMap;
35:
36: vec4 FLWBlockTexture(vec2 texCoords) {
37: return texture2D(uBlockAtlas, texCoords);
38: }
39:
40: void FLWFinalizeColor(vec4 color) {
41: #if defined(USE_FOG)
42: float a = color.a;
43: float fog = clamp(FLWFogFactor(), 0., 1.);
44:
45: color = mix(uFogColor, color, fog);
46: color.a = a;
47: #endif
48:
49: gl_FragColor = color;
50: }
51:
52: vec4 FLWLight(vec2 lightCoords) {
53: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
54:
55: return texture2D(uLightMap, shiftLight(lightCoords));
56: }
57:
58:
59:
60: struct BlockFrag {
61: vec2 texCoords;
62: vec4 color;
63: float diffuse;
64: vec2 light;
65: };
66:
67: void FLWMain(BlockFrag r) {
68: vec4 tex = FLWBlockTexture(r.texCoords);
69:
70: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
71:
72: // flw_WorldPos = ;
73: // flw_Normal = ;
74: // flw_Albedo = tex.rgb;
75: // flw_Alpha = tex.a;
76: // flw_LightMap = r.light;
77: // flw_Tint = r.color;
78: FLWFinalizeColor(color);
79: }
80:
81: varying vec2 v2f_texCoords;
82: varying vec4 v2f_color;
83: varying float v2f_diffuse;
84: varying vec2 v2f_light;
85:
86:
87: //vec3 flw_WorldPos;
88: //vec3 flw_Normal;
89: //vec3 flw_Albedo;
90: //float flw_Alpha;
91: //vec2 flw_LightMap;
92: //vec4 flw_Tint;
93:
94: void main() {
95: BlockFrag f;
96: f.texCoords = v2f_texCoords;
97: f.color = v2f_color;
98: f.diffuse = v2f_diffuse;
99: f.light = v2f_light;
100:
101:
102: FLWMain(f);
103: }
[12:44:38] [main/ERROR]: Shader compilation log for create:contraption_actor.vert: No errors.
[12:44:38] [main/ERROR]: Source for shader 'create:contraption_actor.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #define PI 3.1415926538
5:
6: #if defined(USE_FOG)
7: varying float FragDistance;
8: #endif
9:
10: varying vec3 BoxCoord;
11:
12: uniform vec3 uLightBoxSize;
13: uniform vec3 uLightBoxMin;
14: uniform mat4 uModel;
15:
16: uniform float uTime;
17: uniform mat4 uViewProjection;
18: uniform vec3 uCameraPos;
19:
20: void FLWFinalizeWorldPos(inout vec4 worldPos) {
21: worldPos = uModel * worldPos;
22:
23: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
24:
25: #if defined(USE_FOG)
26: FragDistance = length(worldPos.xyz);
27: #endif
28:
29: gl_Position = uViewProjection * worldPos;
30: }
31:
32: void FLWFinalizeNormal(inout vec3 normal) {
33: mat3 m;
34: m[0] = uModel[0].xyz;
35: m[1] = uModel[1].xyz;
36: m[2] = uModel[2].xyz;
37: normal = m * normal;
38: }
39:
40:
41:
42: mat4 rotate(vec3 axis, float angle) {
43: float s = sin(angle);
44: float c = cos(angle);
45: float oc = 1. - c;
46:
47: vec3 sa = axis * s;
48:
49: mat4 mr = mat4(1.);
50: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
51: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
52: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
53:
54: return mr;
55: }
56:
57: mat4 rotation(vec3 rot) {
58: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
59: }
60:
61: mat3 modelToNormal(mat4 mat) {
62: // Discard the edges. This won't be accurate for scaled or skewed matrices,
63: // but we don't have to work with those often.
64: mat3 m;
65: m[0] = mat[0].xyz;
66: m[1] = mat[1].xyz;
67: m[2] = mat[2].xyz;
68: return m;
69: }
70:
71: #define PIOVER2 1.5707963268
72:
73: vec4 quat(vec3 axis, float angle) {
74: float halfAngle = angle * PIOVER2 / 180.0;
75: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
76: return vec4(axis.xyz * cs.y, cs.x);
77: }
78:
79: vec4 quatMult(vec4 q1, vec4 q2) {
80: // disgustingly vectorized quaternion multiplication
81: vec4 a = q1.w * q2.xyzw;
82: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
83: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
84: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
85:
86: return a + b + c + d;
87: }
88:
89: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
90: vec3 i = q.xyz;
91: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
92: }
93:
94: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
95: return rotateVertexByQuat(v, quat(axis, angle));
96: }
97:
98: float diffuse(vec3 normal) {
99: vec3 n2 = normal * normal * vec3(.6, .25, .8);
100: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
101: }
102:
103:
104: struct Actor {
105: vec3 pos;
106: vec2 light;
107: float offset;
108: vec3 axis;
109: vec4 rotation;
110: vec3 rotationCenter;
111: float speed;
112: };
113:
114:
115: struct Vertex {
116: vec3 pos;
117: vec3 normal;
118: vec2 texCoords;
119: };
120:
121: struct BlockFrag {
122: vec2 texCoords;
123: vec4 color;
124: float diffuse;
125: vec2 light;
126: };
127:
128: BlockFrag FLWMain(Vertex v, Actor instance) {
129: float degrees = instance.offset + uTime * instance.speed / 20.;
130: //float angle = fract(degrees / 360.) * PI * 2.;
131:
132: vec4 kineticRot = quat(instance.axis, degrees);
133: vec3 rotated = rotateVertexByQuat(v.pos - instance.rotationCenter, kineticRot) + instance.rotationCenter;
134:
135: vec4 worldPos = vec4(rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5, 1.);
136: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, kineticRot), instance.rotation);
137:
138: FLWFinalizeWorldPos(worldPos);
139: FLWFinalizeNormal(norm);
140:
141: BlockFrag b;
142: b.diffuse = diffuse(norm);
143: b.texCoords = v.texCoords;
144: b.light = instance.light;
145:
146: #if defined(DEBUG_NORMAL)
147: b.color = vec4(norm, 1.);
148: #else
149: b.color = vec4(1.);
150: #endif
151:
152: return b;
153: }
154: attribute vec3 a_v_pos;
155: attribute vec3 a_v_normal;
156: attribute vec2 a_v_texCoords;
157:
158: attribute vec3 a_i_pos;
159: attribute vec2 a_i_light;
160: attribute float a_i_offset;
161: attribute vec3 a_i_axis;
162: attribute vec4 a_i_rotation;
163: attribute vec3 a_i_rotationCenter;
164: attribute float a_i_speed;
165:
166:
167: varying vec2 v2f_texCoords;
168: varying vec4 v2f_color;
169: varying float v2f_diffuse;
170: varying vec2 v2f_light;
171:
172:
173: void main() {
174: Vertex v;
175: v.pos = a_v_pos;
176: v.normal = a_v_normal;
177: v.texCoords = a_v_texCoords;
178:
179:
180: Actor i;
181: i.pos = a_i_pos;
182: i.light = a_i_light;
183: i.offset = a_i_offset;
184: i.axis = a_i_axis;
185: i.rotation = a_i_rotation;
186: i.rotationCenter = a_i_rotationCenter;
187: i.speed = a_i_speed;
188:
189:
190: BlockFrag o = FLWMain(v, i);
191:
192: v2f_texCoords = o.texCoords;
193: v2f_color = o.color;
194: v2f_diffuse = o.diffuse;
195: v2f_light = o.light;
196:
197: }
[12:44:38] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:38] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: varying vec3 BoxCoord;
31: varying vec2 BoxLight;
32: uniform sampler3D uLightVolume;
33:
34: uniform sampler2D uBlockAtlas;
35: uniform sampler2D uLightMap;
36:
37: vec4 FLWBlockTexture(vec2 texCoords) {
38: return texture2D(uBlockAtlas, texCoords);
39: }
40:
41: void FLWFinalizeColor(vec4 color) {
42: #if defined(USE_FOG)
43: float a = color.a;
44: float fog = clamp(FLWFogFactor(), 0., 1.);
45:
46: color = mix(uFogColor, color, fog);
47: color.a = a;
48: #endif
49:
50: gl_FragColor = color;
51: }
52:
53: vec4 FLWLight(vec2 lightCoords) {
54: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
55:
56: return texture2D(uLightMap, shiftLight(lightCoords));
57: }
58:
59:
60:
61: struct BlockFrag {
62: vec2 texCoords;
63: vec4 color;
64: float diffuse;
65: vec2 light;
66: };
67:
68: void FLWMain(BlockFrag r) {
69: vec4 tex = FLWBlockTexture(r.texCoords);
70:
71: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
72:
73: // flw_WorldPos = ;
74: // flw_Normal = ;
75: // flw_Albedo = tex.rgb;
76: // flw_Alpha = tex.a;
77: // flw_LightMap = r.light;
78: // flw_Tint = r.color;
79: FLWFinalizeColor(color);
80: }
81:
82: varying vec2 v2f_texCoords;
83: varying vec4 v2f_color;
84: varying float v2f_diffuse;
85: varying vec2 v2f_light;
86:
87:
88: //vec3 flw_WorldPos;
89: //vec3 flw_Normal;
90: //vec3 flw_Albedo;
91: //float flw_Alpha;
92: //vec2 flw_LightMap;
93: //vec4 flw_Tint;
94:
95: void main() {
96: BlockFrag f;
97: f.texCoords = v2f_texCoords;
98: f.color = v2f_color;
99: f.diffuse = v2f_diffuse;
100: f.light = v2f_light;
101:
102:
103: FLWMain(f);
104: }
[12:44:38] [main/ERROR]: Shader compilation log for create:contraption_actor.vert: No errors.
[12:44:38] [main/ERROR]: Source for shader 'create:contraption_actor.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #define PI 3.1415926538
6:
7: #if defined(USE_FOG)
8: varying float FragDistance;
9: #endif
10:
11: varying vec3 BoxCoord;
12:
13: uniform vec3 uLightBoxSize;
14: uniform vec3 uLightBoxMin;
15: uniform mat4 uModel;
16:
17: uniform float uTime;
18: uniform mat4 uViewProjection;
19: uniform vec3 uCameraPos;
20:
21: void FLWFinalizeWorldPos(inout vec4 worldPos) {
22: worldPos = uModel * worldPos;
23:
24: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
25:
26: #if defined(USE_FOG)
27: FragDistance = length(worldPos.xyz);
28: #endif
29:
30: gl_Position = uViewProjection * worldPos;
31: }
32:
33: void FLWFinalizeNormal(inout vec3 normal) {
34: mat3 m;
35: m[0] = uModel[0].xyz;
36: m[1] = uModel[1].xyz;
37: m[2] = uModel[2].xyz;
38: normal = m * normal;
39: }
40:
41:
42:
43: mat4 rotate(vec3 axis, float angle) {
44: float s = sin(angle);
45: float c = cos(angle);
46: float oc = 1. - c;
47:
48: vec3 sa = axis * s;
49:
50: mat4 mr = mat4(1.);
51: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
52: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
53: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
54:
55: return mr;
56: }
57:
58: mat4 rotation(vec3 rot) {
59: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
60: }
61:
62: mat3 modelToNormal(mat4 mat) {
63: // Discard the edges. This won't be accurate for scaled or skewed matrices,
64: // but we don't have to work with those often.
65: mat3 m;
66: m[0] = mat[0].xyz;
67: m[1] = mat[1].xyz;
68: m[2] = mat[2].xyz;
69: return m;
70: }
71:
72: #define PIOVER2 1.5707963268
73:
74: vec4 quat(vec3 axis, float angle) {
75: float halfAngle = angle * PIOVER2 / 180.0;
76: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
77: return vec4(axis.xyz * cs.y, cs.x);
78: }
79:
80: vec4 quatMult(vec4 q1, vec4 q2) {
81: // disgustingly vectorized quaternion multiplication
82: vec4 a = q1.w * q2.xyzw;
83: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
84: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
85: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
86:
87: return a + b + c + d;
88: }
89:
90: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
91: vec3 i = q.xyz;
92: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
93: }
94:
95: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
96: return rotateVertexByQuat(v, quat(axis, angle));
97: }
98:
99: float diffuse(vec3 normal) {
100: vec3 n2 = normal * normal * vec3(.6, .25, .8);
101: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
102: }
103:
104:
105: struct Actor {
106: vec3 pos;
107: vec2 light;
108: float offset;
109: vec3 axis;
110: vec4 rotation;
111: vec3 rotationCenter;
112: float speed;
113: };
114:
115:
116: struct Vertex {
117: vec3 pos;
118: vec3 normal;
119: vec2 texCoords;
120: };
121:
122: struct BlockFrag {
123: vec2 texCoords;
124: vec4 color;
125: float diffuse;
126: vec2 light;
127: };
128:
129: BlockFrag FLWMain(Vertex v, Actor instance) {
130: float degrees = instance.offset + uTime * instance.speed / 20.;
131: //float angle = fract(degrees / 360.) * PI * 2.;
132:
133: vec4 kineticRot = quat(instance.axis, degrees);
134: vec3 rotated = rotateVertexByQuat(v.pos - instance.rotationCenter, kineticRot) + instance.rotationCenter;
135:
136: vec4 worldPos = vec4(rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5, 1.);
137: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, kineticRot), instance.rotation);
138:
139: FLWFinalizeWorldPos(worldPos);
140: FLWFinalizeNormal(norm);
141:
142: BlockFrag b;
143: b.diffuse = diffuse(norm);
144: b.texCoords = v.texCoords;
145: b.light = instance.light;
146:
147: #if defined(DEBUG_NORMAL)
148: b.color = vec4(norm, 1.);
149: #else
150: b.color = vec4(1.);
151: #endif
152:
153: return b;
154: }
155: attribute vec3 a_v_pos;
156: attribute vec3 a_v_normal;
157: attribute vec2 a_v_texCoords;
158:
159: attribute vec3 a_i_pos;
160: attribute vec2 a_i_light;
161: attribute float a_i_offset;
162: attribute vec3 a_i_axis;
163: attribute vec4 a_i_rotation;
164: attribute vec3 a_i_rotationCenter;
165: attribute float a_i_speed;
166:
167:
168: varying vec2 v2f_texCoords;
169: varying vec4 v2f_color;
170: varying float v2f_diffuse;
171: varying vec2 v2f_light;
172:
173:
174: void main() {
175: Vertex v;
176: v.pos = a_v_pos;
177: v.normal = a_v_normal;
178: v.texCoords = a_v_texCoords;
179:
180:
181: Actor i;
182: i.pos = a_i_pos;
183: i.light = a_i_light;
184: i.offset = a_i_offset;
185: i.axis = a_i_axis;
186: i.rotation = a_i_rotation;
187: i.rotationCenter = a_i_rotationCenter;
188: i.speed = a_i_speed;
189:
190:
191: BlockFrag o = FLWMain(v, i);
192:
193: v2f_texCoords = o.texCoords;
194: v2f_color = o.color;
195: v2f_diffuse = o.diffuse;
196: v2f_light = o.light;
197:
198: }
[12:44:39] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:39] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: varying vec3 BoxCoord;
32: varying vec2 BoxLight;
33: uniform sampler3D uLightVolume;
34:
35: uniform sampler2D uBlockAtlas;
36: uniform sampler2D uLightMap;
37:
38: vec4 FLWBlockTexture(vec2 texCoords) {
39: return texture2D(uBlockAtlas, texCoords);
40: }
41:
42: void FLWFinalizeColor(vec4 color) {
43: #if defined(USE_FOG)
44: float a = color.a;
45: float fog = clamp(FLWFogFactor(), 0., 1.);
46:
47: color = mix(uFogColor, color, fog);
48: color.a = a;
49: #endif
50:
51: gl_FragColor = color;
52: }
53:
54: vec4 FLWLight(vec2 lightCoords) {
55: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
56:
57: return texture2D(uLightMap, shiftLight(lightCoords));
58: }
59:
60:
61:
62: struct BlockFrag {
63: vec2 texCoords;
64: vec4 color;
65: float diffuse;
66: vec2 light;
67: };
68:
69: void FLWMain(BlockFrag r) {
70: vec4 tex = FLWBlockTexture(r.texCoords);
71:
72: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
73:
74: // flw_WorldPos = ;
75: // flw_Normal = ;
76: // flw_Albedo = tex.rgb;
77: // flw_Alpha = tex.a;
78: // flw_LightMap = r.light;
79: // flw_Tint = r.color;
80: FLWFinalizeColor(color);
81: }
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: //vec3 flw_WorldPos;
90: //vec3 flw_Normal;
91: //vec3 flw_Albedo;
92: //float flw_Alpha;
93: //vec2 flw_LightMap;
94: //vec4 flw_Tint;
95:
96: void main() {
97: BlockFrag f;
98: f.texCoords = v2f_texCoords;
99: f.color = v2f_color;
100: f.diffuse = v2f_diffuse;
101: f.light = v2f_light;
102:
103:
104: FLWMain(f);
105: }
[12:44:39] [main/ERROR]: Shader compilation log for create:contraption_actor.vert: No errors.
[12:44:39] [main/ERROR]: Source for shader 'create:contraption_actor.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #define PI 3.1415926538
6:
7: #if defined(USE_FOG)
8: varying float FragDistance;
9: #endif
10:
11: varying vec3 BoxCoord;
12:
13: uniform vec3 uLightBoxSize;
14: uniform vec3 uLightBoxMin;
15: uniform mat4 uModel;
16:
17: uniform float uTime;
18: uniform mat4 uViewProjection;
19: uniform vec3 uCameraPos;
20:
21: void FLWFinalizeWorldPos(inout vec4 worldPos) {
22: worldPos = uModel * worldPos;
23:
24: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
25:
26: #if defined(USE_FOG)
27: FragDistance = length(worldPos.xyz);
28: #endif
29:
30: gl_Position = uViewProjection * worldPos;
31: }
32:
33: void FLWFinalizeNormal(inout vec3 normal) {
34: mat3 m;
35: m[0] = uModel[0].xyz;
36: m[1] = uModel[1].xyz;
37: m[2] = uModel[2].xyz;
38: normal = m * normal;
39: }
40:
41:
42:
43: mat4 rotate(vec3 axis, float angle) {
44: float s = sin(angle);
45: float c = cos(angle);
46: float oc = 1. - c;
47:
48: vec3 sa = axis * s;
49:
50: mat4 mr = mat4(1.);
51: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
52: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
53: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
54:
55: return mr;
56: }
57:
58: mat4 rotation(vec3 rot) {
59: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
60: }
61:
62: mat3 modelToNormal(mat4 mat) {
63: // Discard the edges. This won't be accurate for scaled or skewed matrices,
64: // but we don't have to work with those often.
65: mat3 m;
66: m[0] = mat[0].xyz;
67: m[1] = mat[1].xyz;
68: m[2] = mat[2].xyz;
69: return m;
70: }
71:
72: #define PIOVER2 1.5707963268
73:
74: vec4 quat(vec3 axis, float angle) {
75: float halfAngle = angle * PIOVER2 / 180.0;
76: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
77: return vec4(axis.xyz * cs.y, cs.x);
78: }
79:
80: vec4 quatMult(vec4 q1, vec4 q2) {
81: // disgustingly vectorized quaternion multiplication
82: vec4 a = q1.w * q2.xyzw;
83: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
84: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
85: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
86:
87: return a + b + c + d;
88: }
89:
90: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
91: vec3 i = q.xyz;
92: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
93: }
94:
95: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
96: return rotateVertexByQuat(v, quat(axis, angle));
97: }
98:
99: float diffuse(vec3 normal) {
100: vec3 n2 = normal * normal * vec3(.6, .25, .8);
101: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
102: }
103:
104:
105: struct Actor {
106: vec3 pos;
107: vec2 light;
108: float offset;
109: vec3 axis;
110: vec4 rotation;
111: vec3 rotationCenter;
112: float speed;
113: };
114:
115:
116: struct Vertex {
117: vec3 pos;
118: vec3 normal;
119: vec2 texCoords;
120: };
121:
122: struct BlockFrag {
123: vec2 texCoords;
124: vec4 color;
125: float diffuse;
126: vec2 light;
127: };
128:
129: BlockFrag FLWMain(Vertex v, Actor instance) {
130: float degrees = instance.offset + uTime * instance.speed / 20.;
131: //float angle = fract(degrees / 360.) * PI * 2.;
132:
133: vec4 kineticRot = quat(instance.axis, degrees);
134: vec3 rotated = rotateVertexByQuat(v.pos - instance.rotationCenter, kineticRot) + instance.rotationCenter;
135:
136: vec4 worldPos = vec4(rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5, 1.);
137: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, kineticRot), instance.rotation);
138:
139: FLWFinalizeWorldPos(worldPos);
140: FLWFinalizeNormal(norm);
141:
142: BlockFrag b;
143: b.diffuse = diffuse(norm);
144: b.texCoords = v.texCoords;
145: b.light = instance.light;
146:
147: #if defined(DEBUG_NORMAL)
148: b.color = vec4(norm, 1.);
149: #else
150: b.color = vec4(1.);
151: #endif
152:
153: return b;
154: }
155: attribute vec3 a_v_pos;
156: attribute vec3 a_v_normal;
157: attribute vec2 a_v_texCoords;
158:
159: attribute vec3 a_i_pos;
160: attribute vec2 a_i_light;
161: attribute float a_i_offset;
162: attribute vec3 a_i_axis;
163: attribute vec4 a_i_rotation;
164: attribute vec3 a_i_rotationCenter;
165: attribute float a_i_speed;
166:
167:
168: varying vec2 v2f_texCoords;
169: varying vec4 v2f_color;
170: varying float v2f_diffuse;
171: varying vec2 v2f_light;
172:
173:
174: void main() {
175: Vertex v;
176: v.pos = a_v_pos;
177: v.normal = a_v_normal;
178: v.texCoords = a_v_texCoords;
179:
180:
181: Actor i;
182: i.pos = a_i_pos;
183: i.light = a_i_light;
184: i.offset = a_i_offset;
185: i.axis = a_i_axis;
186: i.rotation = a_i_rotation;
187: i.rotationCenter = a_i_rotationCenter;
188: i.speed = a_i_speed;
189:
190:
191: BlockFrag o = FLWMain(v, i);
192:
193: v2f_texCoords = o.texCoords;
194: v2f_color = o.color;
195: v2f_diffuse = o.diffuse;
196: v2f_light = o.light;
197:
198: }
[12:44:39] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:39] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: varying vec3 BoxCoord;
32: varying vec2 BoxLight;
33: uniform sampler3D uLightVolume;
34:
35: uniform sampler2D uBlockAtlas;
36: uniform sampler2D uLightMap;
37:
38: vec4 FLWBlockTexture(vec2 texCoords) {
39: return texture2D(uBlockAtlas, texCoords);
40: }
41:
42: void FLWFinalizeColor(vec4 color) {
43: #if defined(USE_FOG)
44: float a = color.a;
45: float fog = clamp(FLWFogFactor(), 0., 1.);
46:
47: color = mix(uFogColor, color, fog);
48: color.a = a;
49: #endif
50:
51: gl_FragColor = color;
52: }
53:
54: vec4 FLWLight(vec2 lightCoords) {
55: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
56:
57: return texture2D(uLightMap, shiftLight(lightCoords));
58: }
59:
60:
61:
62: struct BlockFrag {
63: vec2 texCoords;
64: vec4 color;
65: float diffuse;
66: vec2 light;
67: };
68:
69: void FLWMain(BlockFrag r) {
70: vec4 tex = FLWBlockTexture(r.texCoords);
71:
72: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
73:
74: // flw_WorldPos = ;
75: // flw_Normal = ;
76: // flw_Albedo = tex.rgb;
77: // flw_Alpha = tex.a;
78: // flw_LightMap = r.light;
79: // flw_Tint = r.color;
80: FLWFinalizeColor(color);
81: }
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: //vec3 flw_WorldPos;
90: //vec3 flw_Normal;
91: //vec3 flw_Albedo;
92: //float flw_Alpha;
93: //vec2 flw_LightMap;
94: //vec4 flw_Tint;
95:
96: void main() {
97: BlockFrag f;
98: f.texCoords = v2f_texCoords;
99: f.color = v2f_color;
100: f.diffuse = v2f_diffuse;
101: f.light = v2f_light;
102:
103:
104: FLWMain(f);
105: }
[12:44:39] [main/ERROR]: Shader compilation log for create:contraption_actor.vert: No errors.
[12:44:39] [main/ERROR]: Source for shader 'create:contraption_actor.vert':
1: #version 110
2:
3: #define PI 3.1415926538
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: #endif
8:
9: varying vec3 BoxCoord;
10:
11: uniform vec3 uLightBoxSize;
12: uniform vec3 uLightBoxMin;
13: uniform mat4 uModel;
14:
15: uniform float uTime;
16: uniform mat4 uViewProjection;
17: uniform vec3 uCameraPos;
18:
19: void FLWFinalizeWorldPos(inout vec4 worldPos) {
20: worldPos = uModel * worldPos;
21:
22: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
23:
24: #if defined(USE_FOG)
25: FragDistance = length(worldPos.xyz);
26: #endif
27:
28: gl_Position = uViewProjection * worldPos;
29: }
30:
31: void FLWFinalizeNormal(inout vec3 normal) {
32: mat3 m;
33: m[0] = uModel[0].xyz;
34: m[1] = uModel[1].xyz;
35: m[2] = uModel[2].xyz;
36: normal = m * normal;
37: }
38:
39:
40:
41: mat4 rotate(vec3 axis, float angle) {
42: float s = sin(angle);
43: float c = cos(angle);
44: float oc = 1. - c;
45:
46: vec3 sa = axis * s;
47:
48: mat4 mr = mat4(1.);
49: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
50: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
51: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
52:
53: return mr;
54: }
55:
56: mat4 rotation(vec3 rot) {
57: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
58: }
59:
60: mat3 modelToNormal(mat4 mat) {
61: // Discard the edges. This won't be accurate for scaled or skewed matrices,
62: // but we don't have to work with those often.
63: mat3 m;
64: m[0] = mat[0].xyz;
65: m[1] = mat[1].xyz;
66: m[2] = mat[2].xyz;
67: return m;
68: }
69:
70: #define PIOVER2 1.5707963268
71:
72: vec4 quat(vec3 axis, float angle) {
73: float halfAngle = angle * PIOVER2 / 180.0;
74: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
75: return vec4(axis.xyz * cs.y, cs.x);
76: }
77:
78: vec4 quatMult(vec4 q1, vec4 q2) {
79: // disgustingly vectorized quaternion multiplication
80: vec4 a = q1.w * q2.xyzw;
81: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
82: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
83: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
84:
85: return a + b + c + d;
86: }
87:
88: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
89: vec3 i = q.xyz;
90: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
91: }
92:
93: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
94: return rotateVertexByQuat(v, quat(axis, angle));
95: }
96:
97: float diffuse(vec3 normal) {
98: vec3 n2 = normal * normal * vec3(.6, .25, .8);
99: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
100: }
101:
102:
103: struct Actor {
104: vec3 pos;
105: vec2 light;
106: float offset;
107: vec3 axis;
108: vec4 rotation;
109: vec3 rotationCenter;
110: float speed;
111: };
112:
113:
114: struct Vertex {
115: vec3 pos;
116: vec3 normal;
117: vec2 texCoords;
118: };
119:
120: struct BlockFrag {
121: vec2 texCoords;
122: vec4 color;
123: float diffuse;
124: vec2 light;
125: };
126:
127: BlockFrag FLWMain(Vertex v, Actor instance) {
128: float degrees = instance.offset + uTime * instance.speed / 20.;
129: //float angle = fract(degrees / 360.) * PI * 2.;
130:
131: vec4 kineticRot = quat(instance.axis, degrees);
132: vec3 rotated = rotateVertexByQuat(v.pos - instance.rotationCenter, kineticRot) + instance.rotationCenter;
133:
134: vec4 worldPos = vec4(rotateVertexByQuat(rotated - .5, instance.rotation) + instance.pos + .5, 1.);
135: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, kineticRot), instance.rotation);
136:
137: FLWFinalizeWorldPos(worldPos);
138: FLWFinalizeNormal(norm);
139:
140: BlockFrag b;
141: b.diffuse = diffuse(norm);
142: b.texCoords = v.texCoords;
143: b.light = instance.light;
144:
145: #if defined(DEBUG_NORMAL)
146: b.color = vec4(norm, 1.);
147: #else
148: b.color = vec4(1.);
149: #endif
150:
151: return b;
152: }
153: attribute vec3 a_v_pos;
154: attribute vec3 a_v_normal;
155: attribute vec2 a_v_texCoords;
156:
157: attribute vec3 a_i_pos;
158: attribute vec2 a_i_light;
159: attribute float a_i_offset;
160: attribute vec3 a_i_axis;
161: attribute vec4 a_i_rotation;
162: attribute vec3 a_i_rotationCenter;
163: attribute float a_i_speed;
164:
165:
166: varying vec2 v2f_texCoords;
167: varying vec4 v2f_color;
168: varying float v2f_diffuse;
169: varying vec2 v2f_light;
170:
171:
172: void main() {
173: Vertex v;
174: v.pos = a_v_pos;
175: v.normal = a_v_normal;
176: v.texCoords = a_v_texCoords;
177:
178:
179: Actor i;
180: i.pos = a_i_pos;
181: i.light = a_i_light;
182: i.offset = a_i_offset;
183: i.axis = a_i_axis;
184: i.rotation = a_i_rotation;
185: i.rotationCenter = a_i_rotationCenter;
186: i.speed = a_i_speed;
187:
188:
189: BlockFrag o = FLWMain(v, i);
190:
191: v2f_texCoords = o.texCoords;
192: v2f_color = o.color;
193: v2f_diffuse = o.diffuse;
194: v2f_light = o.light;
195:
196: }
[12:44:39] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:39] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
25: vec2 shiftLight(vec2 lm) {
26: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
27: }
28:
29: varying vec3 BoxCoord;
30: varying vec2 BoxLight;
31: uniform sampler3D uLightVolume;
32:
33: uniform sampler2D uBlockAtlas;
34: uniform sampler2D uLightMap;
35:
36: vec4 FLWBlockTexture(vec2 texCoords) {
37: return texture2D(uBlockAtlas, texCoords);
38: }
39:
40: void FLWFinalizeColor(vec4 color) {
41: #if defined(USE_FOG)
42: float a = color.a;
43: float fog = clamp(FLWFogFactor(), 0., 1.);
44:
45: color = mix(uFogColor, color, fog);
46: color.a = a;
47: #endif
48:
49: gl_FragColor = color;
50: }
51:
52: vec4 FLWLight(vec2 lightCoords) {
53: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
54:
55: return texture2D(uLightMap, shiftLight(lightCoords));
56: }
57:
58:
59:
60: struct BlockFrag {
61: vec2 texCoords;
62: vec4 color;
63: float diffuse;
64: vec2 light;
65: };
66:
67: void FLWMain(BlockFrag r) {
68: vec4 tex = FLWBlockTexture(r.texCoords);
69:
70: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
71:
72: // flw_WorldPos = ;
73: // flw_Normal = ;
74: // flw_Albedo = tex.rgb;
75: // flw_Alpha = tex.a;
76: // flw_LightMap = r.light;
77: // flw_Tint = r.color;
78: FLWFinalizeColor(color);
79: }
80:
81: varying vec2 v2f_texCoords;
82: varying vec4 v2f_color;
83: varying float v2f_diffuse;
84: varying vec2 v2f_light;
85:
86:
87: //vec3 flw_WorldPos;
88: //vec3 flw_Normal;
89: //vec3 flw_Albedo;
90: //float flw_Alpha;
91: //vec2 flw_LightMap;
92: //vec4 flw_Tint;
93:
94: void main() {
95: BlockFrag f;
96: f.texCoords = v2f_texCoords;
97: f.color = v2f_color;
98: f.diffuse = v2f_diffuse;
99: f.light = v2f_light;
100:
101:
102: FLWMain(f);
103: }
[12:44:39] [main/ERROR]: Shader compilation log for create:flap.vert: No errors.
[12:44:39] [main/ERROR]: Source for shader 'create:flap.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #define PI 3.1415926538
5:
6: #if defined(USE_FOG)
7: varying float FragDistance;
8: #endif
9:
10: varying vec3 BoxCoord;
11:
12: uniform vec3 uLightBoxSize;
13: uniform vec3 uLightBoxMin;
14: uniform mat4 uModel;
15:
16: uniform float uTime;
17: uniform mat4 uViewProjection;
18: uniform vec3 uCameraPos;
19:
20: void FLWFinalizeWorldPos(inout vec4 worldPos) {
21: worldPos = uModel * worldPos;
22:
23: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
24:
25: #if defined(USE_FOG)
26: FragDistance = length(worldPos.xyz);
27: #endif
28:
29: gl_Position = uViewProjection * worldPos;
30: }
31:
32: void FLWFinalizeNormal(inout vec3 normal) {
33: mat3 m;
34: m[0] = uModel[0].xyz;
35: m[1] = uModel[1].xyz;
36: m[2] = uModel[2].xyz;
37: normal = m * normal;
38: }
39:
40:
41:
42: mat4 rotate(vec3 axis, float angle) {
43: float s = sin(angle);
44: float c = cos(angle);
45: float oc = 1. - c;
46:
47: vec3 sa = axis * s;
48:
49: mat4 mr = mat4(1.);
50: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
51: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
52: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
53:
54: return mr;
55: }
56:
57: mat4 rotation(vec3 rot) {
58: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
59: }
60:
61: mat3 modelToNormal(mat4 mat) {
62: // Discard the edges. This won't be accurate for scaled or skewed matrices,
63: // but we don't have to work with those often.
64: mat3 m;
65: m[0] = mat[0].xyz;
66: m[1] = mat[1].xyz;
67: m[2] = mat[2].xyz;
68: return m;
69: }
70:
71: #define PIOVER2 1.5707963268
72:
73: vec4 quat(vec3 axis, float angle) {
74: float halfAngle = angle * PIOVER2 / 180.0;
75: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
76: return vec4(axis.xyz * cs.y, cs.x);
77: }
78:
79: vec4 quatMult(vec4 q1, vec4 q2) {
80: // disgustingly vectorized quaternion multiplication
81: vec4 a = q1.w * q2.xyzw;
82: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
83: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
84: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
85:
86: return a + b + c + d;
87: }
88:
89: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
90: vec3 i = q.xyz;
91: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
92: }
93:
94: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
95: return rotateVertexByQuat(v, quat(axis, angle));
96: }
97:
98: float diffuse(vec3 normal) {
99: vec3 n2 = normal * normal * vec3(.6, .25, .8);
100: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
101: }
102:
103:
104: struct Flap {
105: vec3 instancePos;
106: vec2 light;
107: vec3 segmentOffset;
108: vec3 pivot;
109: float horizontalAngle;
110: float intensity;
111: float flapScale;
112: float flapness;
113: };
114:
115:
116: struct Vertex {
117: vec3 pos;
118: vec3 normal;
119: vec2 texCoords;
120: };
121:
122: struct BlockFrag {
123: vec2 texCoords;
124: vec4 color;
125: float diffuse;
126: vec2 light;
127: };
128:
129:
130: float toRad(float degrees) {
131: return fract(degrees / 360.) * PI * 2.;
132: }
133:
134: float getFlapAngle(float flapness, float intensity, float scale) {
135: float absFlap = abs(flapness);
136:
137: float angle = sin((1. - absFlap) * PI * intensity) * 30. * flapness * scale;
138:
139: float halfAngle = angle * 0.5;
140:
141: float which = step(0., flapness);// 0 if negative, 1 if positive
142: float degrees = which * halfAngle + (1. - which) * angle;// branchless conditional multiply
143:
144: return degrees;
145: }
146:
147: BlockFrag FLWMain(Vertex v, Flap flap) {
148: float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale);
149:
150: vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle);
151: vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle);
152:
153: vec3 rotated = rotateVertexByQuat(v.pos - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset;
154: rotated = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5;
155:
156: vec4 worldPos = vec4(rotated, 1.);
157: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, flapRotation), orientation);
158:
159: FLWFinalizeWorldPos(worldPos);
160: FLWFinalizeNormal(norm);
161:
162: BlockFrag b;
163: b.diffuse = diffuse(norm);
164: b.texCoords = v.texCoords;
165: b.light = flap.light;
166: #if defined(DEBUG_NORMAL)
167: b.color = vec4(norm, 1.);
168: #else
169: b.color = vec4(1.);
170: #endif
171: return b;
172: }
173: attribute vec3 a_v_pos;
174: attribute vec3 a_v_normal;
175: attribute vec2 a_v_texCoords;
176:
177: attribute vec3 a_i_instancePos;
178: attribute vec2 a_i_light;
179: attribute vec3 a_i_segmentOffset;
180: attribute vec3 a_i_pivot;
181: attribute float a_i_horizontalAngle;
182: attribute float a_i_intensity;
183: attribute float a_i_flapScale;
184: attribute float a_i_flapness;
185:
186:
187: varying vec2 v2f_texCoords;
188: varying vec4 v2f_color;
189: varying float v2f_diffuse;
190: varying vec2 v2f_light;
191:
192:
193: void main() {
194: Vertex v;
195: v.pos = a_v_pos;
196: v.normal = a_v_normal;
197: v.texCoords = a_v_texCoords;
198:
199:
200: Flap i;
201: i.instancePos = a_i_instancePos;
202: i.light = a_i_light;
203: i.segmentOffset = a_i_segmentOffset;
204: i.pivot = a_i_pivot;
205: i.horizontalAngle = a_i_horizontalAngle;
206: i.intensity = a_i_intensity;
207: i.flapScale = a_i_flapScale;
208: i.flapness = a_i_flapness;
209:
210:
211: BlockFrag o = FLWMain(v, i);
212:
213: v2f_texCoords = o.texCoords;
214: v2f_color = o.color;
215: v2f_diffuse = o.diffuse;
216: v2f_light = o.light;
217:
218: }
[12:44:39] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:39] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: varying vec3 BoxCoord;
31: varying vec2 BoxLight;
32: uniform sampler3D uLightVolume;
33:
34: uniform sampler2D uBlockAtlas;
35: uniform sampler2D uLightMap;
36:
37: vec4 FLWBlockTexture(vec2 texCoords) {
38: return texture2D(uBlockAtlas, texCoords);
39: }
40:
41: void FLWFinalizeColor(vec4 color) {
42: #if defined(USE_FOG)
43: float a = color.a;
44: float fog = clamp(FLWFogFactor(), 0., 1.);
45:
46: color = mix(uFogColor, color, fog);
47: color.a = a;
48: #endif
49:
50: gl_FragColor = color;
51: }
52:
53: vec4 FLWLight(vec2 lightCoords) {
54: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
55:
56: return texture2D(uLightMap, shiftLight(lightCoords));
57: }
58:
59:
60:
61: struct BlockFrag {
62: vec2 texCoords;
63: vec4 color;
64: float diffuse;
65: vec2 light;
66: };
67:
68: void FLWMain(BlockFrag r) {
69: vec4 tex = FLWBlockTexture(r.texCoords);
70:
71: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
72:
73: // flw_WorldPos = ;
74: // flw_Normal = ;
75: // flw_Albedo = tex.rgb;
76: // flw_Alpha = tex.a;
77: // flw_LightMap = r.light;
78: // flw_Tint = r.color;
79: FLWFinalizeColor(color);
80: }
81:
82: varying vec2 v2f_texCoords;
83: varying vec4 v2f_color;
84: varying float v2f_diffuse;
85: varying vec2 v2f_light;
86:
87:
88: //vec3 flw_WorldPos;
89: //vec3 flw_Normal;
90: //vec3 flw_Albedo;
91: //float flw_Alpha;
92: //vec2 flw_LightMap;
93: //vec4 flw_Tint;
94:
95: void main() {
96: BlockFrag f;
97: f.texCoords = v2f_texCoords;
98: f.color = v2f_color;
99: f.diffuse = v2f_diffuse;
100: f.light = v2f_light;
101:
102:
103: FLWMain(f);
104: }
[12:44:40] [main/ERROR]: Shader compilation log for create:flap.vert: No errors.
[12:44:40] [main/ERROR]: Source for shader 'create:flap.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #define PI 3.1415926538
6:
7: #if defined(USE_FOG)
8: varying float FragDistance;
9: #endif
10:
11: varying vec3 BoxCoord;
12:
13: uniform vec3 uLightBoxSize;
14: uniform vec3 uLightBoxMin;
15: uniform mat4 uModel;
16:
17: uniform float uTime;
18: uniform mat4 uViewProjection;
19: uniform vec3 uCameraPos;
20:
21: void FLWFinalizeWorldPos(inout vec4 worldPos) {
22: worldPos = uModel * worldPos;
23:
24: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
25:
26: #if defined(USE_FOG)
27: FragDistance = length(worldPos.xyz);
28: #endif
29:
30: gl_Position = uViewProjection * worldPos;
31: }
32:
33: void FLWFinalizeNormal(inout vec3 normal) {
34: mat3 m;
35: m[0] = uModel[0].xyz;
36: m[1] = uModel[1].xyz;
37: m[2] = uModel[2].xyz;
38: normal = m * normal;
39: }
40:
41:
42:
43: mat4 rotate(vec3 axis, float angle) {
44: float s = sin(angle);
45: float c = cos(angle);
46: float oc = 1. - c;
47:
48: vec3 sa = axis * s;
49:
50: mat4 mr = mat4(1.);
51: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
52: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
53: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
54:
55: return mr;
56: }
57:
58: mat4 rotation(vec3 rot) {
59: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
60: }
61:
62: mat3 modelToNormal(mat4 mat) {
63: // Discard the edges. This won't be accurate for scaled or skewed matrices,
64: // but we don't have to work with those often.
65: mat3 m;
66: m[0] = mat[0].xyz;
67: m[1] = mat[1].xyz;
68: m[2] = mat[2].xyz;
69: return m;
70: }
71:
72: #define PIOVER2 1.5707963268
73:
74: vec4 quat(vec3 axis, float angle) {
75: float halfAngle = angle * PIOVER2 / 180.0;
76: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
77: return vec4(axis.xyz * cs.y, cs.x);
78: }
79:
80: vec4 quatMult(vec4 q1, vec4 q2) {
81: // disgustingly vectorized quaternion multiplication
82: vec4 a = q1.w * q2.xyzw;
83: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
84: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
85: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
86:
87: return a + b + c + d;
88: }
89:
90: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
91: vec3 i = q.xyz;
92: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
93: }
94:
95: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
96: return rotateVertexByQuat(v, quat(axis, angle));
97: }
98:
99: float diffuse(vec3 normal) {
100: vec3 n2 = normal * normal * vec3(.6, .25, .8);
101: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
102: }
103:
104:
105: struct Flap {
106: vec3 instancePos;
107: vec2 light;
108: vec3 segmentOffset;
109: vec3 pivot;
110: float horizontalAngle;
111: float intensity;
112: float flapScale;
113: float flapness;
114: };
115:
116:
117: struct Vertex {
118: vec3 pos;
119: vec3 normal;
120: vec2 texCoords;
121: };
122:
123: struct BlockFrag {
124: vec2 texCoords;
125: vec4 color;
126: float diffuse;
127: vec2 light;
128: };
129:
130:
131: float toRad(float degrees) {
132: return fract(degrees / 360.) * PI * 2.;
133: }
134:
135: float getFlapAngle(float flapness, float intensity, float scale) {
136: float absFlap = abs(flapness);
137:
138: float angle = sin((1. - absFlap) * PI * intensity) * 30. * flapness * scale;
139:
140: float halfAngle = angle * 0.5;
141:
142: float which = step(0., flapness);// 0 if negative, 1 if positive
143: float degrees = which * halfAngle + (1. - which) * angle;// branchless conditional multiply
144:
145: return degrees;
146: }
147:
148: BlockFrag FLWMain(Vertex v, Flap flap) {
149: float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale);
150:
151: vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle);
152: vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle);
153:
154: vec3 rotated = rotateVertexByQuat(v.pos - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset;
155: rotated = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5;
156:
157: vec4 worldPos = vec4(rotated, 1.);
158: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, flapRotation), orientation);
159:
160: FLWFinalizeWorldPos(worldPos);
161: FLWFinalizeNormal(norm);
162:
163: BlockFrag b;
164: b.diffuse = diffuse(norm);
165: b.texCoords = v.texCoords;
166: b.light = flap.light;
167: #if defined(DEBUG_NORMAL)
168: b.color = vec4(norm, 1.);
169: #else
170: b.color = vec4(1.);
171: #endif
172: return b;
173: }
174: attribute vec3 a_v_pos;
175: attribute vec3 a_v_normal;
176: attribute vec2 a_v_texCoords;
177:
178: attribute vec3 a_i_instancePos;
179: attribute vec2 a_i_light;
180: attribute vec3 a_i_segmentOffset;
181: attribute vec3 a_i_pivot;
182: attribute float a_i_horizontalAngle;
183: attribute float a_i_intensity;
184: attribute float a_i_flapScale;
185: attribute float a_i_flapness;
186:
187:
188: varying vec2 v2f_texCoords;
189: varying vec4 v2f_color;
190: varying float v2f_diffuse;
191: varying vec2 v2f_light;
192:
193:
194: void main() {
195: Vertex v;
196: v.pos = a_v_pos;
197: v.normal = a_v_normal;
198: v.texCoords = a_v_texCoords;
199:
200:
201: Flap i;
202: i.instancePos = a_i_instancePos;
203: i.light = a_i_light;
204: i.segmentOffset = a_i_segmentOffset;
205: i.pivot = a_i_pivot;
206: i.horizontalAngle = a_i_horizontalAngle;
207: i.intensity = a_i_intensity;
208: i.flapScale = a_i_flapScale;
209: i.flapness = a_i_flapness;
210:
211:
212: BlockFrag o = FLWMain(v, i);
213:
214: v2f_texCoords = o.texCoords;
215: v2f_color = o.color;
216: v2f_diffuse = o.diffuse;
217: v2f_light = o.light;
218:
219: }
[12:44:40] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:40] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: varying vec3 BoxCoord;
32: varying vec2 BoxLight;
33: uniform sampler3D uLightVolume;
34:
35: uniform sampler2D uBlockAtlas;
36: uniform sampler2D uLightMap;
37:
38: vec4 FLWBlockTexture(vec2 texCoords) {
39: return texture2D(uBlockAtlas, texCoords);
40: }
41:
42: void FLWFinalizeColor(vec4 color) {
43: #if defined(USE_FOG)
44: float a = color.a;
45: float fog = clamp(FLWFogFactor(), 0., 1.);
46:
47: color = mix(uFogColor, color, fog);
48: color.a = a;
49: #endif
50:
51: gl_FragColor = color;
52: }
53:
54: vec4 FLWLight(vec2 lightCoords) {
55: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
56:
57: return texture2D(uLightMap, shiftLight(lightCoords));
58: }
59:
60:
61:
62: struct BlockFrag {
63: vec2 texCoords;
64: vec4 color;
65: float diffuse;
66: vec2 light;
67: };
68:
69: void FLWMain(BlockFrag r) {
70: vec4 tex = FLWBlockTexture(r.texCoords);
71:
72: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
73:
74: // flw_WorldPos = ;
75: // flw_Normal = ;
76: // flw_Albedo = tex.rgb;
77: // flw_Alpha = tex.a;
78: // flw_LightMap = r.light;
79: // flw_Tint = r.color;
80: FLWFinalizeColor(color);
81: }
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: //vec3 flw_WorldPos;
90: //vec3 flw_Normal;
91: //vec3 flw_Albedo;
92: //float flw_Alpha;
93: //vec2 flw_LightMap;
94: //vec4 flw_Tint;
95:
96: void main() {
97: BlockFrag f;
98: f.texCoords = v2f_texCoords;
99: f.color = v2f_color;
100: f.diffuse = v2f_diffuse;
101: f.light = v2f_light;
102:
103:
104: FLWMain(f);
105: }
[12:44:40] [main/ERROR]: Shader compilation log for create:flap.vert: No errors.
[12:44:40] [main/ERROR]: Source for shader 'create:flap.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #define PI 3.1415926538
6:
7: #if defined(USE_FOG)
8: varying float FragDistance;
9: #endif
10:
11: varying vec3 BoxCoord;
12:
13: uniform vec3 uLightBoxSize;
14: uniform vec3 uLightBoxMin;
15: uniform mat4 uModel;
16:
17: uniform float uTime;
18: uniform mat4 uViewProjection;
19: uniform vec3 uCameraPos;
20:
21: void FLWFinalizeWorldPos(inout vec4 worldPos) {
22: worldPos = uModel * worldPos;
23:
24: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
25:
26: #if defined(USE_FOG)
27: FragDistance = length(worldPos.xyz);
28: #endif
29:
30: gl_Position = uViewProjection * worldPos;
31: }
32:
33: void FLWFinalizeNormal(inout vec3 normal) {
34: mat3 m;
35: m[0] = uModel[0].xyz;
36: m[1] = uModel[1].xyz;
37: m[2] = uModel[2].xyz;
38: normal = m * normal;
39: }
40:
41:
42:
43: mat4 rotate(vec3 axis, float angle) {
44: float s = sin(angle);
45: float c = cos(angle);
46: float oc = 1. - c;
47:
48: vec3 sa = axis * s;
49:
50: mat4 mr = mat4(1.);
51: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
52: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
53: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
54:
55: return mr;
56: }
57:
58: mat4 rotation(vec3 rot) {
59: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
60: }
61:
62: mat3 modelToNormal(mat4 mat) {
63: // Discard the edges. This won't be accurate for scaled or skewed matrices,
64: // but we don't have to work with those often.
65: mat3 m;
66: m[0] = mat[0].xyz;
67: m[1] = mat[1].xyz;
68: m[2] = mat[2].xyz;
69: return m;
70: }
71:
72: #define PIOVER2 1.5707963268
73:
74: vec4 quat(vec3 axis, float angle) {
75: float halfAngle = angle * PIOVER2 / 180.0;
76: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
77: return vec4(axis.xyz * cs.y, cs.x);
78: }
79:
80: vec4 quatMult(vec4 q1, vec4 q2) {
81: // disgustingly vectorized quaternion multiplication
82: vec4 a = q1.w * q2.xyzw;
83: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
84: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
85: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
86:
87: return a + b + c + d;
88: }
89:
90: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
91: vec3 i = q.xyz;
92: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
93: }
94:
95: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
96: return rotateVertexByQuat(v, quat(axis, angle));
97: }
98:
99: float diffuse(vec3 normal) {
100: vec3 n2 = normal * normal * vec3(.6, .25, .8);
101: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
102: }
103:
104:
105: struct Flap {
106: vec3 instancePos;
107: vec2 light;
108: vec3 segmentOffset;
109: vec3 pivot;
110: float horizontalAngle;
111: float intensity;
112: float flapScale;
113: float flapness;
114: };
115:
116:
117: struct Vertex {
118: vec3 pos;
119: vec3 normal;
120: vec2 texCoords;
121: };
122:
123: struct BlockFrag {
124: vec2 texCoords;
125: vec4 color;
126: float diffuse;
127: vec2 light;
128: };
129:
130:
131: float toRad(float degrees) {
132: return fract(degrees / 360.) * PI * 2.;
133: }
134:
135: float getFlapAngle(float flapness, float intensity, float scale) {
136: float absFlap = abs(flapness);
137:
138: float angle = sin((1. - absFlap) * PI * intensity) * 30. * flapness * scale;
139:
140: float halfAngle = angle * 0.5;
141:
142: float which = step(0., flapness);// 0 if negative, 1 if positive
143: float degrees = which * halfAngle + (1. - which) * angle;// branchless conditional multiply
144:
145: return degrees;
146: }
147:
148: BlockFrag FLWMain(Vertex v, Flap flap) {
149: float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale);
150:
151: vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle);
152: vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle);
153:
154: vec3 rotated = rotateVertexByQuat(v.pos - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset;
155: rotated = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5;
156:
157: vec4 worldPos = vec4(rotated, 1.);
158: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, flapRotation), orientation);
159:
160: FLWFinalizeWorldPos(worldPos);
161: FLWFinalizeNormal(norm);
162:
163: BlockFrag b;
164: b.diffuse = diffuse(norm);
165: b.texCoords = v.texCoords;
166: b.light = flap.light;
167: #if defined(DEBUG_NORMAL)
168: b.color = vec4(norm, 1.);
169: #else
170: b.color = vec4(1.);
171: #endif
172: return b;
173: }
174: attribute vec3 a_v_pos;
175: attribute vec3 a_v_normal;
176: attribute vec2 a_v_texCoords;
177:
178: attribute vec3 a_i_instancePos;
179: attribute vec2 a_i_light;
180: attribute vec3 a_i_segmentOffset;
181: attribute vec3 a_i_pivot;
182: attribute float a_i_horizontalAngle;
183: attribute float a_i_intensity;
184: attribute float a_i_flapScale;
185: attribute float a_i_flapness;
186:
187:
188: varying vec2 v2f_texCoords;
189: varying vec4 v2f_color;
190: varying float v2f_diffuse;
191: varying vec2 v2f_light;
192:
193:
194: void main() {
195: Vertex v;
196: v.pos = a_v_pos;
197: v.normal = a_v_normal;
198: v.texCoords = a_v_texCoords;
199:
200:
201: Flap i;
202: i.instancePos = a_i_instancePos;
203: i.light = a_i_light;
204: i.segmentOffset = a_i_segmentOffset;
205: i.pivot = a_i_pivot;
206: i.horizontalAngle = a_i_horizontalAngle;
207: i.intensity = a_i_intensity;
208: i.flapScale = a_i_flapScale;
209: i.flapness = a_i_flapness;
210:
211:
212: BlockFrag o = FLWMain(v, i);
213:
214: v2f_texCoords = o.texCoords;
215: v2f_color = o.color;
216: v2f_diffuse = o.diffuse;
217: v2f_light = o.light;
218:
219: }
[12:44:40] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:40] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: varying vec3 BoxCoord;
32: varying vec2 BoxLight;
33: uniform sampler3D uLightVolume;
34:
35: uniform sampler2D uBlockAtlas;
36: uniform sampler2D uLightMap;
37:
38: vec4 FLWBlockTexture(vec2 texCoords) {
39: return texture2D(uBlockAtlas, texCoords);
40: }
41:
42: void FLWFinalizeColor(vec4 color) {
43: #if defined(USE_FOG)
44: float a = color.a;
45: float fog = clamp(FLWFogFactor(), 0., 1.);
46:
47: color = mix(uFogColor, color, fog);
48: color.a = a;
49: #endif
50:
51: gl_FragColor = color;
52: }
53:
54: vec4 FLWLight(vec2 lightCoords) {
55: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
56:
57: return texture2D(uLightMap, shiftLight(lightCoords));
58: }
59:
60:
61:
62: struct BlockFrag {
63: vec2 texCoords;
64: vec4 color;
65: float diffuse;
66: vec2 light;
67: };
68:
69: void FLWMain(BlockFrag r) {
70: vec4 tex = FLWBlockTexture(r.texCoords);
71:
72: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
73:
74: // flw_WorldPos = ;
75: // flw_Normal = ;
76: // flw_Albedo = tex.rgb;
77: // flw_Alpha = tex.a;
78: // flw_LightMap = r.light;
79: // flw_Tint = r.color;
80: FLWFinalizeColor(color);
81: }
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: //vec3 flw_WorldPos;
90: //vec3 flw_Normal;
91: //vec3 flw_Albedo;
92: //float flw_Alpha;
93: //vec2 flw_LightMap;
94: //vec4 flw_Tint;
95:
96: void main() {
97: BlockFrag f;
98: f.texCoords = v2f_texCoords;
99: f.color = v2f_color;
100: f.diffuse = v2f_diffuse;
101: f.light = v2f_light;
102:
103:
104: FLWMain(f);
105: }
[12:44:40] [main/ERROR]: Shader compilation log for create:flap.vert: No errors.
[12:44:40] [main/ERROR]: Source for shader 'create:flap.vert':
1: #version 110
2:
3: #define PI 3.1415926538
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: #endif
8:
9: varying vec3 BoxCoord;
10:
11: uniform vec3 uLightBoxSize;
12: uniform vec3 uLightBoxMin;
13: uniform mat4 uModel;
14:
15: uniform float uTime;
16: uniform mat4 uViewProjection;
17: uniform vec3 uCameraPos;
18:
19: void FLWFinalizeWorldPos(inout vec4 worldPos) {
20: worldPos = uModel * worldPos;
21:
22: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
23:
24: #if defined(USE_FOG)
25: FragDistance = length(worldPos.xyz);
26: #endif
27:
28: gl_Position = uViewProjection * worldPos;
29: }
30:
31: void FLWFinalizeNormal(inout vec3 normal) {
32: mat3 m;
33: m[0] = uModel[0].xyz;
34: m[1] = uModel[1].xyz;
35: m[2] = uModel[2].xyz;
36: normal = m * normal;
37: }
38:
39:
40:
41: mat4 rotate(vec3 axis, float angle) {
42: float s = sin(angle);
43: float c = cos(angle);
44: float oc = 1. - c;
45:
46: vec3 sa = axis * s;
47:
48: mat4 mr = mat4(1.);
49: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
50: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
51: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
52:
53: return mr;
54: }
55:
56: mat4 rotation(vec3 rot) {
57: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
58: }
59:
60: mat3 modelToNormal(mat4 mat) {
61: // Discard the edges. This won't be accurate for scaled or skewed matrices,
62: // but we don't have to work with those often.
63: mat3 m;
64: m[0] = mat[0].xyz;
65: m[1] = mat[1].xyz;
66: m[2] = mat[2].xyz;
67: return m;
68: }
69:
70: #define PIOVER2 1.5707963268
71:
72: vec4 quat(vec3 axis, float angle) {
73: float halfAngle = angle * PIOVER2 / 180.0;
74: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
75: return vec4(axis.xyz * cs.y, cs.x);
76: }
77:
78: vec4 quatMult(vec4 q1, vec4 q2) {
79: // disgustingly vectorized quaternion multiplication
80: vec4 a = q1.w * q2.xyzw;
81: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
82: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
83: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
84:
85: return a + b + c + d;
86: }
87:
88: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
89: vec3 i = q.xyz;
90: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
91: }
92:
93: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
94: return rotateVertexByQuat(v, quat(axis, angle));
95: }
96:
97: float diffuse(vec3 normal) {
98: vec3 n2 = normal * normal * vec3(.6, .25, .8);
99: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
100: }
101:
102:
103: struct Flap {
104: vec3 instancePos;
105: vec2 light;
106: vec3 segmentOffset;
107: vec3 pivot;
108: float horizontalAngle;
109: float intensity;
110: float flapScale;
111: float flapness;
112: };
113:
114:
115: struct Vertex {
116: vec3 pos;
117: vec3 normal;
118: vec2 texCoords;
119: };
120:
121: struct BlockFrag {
122: vec2 texCoords;
123: vec4 color;
124: float diffuse;
125: vec2 light;
126: };
127:
128:
129: float toRad(float degrees) {
130: return fract(degrees / 360.) * PI * 2.;
131: }
132:
133: float getFlapAngle(float flapness, float intensity, float scale) {
134: float absFlap = abs(flapness);
135:
136: float angle = sin((1. - absFlap) * PI * intensity) * 30. * flapness * scale;
137:
138: float halfAngle = angle * 0.5;
139:
140: float which = step(0., flapness);// 0 if negative, 1 if positive
141: float degrees = which * halfAngle + (1. - which) * angle;// branchless conditional multiply
142:
143: return degrees;
144: }
145:
146: BlockFrag FLWMain(Vertex v, Flap flap) {
147: float flapAngle = getFlapAngle(flap.flapness, flap.intensity, flap.flapScale);
148:
149: vec4 orientation = quat(vec3(0., 1., 0.), -flap.horizontalAngle);
150: vec4 flapRotation = quat(vec3(1., 0., 0.), flapAngle);
151:
152: vec3 rotated = rotateVertexByQuat(v.pos - flap.pivot, flapRotation) + flap.pivot + flap.segmentOffset;
153: rotated = rotateVertexByQuat(rotated - .5, orientation) + flap.instancePos + .5;
154:
155: vec4 worldPos = vec4(rotated, 1.);
156: vec3 norm = rotateVertexByQuat(rotateVertexByQuat(v.normal, flapRotation), orientation);
157:
158: FLWFinalizeWorldPos(worldPos);
159: FLWFinalizeNormal(norm);
160:
161: BlockFrag b;
162: b.diffuse = diffuse(norm);
163: b.texCoords = v.texCoords;
164: b.light = flap.light;
165: #if defined(DEBUG_NORMAL)
166: b.color = vec4(norm, 1.);
167: #else
168: b.color = vec4(1.);
169: #endif
170: return b;
171: }
172: attribute vec3 a_v_pos;
173: attribute vec3 a_v_normal;
174: attribute vec2 a_v_texCoords;
175:
176: attribute vec3 a_i_instancePos;
177: attribute vec2 a_i_light;
178: attribute vec3 a_i_segmentOffset;
179: attribute vec3 a_i_pivot;
180: attribute float a_i_horizontalAngle;
181: attribute float a_i_intensity;
182: attribute float a_i_flapScale;
183: attribute float a_i_flapness;
184:
185:
186: varying vec2 v2f_texCoords;
187: varying vec4 v2f_color;
188: varying float v2f_diffuse;
189: varying vec2 v2f_light;
190:
191:
192: void main() {
193: Vertex v;
194: v.pos = a_v_pos;
195: v.normal = a_v_normal;
196: v.texCoords = a_v_texCoords;
197:
198:
199: Flap i;
200: i.instancePos = a_i_instancePos;
201: i.light = a_i_light;
202: i.segmentOffset = a_i_segmentOffset;
203: i.pivot = a_i_pivot;
204: i.horizontalAngle = a_i_horizontalAngle;
205: i.intensity = a_i_intensity;
206: i.flapScale = a_i_flapScale;
207: i.flapness = a_i_flapness;
208:
209:
210: BlockFrag o = FLWMain(v, i);
211:
212: v2f_texCoords = o.texCoords;
213: v2f_color = o.color;
214: v2f_diffuse = o.diffuse;
215: v2f_light = o.light;
216:
217: }
[12:44:40] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:40] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
25: vec2 shiftLight(vec2 lm) {
26: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
27: }
28:
29: varying vec3 BoxCoord;
30: varying vec2 BoxLight;
31: uniform sampler3D uLightVolume;
32:
33: uniform sampler2D uBlockAtlas;
34: uniform sampler2D uLightMap;
35:
36: vec4 FLWBlockTexture(vec2 texCoords) {
37: return texture2D(uBlockAtlas, texCoords);
38: }
39:
40: void FLWFinalizeColor(vec4 color) {
41: #if defined(USE_FOG)
42: float a = color.a;
43: float fog = clamp(FLWFogFactor(), 0., 1.);
44:
45: color = mix(uFogColor, color, fog);
46: color.a = a;
47: #endif
48:
49: gl_FragColor = color;
50: }
51:
52: vec4 FLWLight(vec2 lightCoords) {
53: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
54:
55: return texture2D(uLightMap, shiftLight(lightCoords));
56: }
57:
58:
59:
60: struct BlockFrag {
61: vec2 texCoords;
62: vec4 color;
63: float diffuse;
64: vec2 light;
65: };
66:
67: void FLWMain(BlockFrag r) {
68: vec4 tex = FLWBlockTexture(r.texCoords);
69:
70: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
71:
72: // flw_WorldPos = ;
73: // flw_Normal = ;
74: // flw_Albedo = tex.rgb;
75: // flw_Alpha = tex.a;
76: // flw_LightMap = r.light;
77: // flw_Tint = r.color;
78: FLWFinalizeColor(color);
79: }
80:
81: varying vec2 v2f_texCoords;
82: varying vec4 v2f_color;
83: varying float v2f_diffuse;
84: varying vec2 v2f_light;
85:
86:
87: //vec3 flw_WorldPos;
88: //vec3 flw_Normal;
89: //vec3 flw_Albedo;
90: //float flw_Alpha;
91: //vec2 flw_LightMap;
92: //vec4 flw_Tint;
93:
94: void main() {
95: BlockFrag f;
96: f.texCoords = v2f_texCoords;
97: f.color = v2f_color;
98: f.diffuse = v2f_diffuse;
99: f.light = v2f_light;
100:
101:
102: FLWMain(f);
103: }
[12:44:40] [main/ERROR]: Shader compilation log for flywheel:oriented.vert: No errors.
[12:44:40] [main/ERROR]: Source for shader 'flywheel:oriented.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: #endif
7:
8: varying vec3 BoxCoord;
9:
10: uniform vec3 uLightBoxSize;
11: uniform vec3 uLightBoxMin;
12: uniform mat4 uModel;
13:
14: uniform float uTime;
15: uniform mat4 uViewProjection;
16: uniform vec3 uCameraPos;
17:
18: void FLWFinalizeWorldPos(inout vec4 worldPos) {
19: worldPos = uModel * worldPos;
20:
21: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
22:
23: #if defined(USE_FOG)
24: FragDistance = length(worldPos.xyz);
25: #endif
26:
27: gl_Position = uViewProjection * worldPos;
28: }
29:
30: void FLWFinalizeNormal(inout vec3 normal) {
31: mat3 m;
32: m[0] = uModel[0].xyz;
33: m[1] = uModel[1].xyz;
34: m[2] = uModel[2].xyz;
35: normal = m * normal;
36: }
37:
38:
39:
40: mat4 rotate(vec3 axis, float angle) {
41: float s = sin(angle);
42: float c = cos(angle);
43: float oc = 1. - c;
44:
45: vec3 sa = axis * s;
46:
47: mat4 mr = mat4(1.);
48: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
49: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
50: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
51:
52: return mr;
53: }
54:
55: mat4 rotation(vec3 rot) {
56: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
57: }
58:
59: mat3 modelToNormal(mat4 mat) {
60: // Discard the edges. This won't be accurate for scaled or skewed matrices,
61: // but we don't have to work with those often.
62: mat3 m;
63: m[0] = mat[0].xyz;
64: m[1] = mat[1].xyz;
65: m[2] = mat[2].xyz;
66: return m;
67: }
68:
69: #define PIOVER2 1.5707963268
70:
71: vec4 quat(vec3 axis, float angle) {
72: float halfAngle = angle * PIOVER2 / 180.0;
73: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
74: return vec4(axis.xyz * cs.y, cs.x);
75: }
76:
77: vec4 quatMult(vec4 q1, vec4 q2) {
78: // disgustingly vectorized quaternion multiplication
79: vec4 a = q1.w * q2.xyzw;
80: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
81: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
82: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
83:
84: return a + b + c + d;
85: }
86:
87: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
88: vec3 i = q.xyz;
89: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
90: }
91:
92: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
93: return rotateVertexByQuat(v, quat(axis, angle));
94: }
95:
96: float diffuse(vec3 normal) {
97: vec3 n2 = normal * normal * vec3(.6, .25, .8);
98: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
99: }
100:
101:
102: struct Oriented {
103: vec2 light;
104: vec4 color;
105: vec3 pos;
106: vec3 pivot;
107: vec4 rotation;
108: };
109:
110:
111: struct Vertex {
112: vec3 pos;
113: vec3 normal;
114: vec2 texCoords;
115: };
116:
117: struct BlockFrag {
118: vec2 texCoords;
119: vec4 color;
120: float diffuse;
121: vec2 light;
122: };
123:
124: BlockFrag FLWMain(Vertex v, Oriented o) {
125: vec4 worldPos = vec4(rotateVertexByQuat(v.pos - o.pivot, o.rotation) + o.pivot + o.pos, 1.);
126:
127: vec3 norm = rotateVertexByQuat(v.normal, o.rotation);
128:
129: FLWFinalizeWorldPos(worldPos);
130: FLWFinalizeNormal(norm);
131:
132: BlockFrag b;
133: b.diffuse = diffuse(norm);
134: b.texCoords = v.texCoords;
135: b.light = o.light;
136: #if defined(DEBUG_NORMAL)
137: b.color = vec4(norm, 1.);
138: #else
139: b.color = o.color;
140: #endif
141: return b;
142: }
143: attribute vec3 a_v_pos;
144: attribute vec3 a_v_normal;
145: attribute vec2 a_v_texCoords;
146:
147: attribute vec2 a_i_light;
148: attribute vec4 a_i_color;
149: attribute vec3 a_i_pos;
150: attribute vec3 a_i_pivot;
151: attribute vec4 a_i_rotation;
152:
153:
154: varying vec2 v2f_texCoords;
155: varying vec4 v2f_color;
156: varying float v2f_diffuse;
157: varying vec2 v2f_light;
158:
159:
160: void main() {
161: Vertex v;
162: v.pos = a_v_pos;
163: v.normal = a_v_normal;
164: v.texCoords = a_v_texCoords;
165:
166:
167: Oriented i;
168: i.light = a_i_light;
169: i.color = a_i_color;
170: i.pos = a_i_pos;
171: i.pivot = a_i_pivot;
172: i.rotation = a_i_rotation;
173:
174:
175: BlockFrag o = FLWMain(v, i);
176:
177: v2f_texCoords = o.texCoords;
178: v2f_color = o.color;
179: v2f_diffuse = o.diffuse;
180: v2f_light = o.light;
181:
182: }
[12:44:41] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:41] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: varying vec3 BoxCoord;
31: varying vec2 BoxLight;
32: uniform sampler3D uLightVolume;
33:
34: uniform sampler2D uBlockAtlas;
35: uniform sampler2D uLightMap;
36:
37: vec4 FLWBlockTexture(vec2 texCoords) {
38: return texture2D(uBlockAtlas, texCoords);
39: }
40:
41: void FLWFinalizeColor(vec4 color) {
42: #if defined(USE_FOG)
43: float a = color.a;
44: float fog = clamp(FLWFogFactor(), 0., 1.);
45:
46: color = mix(uFogColor, color, fog);
47: color.a = a;
48: #endif
49:
50: gl_FragColor = color;
51: }
52:
53: vec4 FLWLight(vec2 lightCoords) {
54: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
55:
56: return texture2D(uLightMap, shiftLight(lightCoords));
57: }
58:
59:
60:
61: struct BlockFrag {
62: vec2 texCoords;
63: vec4 color;
64: float diffuse;
65: vec2 light;
66: };
67:
68: void FLWMain(BlockFrag r) {
69: vec4 tex = FLWBlockTexture(r.texCoords);
70:
71: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
72:
73: // flw_WorldPos = ;
74: // flw_Normal = ;
75: // flw_Albedo = tex.rgb;
76: // flw_Alpha = tex.a;
77: // flw_LightMap = r.light;
78: // flw_Tint = r.color;
79: FLWFinalizeColor(color);
80: }
81:
82: varying vec2 v2f_texCoords;
83: varying vec4 v2f_color;
84: varying float v2f_diffuse;
85: varying vec2 v2f_light;
86:
87:
88: //vec3 flw_WorldPos;
89: //vec3 flw_Normal;
90: //vec3 flw_Albedo;
91: //float flw_Alpha;
92: //vec2 flw_LightMap;
93: //vec4 flw_Tint;
94:
95: void main() {
96: BlockFrag f;
97: f.texCoords = v2f_texCoords;
98: f.color = v2f_color;
99: f.diffuse = v2f_diffuse;
100: f.light = v2f_light;
101:
102:
103: FLWMain(f);
104: }
[12:44:41] [main/ERROR]: Shader compilation log for flywheel:oriented.vert: No errors.
[12:44:41] [main/ERROR]: Source for shader 'flywheel:oriented.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: #endif
8:
9: varying vec3 BoxCoord;
10:
11: uniform vec3 uLightBoxSize;
12: uniform vec3 uLightBoxMin;
13: uniform mat4 uModel;
14:
15: uniform float uTime;
16: uniform mat4 uViewProjection;
17: uniform vec3 uCameraPos;
18:
19: void FLWFinalizeWorldPos(inout vec4 worldPos) {
20: worldPos = uModel * worldPos;
21:
22: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
23:
24: #if defined(USE_FOG)
25: FragDistance = length(worldPos.xyz);
26: #endif
27:
28: gl_Position = uViewProjection * worldPos;
29: }
30:
31: void FLWFinalizeNormal(inout vec3 normal) {
32: mat3 m;
33: m[0] = uModel[0].xyz;
34: m[1] = uModel[1].xyz;
35: m[2] = uModel[2].xyz;
36: normal = m * normal;
37: }
38:
39:
40:
41: mat4 rotate(vec3 axis, float angle) {
42: float s = sin(angle);
43: float c = cos(angle);
44: float oc = 1. - c;
45:
46: vec3 sa = axis * s;
47:
48: mat4 mr = mat4(1.);
49: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
50: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
51: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
52:
53: return mr;
54: }
55:
56: mat4 rotation(vec3 rot) {
57: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
58: }
59:
60: mat3 modelToNormal(mat4 mat) {
61: // Discard the edges. This won't be accurate for scaled or skewed matrices,
62: // but we don't have to work with those often.
63: mat3 m;
64: m[0] = mat[0].xyz;
65: m[1] = mat[1].xyz;
66: m[2] = mat[2].xyz;
67: return m;
68: }
69:
70: #define PIOVER2 1.5707963268
71:
72: vec4 quat(vec3 axis, float angle) {
73: float halfAngle = angle * PIOVER2 / 180.0;
74: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
75: return vec4(axis.xyz * cs.y, cs.x);
76: }
77:
78: vec4 quatMult(vec4 q1, vec4 q2) {
79: // disgustingly vectorized quaternion multiplication
80: vec4 a = q1.w * q2.xyzw;
81: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
82: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
83: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
84:
85: return a + b + c + d;
86: }
87:
88: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
89: vec3 i = q.xyz;
90: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
91: }
92:
93: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
94: return rotateVertexByQuat(v, quat(axis, angle));
95: }
96:
97: float diffuse(vec3 normal) {
98: vec3 n2 = normal * normal * vec3(.6, .25, .8);
99: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
100: }
101:
102:
103: struct Oriented {
104: vec2 light;
105: vec4 color;
106: vec3 pos;
107: vec3 pivot;
108: vec4 rotation;
109: };
110:
111:
112: struct Vertex {
113: vec3 pos;
114: vec3 normal;
115: vec2 texCoords;
116: };
117:
118: struct BlockFrag {
119: vec2 texCoords;
120: vec4 color;
121: float diffuse;
122: vec2 light;
123: };
124:
125: BlockFrag FLWMain(Vertex v, Oriented o) {
126: vec4 worldPos = vec4(rotateVertexByQuat(v.pos - o.pivot, o.rotation) + o.pivot + o.pos, 1.);
127:
128: vec3 norm = rotateVertexByQuat(v.normal, o.rotation);
129:
130: FLWFinalizeWorldPos(worldPos);
131: FLWFinalizeNormal(norm);
132:
133: BlockFrag b;
134: b.diffuse = diffuse(norm);
135: b.texCoords = v.texCoords;
136: b.light = o.light;
137: #if defined(DEBUG_NORMAL)
138: b.color = vec4(norm, 1.);
139: #else
140: b.color = o.color;
141: #endif
142: return b;
143: }
144: attribute vec3 a_v_pos;
145: attribute vec3 a_v_normal;
146: attribute vec2 a_v_texCoords;
147:
148: attribute vec2 a_i_light;
149: attribute vec4 a_i_color;
150: attribute vec3 a_i_pos;
151: attribute vec3 a_i_pivot;
152: attribute vec4 a_i_rotation;
153:
154:
155: varying vec2 v2f_texCoords;
156: varying vec4 v2f_color;
157: varying float v2f_diffuse;
158: varying vec2 v2f_light;
159:
160:
161: void main() {
162: Vertex v;
163: v.pos = a_v_pos;
164: v.normal = a_v_normal;
165: v.texCoords = a_v_texCoords;
166:
167:
168: Oriented i;
169: i.light = a_i_light;
170: i.color = a_i_color;
171: i.pos = a_i_pos;
172: i.pivot = a_i_pivot;
173: i.rotation = a_i_rotation;
174:
175:
176: BlockFrag o = FLWMain(v, i);
177:
178: v2f_texCoords = o.texCoords;
179: v2f_color = o.color;
180: v2f_diffuse = o.diffuse;
181: v2f_light = o.light;
182:
183: }
[12:44:41] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:41] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: varying vec3 BoxCoord;
32: varying vec2 BoxLight;
33: uniform sampler3D uLightVolume;
34:
35: uniform sampler2D uBlockAtlas;
36: uniform sampler2D uLightMap;
37:
38: vec4 FLWBlockTexture(vec2 texCoords) {
39: return texture2D(uBlockAtlas, texCoords);
40: }
41:
42: void FLWFinalizeColor(vec4 color) {
43: #if defined(USE_FOG)
44: float a = color.a;
45: float fog = clamp(FLWFogFactor(), 0., 1.);
46:
47: color = mix(uFogColor, color, fog);
48: color.a = a;
49: #endif
50:
51: gl_FragColor = color;
52: }
53:
54: vec4 FLWLight(vec2 lightCoords) {
55: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
56:
57: return texture2D(uLightMap, shiftLight(lightCoords));
58: }
59:
60:
61:
62: struct BlockFrag {
63: vec2 texCoords;
64: vec4 color;
65: float diffuse;
66: vec2 light;
67: };
68:
69: void FLWMain(BlockFrag r) {
70: vec4 tex = FLWBlockTexture(r.texCoords);
71:
72: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
73:
74: // flw_WorldPos = ;
75: // flw_Normal = ;
76: // flw_Albedo = tex.rgb;
77: // flw_Alpha = tex.a;
78: // flw_LightMap = r.light;
79: // flw_Tint = r.color;
80: FLWFinalizeColor(color);
81: }
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: //vec3 flw_WorldPos;
90: //vec3 flw_Normal;
91: //vec3 flw_Albedo;
92: //float flw_Alpha;
93: //vec2 flw_LightMap;
94: //vec4 flw_Tint;
95:
96: void main() {
97: BlockFrag f;
98: f.texCoords = v2f_texCoords;
99: f.color = v2f_color;
100: f.diffuse = v2f_diffuse;
101: f.light = v2f_light;
102:
103:
104: FLWMain(f);
105: }
[12:44:41] [main/ERROR]: Shader compilation log for flywheel:oriented.vert: No errors.
[12:44:45] [main/ERROR]: Source for shader 'flywheel:oriented.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: #endif
8:
9: varying vec3 BoxCoord;
10:
11: uniform vec3 uLightBoxSize;
12: uniform vec3 uLightBoxMin;
13: uniform mat4 uModel;
14:
15: uniform float uTime;
16: uniform mat4 uViewProjection;
17: uniform vec3 uCameraPos;
18:
19: void FLWFinalizeWorldPos(inout vec4 worldPos) {
20: worldPos = uModel * worldPos;
21:
22: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
23:
24: #if defined(USE_FOG)
25: FragDistance = length(worldPos.xyz);
26: #endif
27:
28: gl_Position = uViewProjection * worldPos;
29: }
30:
31: void FLWFinalizeNormal(inout vec3 normal) {
32: mat3 m;
33: m[0] = uModel[0].xyz;
34: m[1] = uModel[1].xyz;
35: m[2] = uModel[2].xyz;
36: normal = m * normal;
37: }
38:
39:
40:
41: mat4 rotate(vec3 axis, float angle) {
42: float s = sin(angle);
43: float c = cos(angle);
44: float oc = 1. - c;
45:
46: vec3 sa = axis * s;
47:
48: mat4 mr = mat4(1.);
49: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
50: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
51: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
52:
53: return mr;
54: }
55:
56: mat4 rotation(vec3 rot) {
57: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
58: }
59:
60: mat3 modelToNormal(mat4 mat) {
61: // Discard the edges. This won't be accurate for scaled or skewed matrices,
62: // but we don't have to work with those often.
63: mat3 m;
64: m[0] = mat[0].xyz;
65: m[1] = mat[1].xyz;
66: m[2] = mat[2].xyz;
67: return m;
68: }
69:
70: #define PIOVER2 1.5707963268
71:
72: vec4 quat(vec3 axis, float angle) {
73: float halfAngle = angle * PIOVER2 / 180.0;
74: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
75: return vec4(axis.xyz * cs.y, cs.x);
76: }
77:
78: vec4 quatMult(vec4 q1, vec4 q2) {
79: // disgustingly vectorized quaternion multiplication
80: vec4 a = q1.w * q2.xyzw;
81: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
82: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
83: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
84:
85: return a + b + c + d;
86: }
87:
88: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
89: vec3 i = q.xyz;
90: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
91: }
92:
93: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
94: return rotateVertexByQuat(v, quat(axis, angle));
95: }
96:
97: float diffuse(vec3 normal) {
98: vec3 n2 = normal * normal * vec3(.6, .25, .8);
99: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
100: }
101:
102:
103: struct Oriented {
104: vec2 light;
105: vec4 color;
106: vec3 pos;
107: vec3 pivot;
108: vec4 rotation;
109: };
110:
111:
112: struct Vertex {
113: vec3 pos;
114: vec3 normal;
115: vec2 texCoords;
116: };
117:
118: struct BlockFrag {
119: vec2 texCoords;
120: vec4 color;
121: float diffuse;
122: vec2 light;
123: };
124:
125: BlockFrag FLWMain(Vertex v, Oriented o) {
126: vec4 worldPos = vec4(rotateVertexByQuat(v.pos - o.pivot, o.rotation) + o.pivot + o.pos, 1.);
127:
128: vec3 norm = rotateVertexByQuat(v.normal, o.rotation);
129:
130: FLWFinalizeWorldPos(worldPos);
131: FLWFinalizeNormal(norm);
132:
133: BlockFrag b;
134: b.diffuse = diffuse(norm);
135: b.texCoords = v.texCoords;
136: b.light = o.light;
137: #if defined(DEBUG_NORMAL)
138: b.color = vec4(norm, 1.);
139: #else
140: b.color = o.color;
141: #endif
142: return b;
143: }
144: attribute vec3 a_v_pos;
145: attribute vec3 a_v_normal;
146: attribute vec2 a_v_texCoords;
147:
148: attribute vec2 a_i_light;
149: attribute vec4 a_i_color;
150: attribute vec3 a_i_pos;
151: attribute vec3 a_i_pivot;
152: attribute vec4 a_i_rotation;
153:
154:
155: varying vec2 v2f_texCoords;
156: varying vec4 v2f_color;
157: varying float v2f_diffuse;
158: varying vec2 v2f_light;
159:
160:
161: void main() {
162: Vertex v;
163: v.pos = a_v_pos;
164: v.normal = a_v_normal;
165: v.texCoords = a_v_texCoords;
166:
167:
168: Oriented i;
169: i.light = a_i_light;
170: i.color = a_i_color;
171: i.pos = a_i_pos;
172: i.pivot = a_i_pivot;
173: i.rotation = a_i_rotation;
174:
175:
176: BlockFrag o = FLWMain(v, i);
177:
178: v2f_texCoords = o.texCoords;
179: v2f_color = o.color;
180: v2f_diffuse = o.diffuse;
181: v2f_light = o.light;
182:
183: }
[12:44:48] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:48] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: varying vec3 BoxCoord;
32: varying vec2 BoxLight;
33: uniform sampler3D uLightVolume;
34:
35: uniform sampler2D uBlockAtlas;
36: uniform sampler2D uLightMap;
37:
38: vec4 FLWBlockTexture(vec2 texCoords) {
39: return texture2D(uBlockAtlas, texCoords);
40: }
41:
42: void FLWFinalizeColor(vec4 color) {
43: #if defined(USE_FOG)
44: float a = color.a;
45: float fog = clamp(FLWFogFactor(), 0., 1.);
46:
47: color = mix(uFogColor, color, fog);
48: color.a = a;
49: #endif
50:
51: gl_FragColor = color;
52: }
53:
54: vec4 FLWLight(vec2 lightCoords) {
55: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
56:
57: return texture2D(uLightMap, shiftLight(lightCoords));
58: }
59:
60:
61:
62: struct BlockFrag {
63: vec2 texCoords;
64: vec4 color;
65: float diffuse;
66: vec2 light;
67: };
68:
69: void FLWMain(BlockFrag r) {
70: vec4 tex = FLWBlockTexture(r.texCoords);
71:
72: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
73:
74: // flw_WorldPos = ;
75: // flw_Normal = ;
76: // flw_Albedo = tex.rgb;
77: // flw_Alpha = tex.a;
78: // flw_LightMap = r.light;
79: // flw_Tint = r.color;
80: FLWFinalizeColor(color);
81: }
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: //vec3 flw_WorldPos;
90: //vec3 flw_Normal;
91: //vec3 flw_Albedo;
92: //float flw_Alpha;
93: //vec2 flw_LightMap;
94: //vec4 flw_Tint;
95:
96: void main() {
97: BlockFrag f;
98: f.texCoords = v2f_texCoords;
99: f.color = v2f_color;
100: f.diffuse = v2f_diffuse;
101: f.light = v2f_light;
102:
103:
104: FLWMain(f);
105: }
[12:44:48] [main/ERROR]: Shader compilation log for flywheel:oriented.vert: No errors.
[12:44:48] [main/ERROR]: Source for shader 'flywheel:oriented.vert':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: #endif
6:
7: varying vec3 BoxCoord;
8:
9: uniform vec3 uLightBoxSize;
10: uniform vec3 uLightBoxMin;
11: uniform mat4 uModel;
12:
13: uniform float uTime;
14: uniform mat4 uViewProjection;
15: uniform vec3 uCameraPos;
16:
17: void FLWFinalizeWorldPos(inout vec4 worldPos) {
18: worldPos = uModel * worldPos;
19:
20: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
21:
22: #if defined(USE_FOG)
23: FragDistance = length(worldPos.xyz);
24: #endif
25:
26: gl_Position = uViewProjection * worldPos;
27: }
28:
29: void FLWFinalizeNormal(inout vec3 normal) {
30: mat3 m;
31: m[0] = uModel[0].xyz;
32: m[1] = uModel[1].xyz;
33: m[2] = uModel[2].xyz;
34: normal = m * normal;
35: }
36:
37:
38:
39: mat4 rotate(vec3 axis, float angle) {
40: float s = sin(angle);
41: float c = cos(angle);
42: float oc = 1. - c;
43:
44: vec3 sa = axis * s;
45:
46: mat4 mr = mat4(1.);
47: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
48: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
49: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
50:
51: return mr;
52: }
53:
54: mat4 rotation(vec3 rot) {
55: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
56: }
57:
58: mat3 modelToNormal(mat4 mat) {
59: // Discard the edges. This won't be accurate for scaled or skewed matrices,
60: // but we don't have to work with those often.
61: mat3 m;
62: m[0] = mat[0].xyz;
63: m[1] = mat[1].xyz;
64: m[2] = mat[2].xyz;
65: return m;
66: }
67:
68: #define PIOVER2 1.5707963268
69:
70: vec4 quat(vec3 axis, float angle) {
71: float halfAngle = angle * PIOVER2 / 180.0;
72: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
73: return vec4(axis.xyz * cs.y, cs.x);
74: }
75:
76: vec4 quatMult(vec4 q1, vec4 q2) {
77: // disgustingly vectorized quaternion multiplication
78: vec4 a = q1.w * q2.xyzw;
79: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
80: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
81: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
82:
83: return a + b + c + d;
84: }
85:
86: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
87: vec3 i = q.xyz;
88: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
89: }
90:
91: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
92: return rotateVertexByQuat(v, quat(axis, angle));
93: }
94:
95: float diffuse(vec3 normal) {
96: vec3 n2 = normal * normal * vec3(.6, .25, .8);
97: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
98: }
99:
100:
101: struct Oriented {
102: vec2 light;
103: vec4 color;
104: vec3 pos;
105: vec3 pivot;
106: vec4 rotation;
107: };
108:
109:
110: struct Vertex {
111: vec3 pos;
112: vec3 normal;
113: vec2 texCoords;
114: };
115:
116: struct BlockFrag {
117: vec2 texCoords;
118: vec4 color;
119: float diffuse;
120: vec2 light;
121: };
122:
123: BlockFrag FLWMain(Vertex v, Oriented o) {
124: vec4 worldPos = vec4(rotateVertexByQuat(v.pos - o.pivot, o.rotation) + o.pivot + o.pos, 1.);
125:
126: vec3 norm = rotateVertexByQuat(v.normal, o.rotation);
127:
128: FLWFinalizeWorldPos(worldPos);
129: FLWFinalizeNormal(norm);
130:
131: BlockFrag b;
132: b.diffuse = diffuse(norm);
133: b.texCoords = v.texCoords;
134: b.light = o.light;
135: #if defined(DEBUG_NORMAL)
136: b.color = vec4(norm, 1.);
137: #else
138: b.color = o.color;
139: #endif
140: return b;
141: }
142: attribute vec3 a_v_pos;
143: attribute vec3 a_v_normal;
144: attribute vec2 a_v_texCoords;
145:
146: attribute vec2 a_i_light;
147: attribute vec4 a_i_color;
148: attribute vec3 a_i_pos;
149: attribute vec3 a_i_pivot;
150: attribute vec4 a_i_rotation;
151:
152:
153: varying vec2 v2f_texCoords;
154: varying vec4 v2f_color;
155: varying float v2f_diffuse;
156: varying vec2 v2f_light;
157:
158:
159: void main() {
160: Vertex v;
161: v.pos = a_v_pos;
162: v.normal = a_v_normal;
163: v.texCoords = a_v_texCoords;
164:
165:
166: Oriented i;
167: i.light = a_i_light;
168: i.color = a_i_color;
169: i.pos = a_i_pos;
170: i.pivot = a_i_pivot;
171: i.rotation = a_i_rotation;
172:
173:
174: BlockFrag o = FLWMain(v, i);
175:
176: v2f_texCoords = o.texCoords;
177: v2f_color = o.color;
178: v2f_diffuse = o.diffuse;
179: v2f_light = o.light;
180:
181: }
[12:44:51] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:51] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
25: vec2 shiftLight(vec2 lm) {
26: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
27: }
28:
29: varying vec3 BoxCoord;
30: varying vec2 BoxLight;
31: uniform sampler3D uLightVolume;
32:
33: uniform sampler2D uBlockAtlas;
34: uniform sampler2D uLightMap;
35:
36: vec4 FLWBlockTexture(vec2 texCoords) {
37: return texture2D(uBlockAtlas, texCoords);
38: }
39:
40: void FLWFinalizeColor(vec4 color) {
41: #if defined(USE_FOG)
42: float a = color.a;
43: float fog = clamp(FLWFogFactor(), 0., 1.);
44:
45: color = mix(uFogColor, color, fog);
46: color.a = a;
47: #endif
48:
49: gl_FragColor = color;
50: }
51:
52: vec4 FLWLight(vec2 lightCoords) {
53: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
54:
55: return texture2D(uLightMap, shiftLight(lightCoords));
56: }
57:
58:
59:
60: struct BlockFrag {
61: vec2 texCoords;
62: vec4 color;
63: float diffuse;
64: vec2 light;
65: };
66:
67: void FLWMain(BlockFrag r) {
68: vec4 tex = FLWBlockTexture(r.texCoords);
69:
70: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
71:
72: // flw_WorldPos = ;
73: // flw_Normal = ;
74: // flw_Albedo = tex.rgb;
75: // flw_Alpha = tex.a;
76: // flw_LightMap = r.light;
77: // flw_Tint = r.color;
78: FLWFinalizeColor(color);
79: }
80:
81: varying vec2 v2f_texCoords;
82: varying vec4 v2f_color;
83: varying float v2f_diffuse;
84: varying vec2 v2f_light;
85:
86:
87: //vec3 flw_WorldPos;
88: //vec3 flw_Normal;
89: //vec3 flw_Albedo;
90: //float flw_Alpha;
91: //vec2 flw_LightMap;
92: //vec4 flw_Tint;
93:
94: void main() {
95: BlockFrag f;
96: f.texCoords = v2f_texCoords;
97: f.color = v2f_color;
98: f.diffuse = v2f_diffuse;
99: f.light = v2f_light;
100:
101:
102: FLWMain(f);
103: }
[12:44:51] [main/ERROR]: Shader compilation log for flywheel:model.vert: No errors.
[12:44:51] [main/ERROR]: Source for shader 'flywheel:model.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: #endif
7:
8: varying vec3 BoxCoord;
9:
10: uniform vec3 uLightBoxSize;
11: uniform vec3 uLightBoxMin;
12: uniform mat4 uModel;
13:
14: uniform float uTime;
15: uniform mat4 uViewProjection;
16: uniform vec3 uCameraPos;
17:
18: void FLWFinalizeWorldPos(inout vec4 worldPos) {
19: worldPos = uModel * worldPos;
20:
21: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
22:
23: #if defined(USE_FOG)
24: FragDistance = length(worldPos.xyz);
25: #endif
26:
27: gl_Position = uViewProjection * worldPos;
28: }
29:
30: void FLWFinalizeNormal(inout vec3 normal) {
31: mat3 m;
32: m[0] = uModel[0].xyz;
33: m[1] = uModel[1].xyz;
34: m[2] = uModel[2].xyz;
35: normal = m * normal;
36: }
37:
38:
39:
40: float diffuse(vec3 normal) {
41: vec3 n2 = normal * normal * vec3(.6, .25, .8);
42: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
43: }
44:
45:
46: struct Vertex {
47: vec3 pos;
48: vec3 normal;
49: vec2 texCoords;
50: };
51:
52: struct BlockFrag {
53: vec2 texCoords;
54: vec4 color;
55: float diffuse;
56: vec2 light;
57: };
58:
59:
60: struct Instance {
61: vec2 light;
62: vec4 color;
63: mat4 transform;
64: mat3 normalMat;
65: };
66:
67: BlockFrag FLWMain(Vertex v, Instance i) {
68: vec4 worldPos = i.transform * vec4(v.pos, 1.);
69:
70: vec3 norm = i.normalMat * v.normal;
71:
72: FLWFinalizeWorldPos(worldPos);
73: FLWFinalizeNormal(norm);
74:
75: norm = normalize(norm);
76:
77: BlockFrag b;
78: b.diffuse = diffuse(norm);
79: b.texCoords = v.texCoords;
80: b.light = i.light;
81: #if defined(DEBUG_NORMAL)
82: b.color = vec4(norm, 1.);
83: #else
84: b.color = i.color;
85: #endif
86: return b;
87: }
88: attribute vec3 a_v_pos;
89: attribute vec3 a_v_normal;
90: attribute vec2 a_v_texCoords;
91:
92: attribute vec2 a_i_light;
93: attribute vec4 a_i_color;
94: attribute mat4 a_i_transform;
95: attribute mat3 a_i_normalMat;
96:
97:
98: varying vec2 v2f_texCoords;
99: varying vec4 v2f_color;
100: varying float v2f_diffuse;
101: varying vec2 v2f_light;
102:
103:
104: void main() {
105: Vertex v;
106: v.pos = a_v_pos;
107: v.normal = a_v_normal;
108: v.texCoords = a_v_texCoords;
109:
110:
111: Instance i;
112: i.light = a_i_light;
113: i.color = a_i_color;
114: i.transform = a_i_transform;
115: i.normalMat = a_i_normalMat;
116:
117:
118: BlockFrag o = FLWMain(v, i);
119:
120: v2f_texCoords = o.texCoords;
121: v2f_color = o.color;
122: v2f_diffuse = o.diffuse;
123: v2f_light = o.light;
124:
125: }
[12:44:53] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:53] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: varying vec3 BoxCoord;
31: varying vec2 BoxLight;
32: uniform sampler3D uLightVolume;
33:
34: uniform sampler2D uBlockAtlas;
35: uniform sampler2D uLightMap;
36:
37: vec4 FLWBlockTexture(vec2 texCoords) {
38: return texture2D(uBlockAtlas, texCoords);
39: }
40:
41: void FLWFinalizeColor(vec4 color) {
42: #if defined(USE_FOG)
43: float a = color.a;
44: float fog = clamp(FLWFogFactor(), 0., 1.);
45:
46: color = mix(uFogColor, color, fog);
47: color.a = a;
48: #endif
49:
50: gl_FragColor = color;
51: }
52:
53: vec4 FLWLight(vec2 lightCoords) {
54: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
55:
56: return texture2D(uLightMap, shiftLight(lightCoords));
57: }
58:
59:
60:
61: struct BlockFrag {
62: vec2 texCoords;
63: vec4 color;
64: float diffuse;
65: vec2 light;
66: };
67:
68: void FLWMain(BlockFrag r) {
69: vec4 tex = FLWBlockTexture(r.texCoords);
70:
71: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
72:
73: // flw_WorldPos = ;
74: // flw_Normal = ;
75: // flw_Albedo = tex.rgb;
76: // flw_Alpha = tex.a;
77: // flw_LightMap = r.light;
78: // flw_Tint = r.color;
79: FLWFinalizeColor(color);
80: }
81:
82: varying vec2 v2f_texCoords;
83: varying vec4 v2f_color;
84: varying float v2f_diffuse;
85: varying vec2 v2f_light;
86:
87:
88: //vec3 flw_WorldPos;
89: //vec3 flw_Normal;
90: //vec3 flw_Albedo;
91: //float flw_Alpha;
92: //vec2 flw_LightMap;
93: //vec4 flw_Tint;
94:
95: void main() {
96: BlockFrag f;
97: f.texCoords = v2f_texCoords;
98: f.color = v2f_color;
99: f.diffuse = v2f_diffuse;
100: f.light = v2f_light;
101:
102:
103: FLWMain(f);
104: }
[12:44:53] [main/ERROR]: Shader compilation log for flywheel:model.vert: No errors.
[12:44:53] [main/ERROR]: Source for shader 'flywheel:model.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: #endif
8:
9: varying vec3 BoxCoord;
10:
11: uniform vec3 uLightBoxSize;
12: uniform vec3 uLightBoxMin;
13: uniform mat4 uModel;
14:
15: uniform float uTime;
16: uniform mat4 uViewProjection;
17: uniform vec3 uCameraPos;
18:
19: void FLWFinalizeWorldPos(inout vec4 worldPos) {
20: worldPos = uModel * worldPos;
21:
22: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
23:
24: #if defined(USE_FOG)
25: FragDistance = length(worldPos.xyz);
26: #endif
27:
28: gl_Position = uViewProjection * worldPos;
29: }
30:
31: void FLWFinalizeNormal(inout vec3 normal) {
32: mat3 m;
33: m[0] = uModel[0].xyz;
34: m[1] = uModel[1].xyz;
35: m[2] = uModel[2].xyz;
36: normal = m * normal;
37: }
38:
39:
40:
41: float diffuse(vec3 normal) {
42: vec3 n2 = normal * normal * vec3(.6, .25, .8);
43: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
44: }
45:
46:
47: struct Vertex {
48: vec3 pos;
49: vec3 normal;
50: vec2 texCoords;
51: };
52:
53: struct BlockFrag {
54: vec2 texCoords;
55: vec4 color;
56: float diffuse;
57: vec2 light;
58: };
59:
60:
61: struct Instance {
62: vec2 light;
63: vec4 color;
64: mat4 transform;
65: mat3 normalMat;
66: };
67:
68: BlockFrag FLWMain(Vertex v, Instance i) {
69: vec4 worldPos = i.transform * vec4(v.pos, 1.);
70:
71: vec3 norm = i.normalMat * v.normal;
72:
73: FLWFinalizeWorldPos(worldPos);
74: FLWFinalizeNormal(norm);
75:
76: norm = normalize(norm);
77:
78: BlockFrag b;
79: b.diffuse = diffuse(norm);
80: b.texCoords = v.texCoords;
81: b.light = i.light;
82: #if defined(DEBUG_NORMAL)
83: b.color = vec4(norm, 1.);
84: #else
85: b.color = i.color;
86: #endif
87: return b;
88: }
89: attribute vec3 a_v_pos;
90: attribute vec3 a_v_normal;
91: attribute vec2 a_v_texCoords;
92:
93: attribute vec2 a_i_light;
94: attribute vec4 a_i_color;
95: attribute mat4 a_i_transform;
96: attribute mat3 a_i_normalMat;
97:
98:
99: varying vec2 v2f_texCoords;
100: varying vec4 v2f_color;
101: varying float v2f_diffuse;
102: varying vec2 v2f_light;
103:
104:
105: void main() {
106: Vertex v;
107: v.pos = a_v_pos;
108: v.normal = a_v_normal;
109: v.texCoords = a_v_texCoords;
110:
111:
112: Instance i;
113: i.light = a_i_light;
114: i.color = a_i_color;
115: i.transform = a_i_transform;
116: i.normalMat = a_i_normalMat;
117:
118:
119: BlockFrag o = FLWMain(v, i);
120:
121: v2f_texCoords = o.texCoords;
122: v2f_color = o.color;
123: v2f_diffuse = o.diffuse;
124: v2f_light = o.light;
125:
126: }
[12:44:56] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:56] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: varying vec3 BoxCoord;
32: varying vec2 BoxLight;
33: uniform sampler3D uLightVolume;
34:
35: uniform sampler2D uBlockAtlas;
36: uniform sampler2D uLightMap;
37:
38: vec4 FLWBlockTexture(vec2 texCoords) {
39: return texture2D(uBlockAtlas, texCoords);
40: }
41:
42: void FLWFinalizeColor(vec4 color) {
43: #if defined(USE_FOG)
44: float a = color.a;
45: float fog = clamp(FLWFogFactor(), 0., 1.);
46:
47: color = mix(uFogColor, color, fog);
48: color.a = a;
49: #endif
50:
51: gl_FragColor = color;
52: }
53:
54: vec4 FLWLight(vec2 lightCoords) {
55: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
56:
57: return texture2D(uLightMap, shiftLight(lightCoords));
58: }
59:
60:
61:
62: struct BlockFrag {
63: vec2 texCoords;
64: vec4 color;
65: float diffuse;
66: vec2 light;
67: };
68:
69: void FLWMain(BlockFrag r) {
70: vec4 tex = FLWBlockTexture(r.texCoords);
71:
72: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
73:
74: // flw_WorldPos = ;
75: // flw_Normal = ;
76: // flw_Albedo = tex.rgb;
77: // flw_Alpha = tex.a;
78: // flw_LightMap = r.light;
79: // flw_Tint = r.color;
80: FLWFinalizeColor(color);
81: }
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: //vec3 flw_WorldPos;
90: //vec3 flw_Normal;
91: //vec3 flw_Albedo;
92: //float flw_Alpha;
93: //vec2 flw_LightMap;
94: //vec4 flw_Tint;
95:
96: void main() {
97: BlockFrag f;
98: f.texCoords = v2f_texCoords;
99: f.color = v2f_color;
100: f.diffuse = v2f_diffuse;
101: f.light = v2f_light;
102:
103:
104: FLWMain(f);
105: }
[12:44:56] [main/ERROR]: Shader compilation log for flywheel:model.vert: No errors.
[12:44:56] [main/ERROR]: Source for shader 'flywheel:model.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: #endif
8:
9: varying vec3 BoxCoord;
10:
11: uniform vec3 uLightBoxSize;
12: uniform vec3 uLightBoxMin;
13: uniform mat4 uModel;
14:
15: uniform float uTime;
16: uniform mat4 uViewProjection;
17: uniform vec3 uCameraPos;
18:
19: void FLWFinalizeWorldPos(inout vec4 worldPos) {
20: worldPos = uModel * worldPos;
21:
22: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
23:
24: #if defined(USE_FOG)
25: FragDistance = length(worldPos.xyz);
26: #endif
27:
28: gl_Position = uViewProjection * worldPos;
29: }
30:
31: void FLWFinalizeNormal(inout vec3 normal) {
32: mat3 m;
33: m[0] = uModel[0].xyz;
34: m[1] = uModel[1].xyz;
35: m[2] = uModel[2].xyz;
36: normal = m * normal;
37: }
38:
39:
40:
41: float diffuse(vec3 normal) {
42: vec3 n2 = normal * normal * vec3(.6, .25, .8);
43: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
44: }
45:
46:
47: struct Vertex {
48: vec3 pos;
49: vec3 normal;
50: vec2 texCoords;
51: };
52:
53: struct BlockFrag {
54: vec2 texCoords;
55: vec4 color;
56: float diffuse;
57: vec2 light;
58: };
59:
60:
61: struct Instance {
62: vec2 light;
63: vec4 color;
64: mat4 transform;
65: mat3 normalMat;
66: };
67:
68: BlockFrag FLWMain(Vertex v, Instance i) {
69: vec4 worldPos = i.transform * vec4(v.pos, 1.);
70:
71: vec3 norm = i.normalMat * v.normal;
72:
73: FLWFinalizeWorldPos(worldPos);
74: FLWFinalizeNormal(norm);
75:
76: norm = normalize(norm);
77:
78: BlockFrag b;
79: b.diffuse = diffuse(norm);
80: b.texCoords = v.texCoords;
81: b.light = i.light;
82: #if defined(DEBUG_NORMAL)
83: b.color = vec4(norm, 1.);
84: #else
85: b.color = i.color;
86: #endif
87: return b;
88: }
89: attribute vec3 a_v_pos;
90: attribute vec3 a_v_normal;
91: attribute vec2 a_v_texCoords;
92:
93: attribute vec2 a_i_light;
94: attribute vec4 a_i_color;
95: attribute mat4 a_i_transform;
96: attribute mat3 a_i_normalMat;
97:
98:
99: varying vec2 v2f_texCoords;
100: varying vec4 v2f_color;
101: varying float v2f_diffuse;
102: varying vec2 v2f_light;
103:
104:
105: void main() {
106: Vertex v;
107: v.pos = a_v_pos;
108: v.normal = a_v_normal;
109: v.texCoords = a_v_texCoords;
110:
111:
112: Instance i;
113: i.light = a_i_light;
114: i.color = a_i_color;
115: i.transform = a_i_transform;
116: i.normalMat = a_i_normalMat;
117:
118:
119: BlockFrag o = FLWMain(v, i);
120:
121: v2f_texCoords = o.texCoords;
122: v2f_color = o.color;
123: v2f_diffuse = o.diffuse;
124: v2f_light = o.light;
125:
126: }
[12:44:59] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:44:59] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: varying vec3 BoxCoord;
32: varying vec2 BoxLight;
33: uniform sampler3D uLightVolume;
34:
35: uniform sampler2D uBlockAtlas;
36: uniform sampler2D uLightMap;
37:
38: vec4 FLWBlockTexture(vec2 texCoords) {
39: return texture2D(uBlockAtlas, texCoords);
40: }
41:
42: void FLWFinalizeColor(vec4 color) {
43: #if defined(USE_FOG)
44: float a = color.a;
45: float fog = clamp(FLWFogFactor(), 0., 1.);
46:
47: color = mix(uFogColor, color, fog);
48: color.a = a;
49: #endif
50:
51: gl_FragColor = color;
52: }
53:
54: vec4 FLWLight(vec2 lightCoords) {
55: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
56:
57: return texture2D(uLightMap, shiftLight(lightCoords));
58: }
59:
60:
61:
62: struct BlockFrag {
63: vec2 texCoords;
64: vec4 color;
65: float diffuse;
66: vec2 light;
67: };
68:
69: void FLWMain(BlockFrag r) {
70: vec4 tex = FLWBlockTexture(r.texCoords);
71:
72: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
73:
74: // flw_WorldPos = ;
75: // flw_Normal = ;
76: // flw_Albedo = tex.rgb;
77: // flw_Alpha = tex.a;
78: // flw_LightMap = r.light;
79: // flw_Tint = r.color;
80: FLWFinalizeColor(color);
81: }
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: //vec3 flw_WorldPos;
90: //vec3 flw_Normal;
91: //vec3 flw_Albedo;
92: //float flw_Alpha;
93: //vec2 flw_LightMap;
94: //vec4 flw_Tint;
95:
96: void main() {
97: BlockFrag f;
98: f.texCoords = v2f_texCoords;
99: f.color = v2f_color;
100: f.diffuse = v2f_diffuse;
101: f.light = v2f_light;
102:
103:
104: FLWMain(f);
105: }
[12:44:59] [main/ERROR]: Shader compilation log for flywheel:model.vert: No errors.
[12:44:59] [main/ERROR]: Source for shader 'flywheel:model.vert':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: #endif
6:
7: varying vec3 BoxCoord;
8:
9: uniform vec3 uLightBoxSize;
10: uniform vec3 uLightBoxMin;
11: uniform mat4 uModel;
12:
13: uniform float uTime;
14: uniform mat4 uViewProjection;
15: uniform vec3 uCameraPos;
16:
17: void FLWFinalizeWorldPos(inout vec4 worldPos) {
18: worldPos = uModel * worldPos;
19:
20: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
21:
22: #if defined(USE_FOG)
23: FragDistance = length(worldPos.xyz);
24: #endif
25:
26: gl_Position = uViewProjection * worldPos;
27: }
28:
29: void FLWFinalizeNormal(inout vec3 normal) {
30: mat3 m;
31: m[0] = uModel[0].xyz;
32: m[1] = uModel[1].xyz;
33: m[2] = uModel[2].xyz;
34: normal = m * normal;
35: }
36:
37:
38:
39: float diffuse(vec3 normal) {
40: vec3 n2 = normal * normal * vec3(.6, .25, .8);
41: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
42: }
43:
44:
45: struct Vertex {
46: vec3 pos;
47: vec3 normal;
48: vec2 texCoords;
49: };
50:
51: struct BlockFrag {
52: vec2 texCoords;
53: vec4 color;
54: float diffuse;
55: vec2 light;
56: };
57:
58:
59: struct Instance {
60: vec2 light;
61: vec4 color;
62: mat4 transform;
63: mat3 normalMat;
64: };
65:
66: BlockFrag FLWMain(Vertex v, Instance i) {
67: vec4 worldPos = i.transform * vec4(v.pos, 1.);
68:
69: vec3 norm = i.normalMat * v.normal;
70:
71: FLWFinalizeWorldPos(worldPos);
72: FLWFinalizeNormal(norm);
73:
74: norm = normalize(norm);
75:
76: BlockFrag b;
77: b.diffuse = diffuse(norm);
78: b.texCoords = v.texCoords;
79: b.light = i.light;
80: #if defined(DEBUG_NORMAL)
81: b.color = vec4(norm, 1.);
82: #else
83: b.color = i.color;
84: #endif
85: return b;
86: }
87: attribute vec3 a_v_pos;
88: attribute vec3 a_v_normal;
89: attribute vec2 a_v_texCoords;
90:
91: attribute vec2 a_i_light;
92: attribute vec4 a_i_color;
93: attribute mat4 a_i_transform;
94: attribute mat3 a_i_normalMat;
95:
96:
97: varying vec2 v2f_texCoords;
98: varying vec4 v2f_color;
99: varying float v2f_diffuse;
100: varying vec2 v2f_light;
101:
102:
103: void main() {
104: Vertex v;
105: v.pos = a_v_pos;
106: v.normal = a_v_normal;
107: v.texCoords = a_v_texCoords;
108:
109:
110: Instance i;
111: i.light = a_i_light;
112: i.color = a_i_color;
113: i.transform = a_i_transform;
114: i.normalMat = a_i_normalMat;
115:
116:
117: BlockFrag o = FLWMain(v, i);
118:
119: v2f_texCoords = o.texCoords;
120: v2f_color = o.color;
121: v2f_diffuse = o.diffuse;
122: v2f_light = o.light;
123:
124: }
[12:45:04] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:45:04] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
25: vec2 shiftLight(vec2 lm) {
26: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
27: }
28:
29: varying vec3 BoxCoord;
30: varying vec2 BoxLight;
31: uniform sampler3D uLightVolume;
32:
33: uniform sampler2D uBlockAtlas;
34: uniform sampler2D uLightMap;
35:
36: vec4 FLWBlockTexture(vec2 texCoords) {
37: return texture2D(uBlockAtlas, texCoords);
38: }
39:
40: void FLWFinalizeColor(vec4 color) {
41: #if defined(USE_FOG)
42: float a = color.a;
43: float fog = clamp(FLWFogFactor(), 0., 1.);
44:
45: color = mix(uFogColor, color, fog);
46: color.a = a;
47: #endif
48:
49: gl_FragColor = color;
50: }
51:
52: vec4 FLWLight(vec2 lightCoords) {
53: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
54:
55: return texture2D(uLightMap, shiftLight(lightCoords));
56: }
57:
58:
59:
60: struct BlockFrag {
61: vec2 texCoords;
62: vec4 color;
63: float diffuse;
64: vec2 light;
65: };
66:
67: void FLWMain(BlockFrag r) {
68: vec4 tex = FLWBlockTexture(r.texCoords);
69:
70: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
71:
72: // flw_WorldPos = ;
73: // flw_Normal = ;
74: // flw_Albedo = tex.rgb;
75: // flw_Alpha = tex.a;
76: // flw_LightMap = r.light;
77: // flw_Tint = r.color;
78: FLWFinalizeColor(color);
79: }
80:
81: varying vec2 v2f_texCoords;
82: varying vec4 v2f_color;
83: varying float v2f_diffuse;
84: varying vec2 v2f_light;
85:
86:
87: //vec3 flw_WorldPos;
88: //vec3 flw_Normal;
89: //vec3 flw_Albedo;
90: //float flw_Alpha;
91: //vec2 flw_LightMap;
92: //vec4 flw_Tint;
93:
94: void main() {
95: BlockFrag f;
96: f.texCoords = v2f_texCoords;
97: f.color = v2f_color;
98: f.diffuse = v2f_diffuse;
99: f.light = v2f_light;
100:
101:
102: FLWMain(f);
103: }
[12:45:04] [main/ERROR]: Shader compilation log for create:belt.vert: No errors.
[12:45:04] [main/ERROR]: Source for shader 'create:belt.vert':
1: #version 110
2: #define DEBUG_RAINBOW
3:
4: #define PI 3.1415926538
5:
6: #if defined(USE_FOG)
7: varying float FragDistance;
8: #endif
9:
10: varying vec3 BoxCoord;
11:
12: uniform vec3 uLightBoxSize;
13: uniform vec3 uLightBoxMin;
14: uniform mat4 uModel;
15:
16: uniform float uTime;
17: uniform mat4 uViewProjection;
18: uniform vec3 uCameraPos;
19:
20: void FLWFinalizeWorldPos(inout vec4 worldPos) {
21: worldPos = uModel * worldPos;
22:
23: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
24:
25: #if defined(USE_FOG)
26: FragDistance = length(worldPos.xyz);
27: #endif
28:
29: gl_Position = uViewProjection * worldPos;
30: }
31:
32: void FLWFinalizeNormal(inout vec3 normal) {
33: mat3 m;
34: m[0] = uModel[0].xyz;
35: m[1] = uModel[1].xyz;
36: m[2] = uModel[2].xyz;
37: normal = m * normal;
38: }
39:
40:
41:
42: #define PIOVER2 1.5707963268
43:
44: vec4 quat(vec3 axis, float angle) {
45: float halfAngle = angle * PIOVER2 / 180.0;
46: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
47: return vec4(axis.xyz * cs.y, cs.x);
48: }
49:
50: vec4 quatMult(vec4 q1, vec4 q2) {
51: // disgustingly vectorized quaternion multiplication
52: vec4 a = q1.w * q2.xyzw;
53: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
54: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
55: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
56:
57: return a + b + c + d;
58: }
59:
60: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
61: vec3 i = q.xyz;
62: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
63: }
64:
65: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
66: return rotateVertexByQuat(v, quat(axis, angle));
67: }
68:
69: mat4 rotate(vec3 axis, float angle) {
70: float s = sin(angle);
71: float c = cos(angle);
72: float oc = 1. - c;
73:
74: vec3 sa = axis * s;
75:
76: mat4 mr = mat4(1.);
77: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
78: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
79: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
80:
81: return mr;
82: }
83:
84: mat4 rotation(vec3 rot) {
85: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
86: }
87:
88: mat3 modelToNormal(mat4 mat) {
89: // Discard the edges. This won't be accurate for scaled or skewed matrices,
90: // but we don't have to work with those often.
91: mat3 m;
92: m[0] = mat[0].xyz;
93: m[1] = mat[1].xyz;
94: m[2] = mat[2].xyz;
95: return m;
96: }
97:
98: float diffuse(vec3 normal) {
99: vec3 n2 = normal * normal * vec3(.6, .25, .8);
100: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
101: }
102:
103:
104: struct Belt {
105: vec2 light;
106: vec4 color;
107: vec3 pos;
108: float speed;
109: float offset;
110: vec4 rotation;
111: vec2 sourceTexture;
112: vec4 scrollTexture;
113: float scrollMult;
114: };
115:
116:
117: struct Vertex {
118: vec3 pos;
119: vec3 normal;
120: vec2 texCoords;
121: };
122:
123: struct BlockFrag {
124: vec2 texCoords;
125: vec4 color;
126: float diffuse;
127: vec2 light;
128: };
129:
130: BlockFrag FLWMain(Vertex v, Belt instance) {
131: vec3 rotated = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5;
132:
133: vec4 worldPos = vec4(rotated, 1.);
134:
135: vec3 norm = rotateVertexByQuat(v.normal, instance.rotation);
136:
137: FLWFinalizeWorldPos(worldPos);
138: FLWFinalizeNormal(norm);
139:
140: float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y;
141: float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult;
142:
143: BlockFrag b;
144: b.diffuse = diffuse(norm);
145: b.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
146: b.light = instance.light;
147:
148: #if defined(DEBUG_RAINBOW)
149: b.color = instance.color;
150: #elif defined(DEBUG_NORMAL)
151: b.color = vec4(norm, 1.);
152: #else
153: b.color = vec4(1.);
154: #endif
155:
156: return b;
157: }
158: attribute vec3 a_v_pos;
159: attribute vec3 a_v_normal;
160: attribute vec2 a_v_texCoords;
161:
162: attribute vec2 a_i_light;
163: attribute vec4 a_i_color;
164: attribute vec3 a_i_pos;
165: attribute float a_i_speed;
166: attribute float a_i_offset;
167: attribute vec4 a_i_rotation;
168: attribute vec2 a_i_sourceTexture;
169: attribute vec4 a_i_scrollTexture;
170: attribute float a_i_scrollMult;
171:
172:
173: varying vec2 v2f_texCoords;
174: varying vec4 v2f_color;
175: varying float v2f_diffuse;
176: varying vec2 v2f_light;
177:
178:
179: void main() {
180: Vertex v;
181: v.pos = a_v_pos;
182: v.normal = a_v_normal;
183: v.texCoords = a_v_texCoords;
184:
185:
186: Belt i;
187: i.light = a_i_light;
188: i.color = a_i_color;
189: i.pos = a_i_pos;
190: i.speed = a_i_speed;
191: i.offset = a_i_offset;
192: i.rotation = a_i_rotation;
193: i.sourceTexture = a_i_sourceTexture;
194: i.scrollTexture = a_i_scrollTexture;
195: i.scrollMult = a_i_scrollMult;
196:
197:
198: BlockFrag o = FLWMain(v, i);
199:
200: v2f_texCoords = o.texCoords;
201: v2f_color = o.color;
202: v2f_diffuse = o.diffuse;
203: v2f_light = o.light;
204:
205: }
[12:45:06] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:45:06] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_RAINBOW
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: varying vec3 BoxCoord;
31: varying vec2 BoxLight;
32: uniform sampler3D uLightVolume;
33:
34: uniform sampler2D uBlockAtlas;
35: uniform sampler2D uLightMap;
36:
37: vec4 FLWBlockTexture(vec2 texCoords) {
38: return texture2D(uBlockAtlas, texCoords);
39: }
40:
41: void FLWFinalizeColor(vec4 color) {
42: #if defined(USE_FOG)
43: float a = color.a;
44: float fog = clamp(FLWFogFactor(), 0., 1.);
45:
46: color = mix(uFogColor, color, fog);
47: color.a = a;
48: #endif
49:
50: gl_FragColor = color;
51: }
52:
53: vec4 FLWLight(vec2 lightCoords) {
54: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
55:
56: return texture2D(uLightMap, shiftLight(lightCoords));
57: }
58:
59:
60:
61: struct BlockFrag {
62: vec2 texCoords;
63: vec4 color;
64: float diffuse;
65: vec2 light;
66: };
67:
68: void FLWMain(BlockFrag r) {
69: vec4 tex = FLWBlockTexture(r.texCoords);
70:
71: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
72:
73: // flw_WorldPos = ;
74: // flw_Normal = ;
75: // flw_Albedo = tex.rgb;
76: // flw_Alpha = tex.a;
77: // flw_LightMap = r.light;
78: // flw_Tint = r.color;
79: FLWFinalizeColor(color);
80: }
81:
82: varying vec2 v2f_texCoords;
83: varying vec4 v2f_color;
84: varying float v2f_diffuse;
85: varying vec2 v2f_light;
86:
87:
88: //vec3 flw_WorldPos;
89: //vec3 flw_Normal;
90: //vec3 flw_Albedo;
91: //float flw_Alpha;
92: //vec2 flw_LightMap;
93: //vec4 flw_Tint;
94:
95: void main() {
96: BlockFrag f;
97: f.texCoords = v2f_texCoords;
98: f.color = v2f_color;
99: f.diffuse = v2f_diffuse;
100: f.light = v2f_light;
101:
102:
103: FLWMain(f);
104: }
[12:45:08] [main/ERROR]: Shader compilation log for create:belt.vert: No errors.
[12:45:08] [main/ERROR]: Source for shader 'create:belt.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #define PI 3.1415926538
5:
6: #if defined(USE_FOG)
7: varying float FragDistance;
8: #endif
9:
10: varying vec3 BoxCoord;
11:
12: uniform vec3 uLightBoxSize;
13: uniform vec3 uLightBoxMin;
14: uniform mat4 uModel;
15:
16: uniform float uTime;
17: uniform mat4 uViewProjection;
18: uniform vec3 uCameraPos;
19:
20: void FLWFinalizeWorldPos(inout vec4 worldPos) {
21: worldPos = uModel * worldPos;
22:
23: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
24:
25: #if defined(USE_FOG)
26: FragDistance = length(worldPos.xyz);
27: #endif
28:
29: gl_Position = uViewProjection * worldPos;
30: }
31:
32: void FLWFinalizeNormal(inout vec3 normal) {
33: mat3 m;
34: m[0] = uModel[0].xyz;
35: m[1] = uModel[1].xyz;
36: m[2] = uModel[2].xyz;
37: normal = m * normal;
38: }
39:
40:
41:
42: #define PIOVER2 1.5707963268
43:
44: vec4 quat(vec3 axis, float angle) {
45: float halfAngle = angle * PIOVER2 / 180.0;
46: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
47: return vec4(axis.xyz * cs.y, cs.x);
48: }
49:
50: vec4 quatMult(vec4 q1, vec4 q2) {
51: // disgustingly vectorized quaternion multiplication
52: vec4 a = q1.w * q2.xyzw;
53: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
54: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
55: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
56:
57: return a + b + c + d;
58: }
59:
60: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
61: vec3 i = q.xyz;
62: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
63: }
64:
65: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
66: return rotateVertexByQuat(v, quat(axis, angle));
67: }
68:
69: mat4 rotate(vec3 axis, float angle) {
70: float s = sin(angle);
71: float c = cos(angle);
72: float oc = 1. - c;
73:
74: vec3 sa = axis * s;
75:
76: mat4 mr = mat4(1.);
77: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
78: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
79: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
80:
81: return mr;
82: }
83:
84: mat4 rotation(vec3 rot) {
85: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
86: }
87:
88: mat3 modelToNormal(mat4 mat) {
89: // Discard the edges. This won't be accurate for scaled or skewed matrices,
90: // but we don't have to work with those often.
91: mat3 m;
92: m[0] = mat[0].xyz;
93: m[1] = mat[1].xyz;
94: m[2] = mat[2].xyz;
95: return m;
96: }
97:
98: float diffuse(vec3 normal) {
99: vec3 n2 = normal * normal * vec3(.6, .25, .8);
100: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
101: }
102:
103:
104: struct Belt {
105: vec2 light;
106: vec4 color;
107: vec3 pos;
108: float speed;
109: float offset;
110: vec4 rotation;
111: vec2 sourceTexture;
112: vec4 scrollTexture;
113: float scrollMult;
114: };
115:
116:
117: struct Vertex {
118: vec3 pos;
119: vec3 normal;
120: vec2 texCoords;
121: };
122:
123: struct BlockFrag {
124: vec2 texCoords;
125: vec4 color;
126: float diffuse;
127: vec2 light;
128: };
129:
130: BlockFrag FLWMain(Vertex v, Belt instance) {
131: vec3 rotated = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5;
132:
133: vec4 worldPos = vec4(rotated, 1.);
134:
135: vec3 norm = rotateVertexByQuat(v.normal, instance.rotation);
136:
137: FLWFinalizeWorldPos(worldPos);
138: FLWFinalizeNormal(norm);
139:
140: float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y;
141: float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult;
142:
143: BlockFrag b;
144: b.diffuse = diffuse(norm);
145: b.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
146: b.light = instance.light;
147:
148: #if defined(DEBUG_RAINBOW)
149: b.color = instance.color;
150: #elif defined(DEBUG_NORMAL)
151: b.color = vec4(norm, 1.);
152: #else
153: b.color = vec4(1.);
154: #endif
155:
156: return b;
157: }
158: attribute vec3 a_v_pos;
159: attribute vec3 a_v_normal;
160: attribute vec2 a_v_texCoords;
161:
162: attribute vec2 a_i_light;
163: attribute vec4 a_i_color;
164: attribute vec3 a_i_pos;
165: attribute float a_i_speed;
166: attribute float a_i_offset;
167: attribute vec4 a_i_rotation;
168: attribute vec2 a_i_sourceTexture;
169: attribute vec4 a_i_scrollTexture;
170: attribute float a_i_scrollMult;
171:
172:
173: varying vec2 v2f_texCoords;
174: varying vec4 v2f_color;
175: varying float v2f_diffuse;
176: varying vec2 v2f_light;
177:
178:
179: void main() {
180: Vertex v;
181: v.pos = a_v_pos;
182: v.normal = a_v_normal;
183: v.texCoords = a_v_texCoords;
184:
185:
186: Belt i;
187: i.light = a_i_light;
188: i.color = a_i_color;
189: i.pos = a_i_pos;
190: i.speed = a_i_speed;
191: i.offset = a_i_offset;
192: i.rotation = a_i_rotation;
193: i.sourceTexture = a_i_sourceTexture;
194: i.scrollTexture = a_i_scrollTexture;
195: i.scrollMult = a_i_scrollMult;
196:
197:
198: BlockFrag o = FLWMain(v, i);
199:
200: v2f_texCoords = o.texCoords;
201: v2f_color = o.color;
202: v2f_diffuse = o.diffuse;
203: v2f_light = o.light;
204:
205: }
[12:45:11] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:45:11] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: varying vec3 BoxCoord;
31: varying vec2 BoxLight;
32: uniform sampler3D uLightVolume;
33:
34: uniform sampler2D uBlockAtlas;
35: uniform sampler2D uLightMap;
36:
37: vec4 FLWBlockTexture(vec2 texCoords) {
38: return texture2D(uBlockAtlas, texCoords);
39: }
40:
41: void FLWFinalizeColor(vec4 color) {
42: #if defined(USE_FOG)
43: float a = color.a;
44: float fog = clamp(FLWFogFactor(), 0., 1.);
45:
46: color = mix(uFogColor, color, fog);
47: color.a = a;
48: #endif
49:
50: gl_FragColor = color;
51: }
52:
53: vec4 FLWLight(vec2 lightCoords) {
54: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
55:
56: return texture2D(uLightMap, shiftLight(lightCoords));
57: }
58:
59:
60:
61: struct BlockFrag {
62: vec2 texCoords;
63: vec4 color;
64: float diffuse;
65: vec2 light;
66: };
67:
68: void FLWMain(BlockFrag r) {
69: vec4 tex = FLWBlockTexture(r.texCoords);
70:
71: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
72:
73: // flw_WorldPos = ;
74: // flw_Normal = ;
75: // flw_Albedo = tex.rgb;
76: // flw_Alpha = tex.a;
77: // flw_LightMap = r.light;
78: // flw_Tint = r.color;
79: FLWFinalizeColor(color);
80: }
81:
82: varying vec2 v2f_texCoords;
83: varying vec4 v2f_color;
84: varying float v2f_diffuse;
85: varying vec2 v2f_light;
86:
87:
88: //vec3 flw_WorldPos;
89: //vec3 flw_Normal;
90: //vec3 flw_Albedo;
91: //float flw_Alpha;
92: //vec2 flw_LightMap;
93: //vec4 flw_Tint;
94:
95: void main() {
96: BlockFrag f;
97: f.texCoords = v2f_texCoords;
98: f.color = v2f_color;
99: f.diffuse = v2f_diffuse;
100: f.light = v2f_light;
101:
102:
103: FLWMain(f);
104: }
[12:45:11] [main/ERROR]: Shader compilation log for create:belt.vert: No errors.
[12:45:11] [main/ERROR]: Source for shader 'create:belt.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #define PI 3.1415926538
6:
7: #if defined(USE_FOG)
8: varying float FragDistance;
9: #endif
10:
11: varying vec3 BoxCoord;
12:
13: uniform vec3 uLightBoxSize;
14: uniform vec3 uLightBoxMin;
15: uniform mat4 uModel;
16:
17: uniform float uTime;
18: uniform mat4 uViewProjection;
19: uniform vec3 uCameraPos;
20:
21: void FLWFinalizeWorldPos(inout vec4 worldPos) {
22: worldPos = uModel * worldPos;
23:
24: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
25:
26: #if defined(USE_FOG)
27: FragDistance = length(worldPos.xyz);
28: #endif
29:
30: gl_Position = uViewProjection * worldPos;
31: }
32:
33: void FLWFinalizeNormal(inout vec3 normal) {
34: mat3 m;
35: m[0] = uModel[0].xyz;
36: m[1] = uModel[1].xyz;
37: m[2] = uModel[2].xyz;
38: normal = m * normal;
39: }
40:
41:
42:
43: #define PIOVER2 1.5707963268
44:
45: vec4 quat(vec3 axis, float angle) {
46: float halfAngle = angle * PIOVER2 / 180.0;
47: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
48: return vec4(axis.xyz * cs.y, cs.x);
49: }
50:
51: vec4 quatMult(vec4 q1, vec4 q2) {
52: // disgustingly vectorized quaternion multiplication
53: vec4 a = q1.w * q2.xyzw;
54: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
55: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
56: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
57:
58: return a + b + c + d;
59: }
60:
61: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
62: vec3 i = q.xyz;
63: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
64: }
65:
66: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
67: return rotateVertexByQuat(v, quat(axis, angle));
68: }
69:
70: mat4 rotate(vec3 axis, float angle) {
71: float s = sin(angle);
72: float c = cos(angle);
73: float oc = 1. - c;
74:
75: vec3 sa = axis * s;
76:
77: mat4 mr = mat4(1.);
78: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
79: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
80: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
81:
82: return mr;
83: }
84:
85: mat4 rotation(vec3 rot) {
86: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
87: }
88:
89: mat3 modelToNormal(mat4 mat) {
90: // Discard the edges. This won't be accurate for scaled or skewed matrices,
91: // but we don't have to work with those often.
92: mat3 m;
93: m[0] = mat[0].xyz;
94: m[1] = mat[1].xyz;
95: m[2] = mat[2].xyz;
96: return m;
97: }
98:
99: float diffuse(vec3 normal) {
100: vec3 n2 = normal * normal * vec3(.6, .25, .8);
101: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
102: }
103:
104:
105: struct Belt {
106: vec2 light;
107: vec4 color;
108: vec3 pos;
109: float speed;
110: float offset;
111: vec4 rotation;
112: vec2 sourceTexture;
113: vec4 scrollTexture;
114: float scrollMult;
115: };
116:
117:
118: struct Vertex {
119: vec3 pos;
120: vec3 normal;
121: vec2 texCoords;
122: };
123:
124: struct BlockFrag {
125: vec2 texCoords;
126: vec4 color;
127: float diffuse;
128: vec2 light;
129: };
130:
131: BlockFrag FLWMain(Vertex v, Belt instance) {
132: vec3 rotated = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5;
133:
134: vec4 worldPos = vec4(rotated, 1.);
135:
136: vec3 norm = rotateVertexByQuat(v.normal, instance.rotation);
137:
138: FLWFinalizeWorldPos(worldPos);
139: FLWFinalizeNormal(norm);
140:
141: float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y;
142: float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult;
143:
144: BlockFrag b;
145: b.diffuse = diffuse(norm);
146: b.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
147: b.light = instance.light;
148:
149: #if defined(DEBUG_RAINBOW)
150: b.color = instance.color;
151: #elif defined(DEBUG_NORMAL)
152: b.color = vec4(norm, 1.);
153: #else
154: b.color = vec4(1.);
155: #endif
156:
157: return b;
158: }
159: attribute vec3 a_v_pos;
160: attribute vec3 a_v_normal;
161: attribute vec2 a_v_texCoords;
162:
163: attribute vec2 a_i_light;
164: attribute vec4 a_i_color;
165: attribute vec3 a_i_pos;
166: attribute float a_i_speed;
167: attribute float a_i_offset;
168: attribute vec4 a_i_rotation;
169: attribute vec2 a_i_sourceTexture;
170: attribute vec4 a_i_scrollTexture;
171: attribute float a_i_scrollMult;
172:
173:
174: varying vec2 v2f_texCoords;
175: varying vec4 v2f_color;
176: varying float v2f_diffuse;
177: varying vec2 v2f_light;
178:
179:
180: void main() {
181: Vertex v;
182: v.pos = a_v_pos;
183: v.normal = a_v_normal;
184: v.texCoords = a_v_texCoords;
185:
186:
187: Belt i;
188: i.light = a_i_light;
189: i.color = a_i_color;
190: i.pos = a_i_pos;
191: i.speed = a_i_speed;
192: i.offset = a_i_offset;
193: i.rotation = a_i_rotation;
194: i.sourceTexture = a_i_sourceTexture;
195: i.scrollTexture = a_i_scrollTexture;
196: i.scrollMult = a_i_scrollMult;
197:
198:
199: BlockFrag o = FLWMain(v, i);
200:
201: v2f_texCoords = o.texCoords;
202: v2f_color = o.color;
203: v2f_diffuse = o.diffuse;
204: v2f_light = o.light;
205:
206: }
[12:45:14] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:45:14] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: varying vec3 BoxCoord;
32: varying vec2 BoxLight;
33: uniform sampler3D uLightVolume;
34:
35: uniform sampler2D uBlockAtlas;
36: uniform sampler2D uLightMap;
37:
38: vec4 FLWBlockTexture(vec2 texCoords) {
39: return texture2D(uBlockAtlas, texCoords);
40: }
41:
42: void FLWFinalizeColor(vec4 color) {
43: #if defined(USE_FOG)
44: float a = color.a;
45: float fog = clamp(FLWFogFactor(), 0., 1.);
46:
47: color = mix(uFogColor, color, fog);
48: color.a = a;
49: #endif
50:
51: gl_FragColor = color;
52: }
53:
54: vec4 FLWLight(vec2 lightCoords) {
55: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
56:
57: return texture2D(uLightMap, shiftLight(lightCoords));
58: }
59:
60:
61:
62: struct BlockFrag {
63: vec2 texCoords;
64: vec4 color;
65: float diffuse;
66: vec2 light;
67: };
68:
69: void FLWMain(BlockFrag r) {
70: vec4 tex = FLWBlockTexture(r.texCoords);
71:
72: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
73:
74: // flw_WorldPos = ;
75: // flw_Normal = ;
76: // flw_Albedo = tex.rgb;
77: // flw_Alpha = tex.a;
78: // flw_LightMap = r.light;
79: // flw_Tint = r.color;
80: FLWFinalizeColor(color);
81: }
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: //vec3 flw_WorldPos;
90: //vec3 flw_Normal;
91: //vec3 flw_Albedo;
92: //float flw_Alpha;
93: //vec2 flw_LightMap;
94: //vec4 flw_Tint;
95:
96: void main() {
97: BlockFrag f;
98: f.texCoords = v2f_texCoords;
99: f.color = v2f_color;
100: f.diffuse = v2f_diffuse;
101: f.light = v2f_light;
102:
103:
104: FLWMain(f);
105: }
[12:45:15] [main/ERROR]: Shader compilation log for create:belt.vert: No errors.
[12:45:15] [main/ERROR]: Source for shader 'create:belt.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #define PI 3.1415926538
6:
7: #if defined(USE_FOG)
8: varying float FragDistance;
9: #endif
10:
11: varying vec3 BoxCoord;
12:
13: uniform vec3 uLightBoxSize;
14: uniform vec3 uLightBoxMin;
15: uniform mat4 uModel;
16:
17: uniform float uTime;
18: uniform mat4 uViewProjection;
19: uniform vec3 uCameraPos;
20:
21: void FLWFinalizeWorldPos(inout vec4 worldPos) {
22: worldPos = uModel * worldPos;
23:
24: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
25:
26: #if defined(USE_FOG)
27: FragDistance = length(worldPos.xyz);
28: #endif
29:
30: gl_Position = uViewProjection * worldPos;
31: }
32:
33: void FLWFinalizeNormal(inout vec3 normal) {
34: mat3 m;
35: m[0] = uModel[0].xyz;
36: m[1] = uModel[1].xyz;
37: m[2] = uModel[2].xyz;
38: normal = m * normal;
39: }
40:
41:
42:
43: #define PIOVER2 1.5707963268
44:
45: vec4 quat(vec3 axis, float angle) {
46: float halfAngle = angle * PIOVER2 / 180.0;
47: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
48: return vec4(axis.xyz * cs.y, cs.x);
49: }
50:
51: vec4 quatMult(vec4 q1, vec4 q2) {
52: // disgustingly vectorized quaternion multiplication
53: vec4 a = q1.w * q2.xyzw;
54: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
55: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
56: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
57:
58: return a + b + c + d;
59: }
60:
61: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
62: vec3 i = q.xyz;
63: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
64: }
65:
66: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
67: return rotateVertexByQuat(v, quat(axis, angle));
68: }
69:
70: mat4 rotate(vec3 axis, float angle) {
71: float s = sin(angle);
72: float c = cos(angle);
73: float oc = 1. - c;
74:
75: vec3 sa = axis * s;
76:
77: mat4 mr = mat4(1.);
78: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
79: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
80: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
81:
82: return mr;
83: }
84:
85: mat4 rotation(vec3 rot) {
86: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
87: }
88:
89: mat3 modelToNormal(mat4 mat) {
90: // Discard the edges. This won't be accurate for scaled or skewed matrices,
91: // but we don't have to work with those often.
92: mat3 m;
93: m[0] = mat[0].xyz;
94: m[1] = mat[1].xyz;
95: m[2] = mat[2].xyz;
96: return m;
97: }
98:
99: float diffuse(vec3 normal) {
100: vec3 n2 = normal * normal * vec3(.6, .25, .8);
101: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
102: }
103:
104:
105: struct Belt {
106: vec2 light;
107: vec4 color;
108: vec3 pos;
109: float speed;
110: float offset;
111: vec4 rotation;
112: vec2 sourceTexture;
113: vec4 scrollTexture;
114: float scrollMult;
115: };
116:
117:
118: struct Vertex {
119: vec3 pos;
120: vec3 normal;
121: vec2 texCoords;
122: };
123:
124: struct BlockFrag {
125: vec2 texCoords;
126: vec4 color;
127: float diffuse;
128: vec2 light;
129: };
130:
131: BlockFrag FLWMain(Vertex v, Belt instance) {
132: vec3 rotated = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5;
133:
134: vec4 worldPos = vec4(rotated, 1.);
135:
136: vec3 norm = rotateVertexByQuat(v.normal, instance.rotation);
137:
138: FLWFinalizeWorldPos(worldPos);
139: FLWFinalizeNormal(norm);
140:
141: float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y;
142: float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult;
143:
144: BlockFrag b;
145: b.diffuse = diffuse(norm);
146: b.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
147: b.light = instance.light;
148:
149: #if defined(DEBUG_RAINBOW)
150: b.color = instance.color;
151: #elif defined(DEBUG_NORMAL)
152: b.color = vec4(norm, 1.);
153: #else
154: b.color = vec4(1.);
155: #endif
156:
157: return b;
158: }
159: attribute vec3 a_v_pos;
160: attribute vec3 a_v_normal;
161: attribute vec2 a_v_texCoords;
162:
163: attribute vec2 a_i_light;
164: attribute vec4 a_i_color;
165: attribute vec3 a_i_pos;
166: attribute float a_i_speed;
167: attribute float a_i_offset;
168: attribute vec4 a_i_rotation;
169: attribute vec2 a_i_sourceTexture;
170: attribute vec4 a_i_scrollTexture;
171: attribute float a_i_scrollMult;
172:
173:
174: varying vec2 v2f_texCoords;
175: varying vec4 v2f_color;
176: varying float v2f_diffuse;
177: varying vec2 v2f_light;
178:
179:
180: void main() {
181: Vertex v;
182: v.pos = a_v_pos;
183: v.normal = a_v_normal;
184: v.texCoords = a_v_texCoords;
185:
186:
187: Belt i;
188: i.light = a_i_light;
189: i.color = a_i_color;
190: i.pos = a_i_pos;
191: i.speed = a_i_speed;
192: i.offset = a_i_offset;
193: i.rotation = a_i_rotation;
194: i.sourceTexture = a_i_sourceTexture;
195: i.scrollTexture = a_i_scrollTexture;
196: i.scrollMult = a_i_scrollMult;
197:
198:
199: BlockFrag o = FLWMain(v, i);
200:
201: v2f_texCoords = o.texCoords;
202: v2f_color = o.color;
203: v2f_diffuse = o.diffuse;
204: v2f_light = o.light;
205:
206: }
[12:45:20] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:45:20] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: varying vec3 BoxCoord;
32: varying vec2 BoxLight;
33: uniform sampler3D uLightVolume;
34:
35: uniform sampler2D uBlockAtlas;
36: uniform sampler2D uLightMap;
37:
38: vec4 FLWBlockTexture(vec2 texCoords) {
39: return texture2D(uBlockAtlas, texCoords);
40: }
41:
42: void FLWFinalizeColor(vec4 color) {
43: #if defined(USE_FOG)
44: float a = color.a;
45: float fog = clamp(FLWFogFactor(), 0., 1.);
46:
47: color = mix(uFogColor, color, fog);
48: color.a = a;
49: #endif
50:
51: gl_FragColor = color;
52: }
53:
54: vec4 FLWLight(vec2 lightCoords) {
55: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
56:
57: return texture2D(uLightMap, shiftLight(lightCoords));
58: }
59:
60:
61:
62: struct BlockFrag {
63: vec2 texCoords;
64: vec4 color;
65: float diffuse;
66: vec2 light;
67: };
68:
69: void FLWMain(BlockFrag r) {
70: vec4 tex = FLWBlockTexture(r.texCoords);
71:
72: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
73:
74: // flw_WorldPos = ;
75: // flw_Normal = ;
76: // flw_Albedo = tex.rgb;
77: // flw_Alpha = tex.a;
78: // flw_LightMap = r.light;
79: // flw_Tint = r.color;
80: FLWFinalizeColor(color);
81: }
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: //vec3 flw_WorldPos;
90: //vec3 flw_Normal;
91: //vec3 flw_Albedo;
92: //float flw_Alpha;
93: //vec2 flw_LightMap;
94: //vec4 flw_Tint;
95:
96: void main() {
97: BlockFrag f;
98: f.texCoords = v2f_texCoords;
99: f.color = v2f_color;
100: f.diffuse = v2f_diffuse;
101: f.light = v2f_light;
102:
103:
104: FLWMain(f);
105: }
[12:45:20] [main/ERROR]: Shader compilation log for create:belt.vert: No errors.
[12:45:20] [main/ERROR]: Source for shader 'create:belt.vert':
1: #version 110
2:
3: #define PI 3.1415926538
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: #endif
8:
9: varying vec3 BoxCoord;
10:
11: uniform vec3 uLightBoxSize;
12: uniform vec3 uLightBoxMin;
13: uniform mat4 uModel;
14:
15: uniform float uTime;
16: uniform mat4 uViewProjection;
17: uniform vec3 uCameraPos;
18:
19: void FLWFinalizeWorldPos(inout vec4 worldPos) {
20: worldPos = uModel * worldPos;
21:
22: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
23:
24: #if defined(USE_FOG)
25: FragDistance = length(worldPos.xyz);
26: #endif
27:
28: gl_Position = uViewProjection * worldPos;
29: }
30:
31: void FLWFinalizeNormal(inout vec3 normal) {
32: mat3 m;
33: m[0] = uModel[0].xyz;
34: m[1] = uModel[1].xyz;
35: m[2] = uModel[2].xyz;
36: normal = m * normal;
37: }
38:
39:
40:
41: #define PIOVER2 1.5707963268
42:
43: vec4 quat(vec3 axis, float angle) {
44: float halfAngle = angle * PIOVER2 / 180.0;
45: vec2 cs = sin(vec2(PIOVER2 - halfAngle, halfAngle)); // compute sin and cos in one instruction
46: return vec4(axis.xyz * cs.y, cs.x);
47: }
48:
49: vec4 quatMult(vec4 q1, vec4 q2) {
50: // disgustingly vectorized quaternion multiplication
51: vec4 a = q1.w * q2.xyzw;
52: vec4 b = q1.x * q2.wzxy * vec4(1., -1., 1., -1.);
53: vec4 c = q1.y * q2.zwxy * vec4(1., 1., -1., -1.);
54: vec4 d = q1.z * q2.yxwz * vec4(-1., 1., 1., -1.);
55:
56: return a + b + c + d;
57: }
58:
59: vec3 rotateVertexByQuat(vec3 v, vec4 q) {
60: vec3 i = q.xyz;
61: return v + 2.0 * cross(i, cross(i, v) + q.w * v);
62: }
63:
64: vec3 rotateAbout(vec3 v, vec3 axis, float angle) {
65: return rotateVertexByQuat(v, quat(axis, angle));
66: }
67:
68: mat4 rotate(vec3 axis, float angle) {
69: float s = sin(angle);
70: float c = cos(angle);
71: float oc = 1. - c;
72:
73: vec3 sa = axis * s;
74:
75: mat4 mr = mat4(1.);
76: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
77: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
78: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
79:
80: return mr;
81: }
82:
83: mat4 rotation(vec3 rot) {
84: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
85: }
86:
87: mat3 modelToNormal(mat4 mat) {
88: // Discard the edges. This won't be accurate for scaled or skewed matrices,
89: // but we don't have to work with those often.
90: mat3 m;
91: m[0] = mat[0].xyz;
92: m[1] = mat[1].xyz;
93: m[2] = mat[2].xyz;
94: return m;
95: }
96:
97: float diffuse(vec3 normal) {
98: vec3 n2 = normal * normal * vec3(.6, .25, .8);
99: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
100: }
101:
102:
103: struct Belt {
104: vec2 light;
105: vec4 color;
106: vec3 pos;
107: float speed;
108: float offset;
109: vec4 rotation;
110: vec2 sourceTexture;
111: vec4 scrollTexture;
112: float scrollMult;
113: };
114:
115:
116: struct Vertex {
117: vec3 pos;
118: vec3 normal;
119: vec2 texCoords;
120: };
121:
122: struct BlockFrag {
123: vec2 texCoords;
124: vec4 color;
125: float diffuse;
126: vec2 light;
127: };
128:
129: BlockFrag FLWMain(Vertex v, Belt instance) {
130: vec3 rotated = rotateVertexByQuat(v.pos - .5, instance.rotation) + instance.pos + .5;
131:
132: vec4 worldPos = vec4(rotated, 1.);
133:
134: vec3 norm = rotateVertexByQuat(v.normal, instance.rotation);
135:
136: FLWFinalizeWorldPos(worldPos);
137: FLWFinalizeNormal(norm);
138:
139: float scrollSize = instance.scrollTexture.w - instance.scrollTexture.y;
140: float scroll = fract(instance.speed * uTime / (31.5 * 16.) + instance.offset) * scrollSize * instance.scrollMult;
141:
142: BlockFrag b;
143: b.diffuse = diffuse(norm);
144: b.texCoords = v.texCoords - instance.sourceTexture + instance.scrollTexture.xy + vec2(0, scroll);
145: b.light = instance.light;
146:
147: #if defined(DEBUG_RAINBOW)
148: b.color = instance.color;
149: #elif defined(DEBUG_NORMAL)
150: b.color = vec4(norm, 1.);
151: #else
152: b.color = vec4(1.);
153: #endif
154:
155: return b;
156: }
157: attribute vec3 a_v_pos;
158: attribute vec3 a_v_normal;
159: attribute vec2 a_v_texCoords;
160:
161: attribute vec2 a_i_light;
162: attribute vec4 a_i_color;
163: attribute vec3 a_i_pos;
164: attribute float a_i_speed;
165: attribute float a_i_offset;
166: attribute vec4 a_i_rotation;
167: attribute vec2 a_i_sourceTexture;
168: attribute vec4 a_i_scrollTexture;
169: attribute float a_i_scrollMult;
170:
171:
172: varying vec2 v2f_texCoords;
173: varying vec4 v2f_color;
174: varying float v2f_diffuse;
175: varying vec2 v2f_light;
176:
177:
178: void main() {
179: Vertex v;
180: v.pos = a_v_pos;
181: v.normal = a_v_normal;
182: v.texCoords = a_v_texCoords;
183:
184:
185: Belt i;
186: i.light = a_i_light;
187: i.color = a_i_color;
188: i.pos = a_i_pos;
189: i.speed = a_i_speed;
190: i.offset = a_i_offset;
191: i.rotation = a_i_rotation;
192: i.sourceTexture = a_i_sourceTexture;
193: i.scrollTexture = a_i_scrollTexture;
194: i.scrollMult = a_i_scrollMult;
195:
196:
197: BlockFrag o = FLWMain(v, i);
198:
199: v2f_texCoords = o.texCoords;
200: v2f_color = o.color;
201: v2f_diffuse = o.diffuse;
202: v2f_light = o.light;
203:
204: }
[12:45:22] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:45:22] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
25: vec2 shiftLight(vec2 lm) {
26: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
27: }
28:
29: varying vec3 BoxCoord;
30: varying vec2 BoxLight;
31: uniform sampler3D uLightVolume;
32:
33: uniform sampler2D uBlockAtlas;
34: uniform sampler2D uLightMap;
35:
36: vec4 FLWBlockTexture(vec2 texCoords) {
37: return texture2D(uBlockAtlas, texCoords);
38: }
39:
40: void FLWFinalizeColor(vec4 color) {
41: #if defined(USE_FOG)
42: float a = color.a;
43: float fog = clamp(FLWFogFactor(), 0., 1.);
44:
45: color = mix(uFogColor, color, fog);
46: color.a = a;
47: #endif
48:
49: gl_FragColor = color;
50: }
51:
52: vec4 FLWLight(vec2 lightCoords) {
53: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
54:
55: return texture2D(uLightMap, shiftLight(lightCoords));
56: }
57:
58:
59:
60: struct BlockFrag {
61: vec2 texCoords;
62: vec4 color;
63: float diffuse;
64: vec2 light;
65: };
66:
67: void FLWMain(BlockFrag r) {
68: vec4 tex = FLWBlockTexture(r.texCoords);
69:
70: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
71:
72: // flw_WorldPos = ;
73: // flw_Normal = ;
74: // flw_Albedo = tex.rgb;
75: // flw_Alpha = tex.a;
76: // flw_LightMap = r.light;
77: // flw_Tint = r.color;
78: FLWFinalizeColor(color);
79: }
80:
81: varying vec2 v2f_texCoords;
82: varying vec4 v2f_color;
83: varying float v2f_diffuse;
84: varying vec2 v2f_light;
85:
86:
87: //vec3 flw_WorldPos;
88: //vec3 flw_Normal;
89: //vec3 flw_Albedo;
90: //float flw_Alpha;
91: //vec2 flw_LightMap;
92: //vec4 flw_Tint;
93:
94: void main() {
95: BlockFrag f;
96: f.texCoords = v2f_texCoords;
97: f.color = v2f_color;
98: f.diffuse = v2f_diffuse;
99: f.light = v2f_light;
100:
101:
102: FLWMain(f);
103: }
[12:45:23] [main/INFO]: Loading context 'create:context/contraption'
[12:45:23] [main/ERROR]: Shader compilation log for create:contraption_structure.vert: No errors.
[12:45:23] [main/ERROR]: Source for shader 'create:contraption_structure.vert':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #define PI 3.1415926538
5:
6: #if defined(USE_FOG)
7: varying float FragDistance;
8: #endif
9:
10: varying vec3 BoxCoord;
11:
12: uniform vec3 uLightBoxSize;
13: uniform vec3 uLightBoxMin;
14: uniform mat4 uModel;
15:
16: uniform float uTime;
17: uniform mat4 uViewProjection;
18: uniform vec3 uCameraPos;
19:
20: void FLWFinalizeWorldPos(inout vec4 worldPos) {
21: worldPos = uModel * worldPos;
22:
23: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
24:
25: #if defined(USE_FOG)
26: FragDistance = length(worldPos.xyz);
27: #endif
28:
29: gl_Position = uViewProjection * worldPos;
30: }
31:
32: void FLWFinalizeNormal(inout vec3 normal) {
33: mat3 m;
34: m[0] = uModel[0].xyz;
35: m[1] = uModel[1].xyz;
36: m[2] = uModel[2].xyz;
37: normal = m * normal;
38: }
39:
40:
41:
42: mat4 rotate(vec3 axis, float angle) {
43: float s = sin(angle);
44: float c = cos(angle);
45: float oc = 1. - c;
46:
47: vec3 sa = axis * s;
48:
49: mat4 mr = mat4(1.);
50: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
51: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
52: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
53:
54: return mr;
55: }
56:
57: mat4 rotation(vec3 rot) {
58: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
59: }
60:
61: mat3 modelToNormal(mat4 mat) {
62: // Discard the edges. This won't be accurate for scaled or skewed matrices,
63: // but we don't have to work with those often.
64: mat3 m;
65: m[0] = mat[0].xyz;
66: m[1] = mat[1].xyz;
67: m[2] = mat[2].xyz;
68: return m;
69: }
70:
71: float diffuse(vec3 normal) {
72: vec3 n2 = normal * normal * vec3(.6, .25, .8);
73: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
74: }
75:
76:
77: struct Vertex {
78: vec3 pos;
79: vec3 normal;
80: vec2 texCoords;
81: vec4 color;
82: vec2 modelLight;
83: };
84:
85:
86: struct BlockFrag {
87: vec2 texCoords;
88: vec4 color;
89: float diffuse;
90: vec2 light;
91: };
92:
93: BlockFrag FLWMain(Vertex v) {
94: vec4 worldPos = vec4(v.pos, 1.);
95: vec3 norm = v.normal;
96:
97: FLWFinalizeWorldPos(worldPos);
98: FLWFinalizeNormal(norm);
99:
100: BlockFrag b;
101: b.diffuse = diffuse(norm);
102: b.texCoords = v.texCoords;
103: b.light = v.modelLight;
104:
105: #if defined(DEBUG_NORMAL)
106: b.color = vec4(norm, 1.);
107: #else
108: b.color = vec4(v.color.rgb / diffuse(v.normal), v.color.a);
109: #endif
110:
111: return b;
112: }
113: attribute vec3 a_v_pos;
114: attribute vec3 a_v_normal;
115: attribute vec2 a_v_texCoords;
116: attribute vec4 a_v_color;
117: attribute vec2 a_v_modelLight;
118:
119:
120: varying vec2 v2f_texCoords;
121: varying vec4 v2f_color;
122: varying float v2f_diffuse;
123: varying vec2 v2f_light;
124:
125:
126: void main() {
127: Vertex v;
128: v.pos = a_v_pos;
129: v.normal = a_v_normal;
130: v.texCoords = a_v_texCoords;
131: v.color = a_v_color;
132: v.modelLight = a_v_modelLight;
133:
134:
135: BlockFrag o = FLWMain(v);
136:
137: v2f_texCoords = o.texCoords;
138: v2f_color = o.color;
139: v2f_diffuse = o.diffuse;
140: v2f_light = o.light;
141:
142: }
[12:45:25] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:45:25] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define DEBUG_NORMAL
3:
4: #if defined(USE_FOG)
5: varying float FragDistance;
6: uniform vec4 uFogColor;
7: #endif
8:
9: #if defined(USE_FOG_LINEAR)
10: uniform vec2 uFogRange;
11:
12: float FLWFogFactor() {
13: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
14: }
15: #endif
16:
17: #if defined(USE_FOG_EXP2)
18: uniform float uFogDensity;
19:
20: float FLWFogFactor() {
21: float dist = FragDistance * uFogDensity;
22: return 1. / exp2(dist * dist);
23: }
24: #endif
25: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
26: vec2 shiftLight(vec2 lm) {
27: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
28: }
29:
30: varying vec3 BoxCoord;
31: varying vec2 BoxLight;
32: uniform sampler3D uLightVolume;
33:
34: uniform sampler2D uBlockAtlas;
35: uniform sampler2D uLightMap;
36:
37: vec4 FLWBlockTexture(vec2 texCoords) {
38: return texture2D(uBlockAtlas, texCoords);
39: }
40:
41: void FLWFinalizeColor(vec4 color) {
42: #if defined(USE_FOG)
43: float a = color.a;
44: float fog = clamp(FLWFogFactor(), 0., 1.);
45:
46: color = mix(uFogColor, color, fog);
47: color.a = a;
48: #endif
49:
50: gl_FragColor = color;
51: }
52:
53: vec4 FLWLight(vec2 lightCoords) {
54: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
55:
56: return texture2D(uLightMap, shiftLight(lightCoords));
57: }
58:
59:
60:
61: struct BlockFrag {
62: vec2 texCoords;
63: vec4 color;
64: float diffuse;
65: vec2 light;
66: };
67:
68: void FLWMain(BlockFrag r) {
69: vec4 tex = FLWBlockTexture(r.texCoords);
70:
71: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
72:
73: // flw_WorldPos = ;
74: // flw_Normal = ;
75: // flw_Albedo = tex.rgb;
76: // flw_Alpha = tex.a;
77: // flw_LightMap = r.light;
78: // flw_Tint = r.color;
79: FLWFinalizeColor(color);
80: }
81:
82: varying vec2 v2f_texCoords;
83: varying vec4 v2f_color;
84: varying float v2f_diffuse;
85: varying vec2 v2f_light;
86:
87:
88: void main() {
89: BlockFrag f;
90: f.texCoords = v2f_texCoords;
91: f.color = v2f_color;
92: f.diffuse = v2f_diffuse;
93: f.light = v2f_light;
94:
95:
96: FLWMain(f);
97: }
[12:45:25] [main/ERROR]: Shader compilation log for create:contraption_structure.vert: No errors.
[12:45:25] [main/ERROR]: Source for shader 'create:contraption_structure.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #define PI 3.1415926538
6:
7: #if defined(USE_FOG)
8: varying float FragDistance;
9: #endif
10:
11: varying vec3 BoxCoord;
12:
13: uniform vec3 uLightBoxSize;
14: uniform vec3 uLightBoxMin;
15: uniform mat4 uModel;
16:
17: uniform float uTime;
18: uniform mat4 uViewProjection;
19: uniform vec3 uCameraPos;
20:
21: void FLWFinalizeWorldPos(inout vec4 worldPos) {
22: worldPos = uModel * worldPos;
23:
24: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
25:
26: #if defined(USE_FOG)
27: FragDistance = length(worldPos.xyz);
28: #endif
29:
30: gl_Position = uViewProjection * worldPos;
31: }
32:
33: void FLWFinalizeNormal(inout vec3 normal) {
34: mat3 m;
35: m[0] = uModel[0].xyz;
36: m[1] = uModel[1].xyz;
37: m[2] = uModel[2].xyz;
38: normal = m * normal;
39: }
40:
41:
42:
43: mat4 rotate(vec3 axis, float angle) {
44: float s = sin(angle);
45: float c = cos(angle);
46: float oc = 1. - c;
47:
48: vec3 sa = axis * s;
49:
50: mat4 mr = mat4(1.);
51: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
52: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
53: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
54:
55: return mr;
56: }
57:
58: mat4 rotation(vec3 rot) {
59: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
60: }
61:
62: mat3 modelToNormal(mat4 mat) {
63: // Discard the edges. This won't be accurate for scaled or skewed matrices,
64: // but we don't have to work with those often.
65: mat3 m;
66: m[0] = mat[0].xyz;
67: m[1] = mat[1].xyz;
68: m[2] = mat[2].xyz;
69: return m;
70: }
71:
72: float diffuse(vec3 normal) {
73: vec3 n2 = normal * normal * vec3(.6, .25, .8);
74: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
75: }
76:
77:
78: struct Vertex {
79: vec3 pos;
80: vec3 normal;
81: vec2 texCoords;
82: vec4 color;
83: vec2 modelLight;
84: };
85:
86:
87: struct BlockFrag {
88: vec2 texCoords;
89: vec4 color;
90: float diffuse;
91: vec2 light;
92: };
93:
94: BlockFrag FLWMain(Vertex v) {
95: vec4 worldPos = vec4(v.pos, 1.);
96: vec3 norm = v.normal;
97:
98: FLWFinalizeWorldPos(worldPos);
99: FLWFinalizeNormal(norm);
100:
101: BlockFrag b;
102: b.diffuse = diffuse(norm);
103: b.texCoords = v.texCoords;
104: b.light = v.modelLight;
105:
106: #if defined(DEBUG_NORMAL)
107: b.color = vec4(norm, 1.);
108: #else
109: b.color = vec4(v.color.rgb / diffuse(v.normal), v.color.a);
110: #endif
111:
112: return b;
113: }
114: attribute vec3 a_v_pos;
115: attribute vec3 a_v_normal;
116: attribute vec2 a_v_texCoords;
117: attribute vec4 a_v_color;
118: attribute vec2 a_v_modelLight;
119:
120:
121: varying vec2 v2f_texCoords;
122: varying vec4 v2f_color;
123: varying float v2f_diffuse;
124: varying vec2 v2f_light;
125:
126:
127: void main() {
128: Vertex v;
129: v.pos = a_v_pos;
130: v.normal = a_v_normal;
131: v.texCoords = a_v_texCoords;
132: v.color = a_v_color;
133: v.modelLight = a_v_modelLight;
134:
135:
136: BlockFrag o = FLWMain(v);
137:
138: v2f_texCoords = o.texCoords;
139: v2f_color = o.color;
140: v2f_diffuse = o.diffuse;
141: v2f_light = o.light;
142:
143: }
[12:45:27] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:45:27] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_LINEAR
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: varying vec3 BoxCoord;
32: varying vec2 BoxLight;
33: uniform sampler3D uLightVolume;
34:
35: uniform sampler2D uBlockAtlas;
36: uniform sampler2D uLightMap;
37:
38: vec4 FLWBlockTexture(vec2 texCoords) {
39: return texture2D(uBlockAtlas, texCoords);
40: }
41:
42: void FLWFinalizeColor(vec4 color) {
43: #if defined(USE_FOG)
44: float a = color.a;
45: float fog = clamp(FLWFogFactor(), 0., 1.);
46:
47: color = mix(uFogColor, color, fog);
48: color.a = a;
49: #endif
50:
51: gl_FragColor = color;
52: }
53:
54: vec4 FLWLight(vec2 lightCoords) {
55: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
56:
57: return texture2D(uLightMap, shiftLight(lightCoords));
58: }
59:
60:
61:
62: struct BlockFrag {
63: vec2 texCoords;
64: vec4 color;
65: float diffuse;
66: vec2 light;
67: };
68:
69: void FLWMain(BlockFrag r) {
70: vec4 tex = FLWBlockTexture(r.texCoords);
71:
72: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
73:
74: // flw_WorldPos = ;
75: // flw_Normal = ;
76: // flw_Albedo = tex.rgb;
77: // flw_Alpha = tex.a;
78: // flw_LightMap = r.light;
79: // flw_Tint = r.color;
80: FLWFinalizeColor(color);
81: }
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:45:27] [main/ERROR]: Shader compilation log for create:contraption_structure.vert: No errors.
[12:45:27] [main/ERROR]: Source for shader 'create:contraption_structure.vert':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #define PI 3.1415926538
6:
7: #if defined(USE_FOG)
8: varying float FragDistance;
9: #endif
10:
11: varying vec3 BoxCoord;
12:
13: uniform vec3 uLightBoxSize;
14: uniform vec3 uLightBoxMin;
15: uniform mat4 uModel;
16:
17: uniform float uTime;
18: uniform mat4 uViewProjection;
19: uniform vec3 uCameraPos;
20:
21: void FLWFinalizeWorldPos(inout vec4 worldPos) {
22: worldPos = uModel * worldPos;
23:
24: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
25:
26: #if defined(USE_FOG)
27: FragDistance = length(worldPos.xyz);
28: #endif
29:
30: gl_Position = uViewProjection * worldPos;
31: }
32:
33: void FLWFinalizeNormal(inout vec3 normal) {
34: mat3 m;
35: m[0] = uModel[0].xyz;
36: m[1] = uModel[1].xyz;
37: m[2] = uModel[2].xyz;
38: normal = m * normal;
39: }
40:
41:
42:
43: mat4 rotate(vec3 axis, float angle) {
44: float s = sin(angle);
45: float c = cos(angle);
46: float oc = 1. - c;
47:
48: vec3 sa = axis * s;
49:
50: mat4 mr = mat4(1.);
51: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
52: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
53: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
54:
55: return mr;
56: }
57:
58: mat4 rotation(vec3 rot) {
59: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
60: }
61:
62: mat3 modelToNormal(mat4 mat) {
63: // Discard the edges. This won't be accurate for scaled or skewed matrices,
64: // but we don't have to work with those often.
65: mat3 m;
66: m[0] = mat[0].xyz;
67: m[1] = mat[1].xyz;
68: m[2] = mat[2].xyz;
69: return m;
70: }
71:
72: float diffuse(vec3 normal) {
73: vec3 n2 = normal * normal * vec3(.6, .25, .8);
74: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
75: }
76:
77:
78: struct Vertex {
79: vec3 pos;
80: vec3 normal;
81: vec2 texCoords;
82: vec4 color;
83: vec2 modelLight;
84: };
85:
86:
87: struct BlockFrag {
88: vec2 texCoords;
89: vec4 color;
90: float diffuse;
91: vec2 light;
92: };
93:
94: BlockFrag FLWMain(Vertex v) {
95: vec4 worldPos = vec4(v.pos, 1.);
96: vec3 norm = v.normal;
97:
98: FLWFinalizeWorldPos(worldPos);
99: FLWFinalizeNormal(norm);
100:
101: BlockFrag b;
102: b.diffuse = diffuse(norm);
103: b.texCoords = v.texCoords;
104: b.light = v.modelLight;
105:
106: #if defined(DEBUG_NORMAL)
107: b.color = vec4(norm, 1.);
108: #else
109: b.color = vec4(v.color.rgb / diffuse(v.normal), v.color.a);
110: #endif
111:
112: return b;
113: }
114: attribute vec3 a_v_pos;
115: attribute vec3 a_v_normal;
116: attribute vec2 a_v_texCoords;
117: attribute vec4 a_v_color;
118: attribute vec2 a_v_modelLight;
119:
120:
121: varying vec2 v2f_texCoords;
122: varying vec4 v2f_color;
123: varying float v2f_diffuse;
124: varying vec2 v2f_light;
125:
126:
127: void main() {
128: Vertex v;
129: v.pos = a_v_pos;
130: v.normal = a_v_normal;
131: v.texCoords = a_v_texCoords;
132: v.color = a_v_color;
133: v.modelLight = a_v_modelLight;
134:
135:
136: BlockFrag o = FLWMain(v);
137:
138: v2f_texCoords = o.texCoords;
139: v2f_color = o.color;
140: v2f_diffuse = o.diffuse;
141: v2f_light = o.light;
142:
143: }
[12:45:30] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:45:30] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2: #define USE_FOG
3: #define USE_FOG_EXP2
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: uniform vec4 uFogColor;
8: #endif
9:
10: #if defined(USE_FOG_LINEAR)
11: uniform vec2 uFogRange;
12:
13: float FLWFogFactor() {
14: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
15: }
16: #endif
17:
18: #if defined(USE_FOG_EXP2)
19: uniform float uFogDensity;
20:
21: float FLWFogFactor() {
22: float dist = FragDistance * uFogDensity;
23: return 1. / exp2(dist * dist);
24: }
25: #endif
26: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
27: vec2 shiftLight(vec2 lm) {
28: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
29: }
30:
31: varying vec3 BoxCoord;
32: varying vec2 BoxLight;
33: uniform sampler3D uLightVolume;
34:
35: uniform sampler2D uBlockAtlas;
36: uniform sampler2D uLightMap;
37:
38: vec4 FLWBlockTexture(vec2 texCoords) {
39: return texture2D(uBlockAtlas, texCoords);
40: }
41:
42: void FLWFinalizeColor(vec4 color) {
43: #if defined(USE_FOG)
44: float a = color.a;
45: float fog = clamp(FLWFogFactor(), 0., 1.);
46:
47: color = mix(uFogColor, color, fog);
48: color.a = a;
49: #endif
50:
51: gl_FragColor = color;
52: }
53:
54: vec4 FLWLight(vec2 lightCoords) {
55: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
56:
57: return texture2D(uLightMap, shiftLight(lightCoords));
58: }
59:
60:
61:
62: struct BlockFrag {
63: vec2 texCoords;
64: vec4 color;
65: float diffuse;
66: vec2 light;
67: };
68:
69: void FLWMain(BlockFrag r) {
70: vec4 tex = FLWBlockTexture(r.texCoords);
71:
72: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
73:
74: // flw_WorldPos = ;
75: // flw_Normal = ;
76: // flw_Albedo = tex.rgb;
77: // flw_Alpha = tex.a;
78: // flw_LightMap = r.light;
79: // flw_Tint = r.color;
80: FLWFinalizeColor(color);
81: }
82:
83: varying vec2 v2f_texCoords;
84: varying vec4 v2f_color;
85: varying float v2f_diffuse;
86: varying vec2 v2f_light;
87:
88:
89: void main() {
90: BlockFrag f;
91: f.texCoords = v2f_texCoords;
92: f.color = v2f_color;
93: f.diffuse = v2f_diffuse;
94: f.light = v2f_light;
95:
96:
97: FLWMain(f);
98: }
[12:45:30] [main/ERROR]: Shader compilation log for create:contraption_structure.vert: No errors.
[12:45:30] [main/ERROR]: Source for shader 'create:contraption_structure.vert':
1: #version 110
2:
3: #define PI 3.1415926538
4:
5: #if defined(USE_FOG)
6: varying float FragDistance;
7: #endif
8:
9: varying vec3 BoxCoord;
10:
11: uniform vec3 uLightBoxSize;
12: uniform vec3 uLightBoxMin;
13: uniform mat4 uModel;
14:
15: uniform float uTime;
16: uniform mat4 uViewProjection;
17: uniform vec3 uCameraPos;
18:
19: void FLWFinalizeWorldPos(inout vec4 worldPos) {
20: worldPos = uModel * worldPos;
21:
22: BoxCoord = (worldPos.xyz - uLightBoxMin) / uLightBoxSize;
23:
24: #if defined(USE_FOG)
25: FragDistance = length(worldPos.xyz);
26: #endif
27:
28: gl_Position = uViewProjection * worldPos;
29: }
30:
31: void FLWFinalizeNormal(inout vec3 normal) {
32: mat3 m;
33: m[0] = uModel[0].xyz;
34: m[1] = uModel[1].xyz;
35: m[2] = uModel[2].xyz;
36: normal = m * normal;
37: }
38:
39:
40:
41: mat4 rotate(vec3 axis, float angle) {
42: float s = sin(angle);
43: float c = cos(angle);
44: float oc = 1. - c;
45:
46: vec3 sa = axis * s;
47:
48: mat4 mr = mat4(1.);
49: mr[0].xyz = oc * axis.xxz * axis.xyx + vec3(c, sa.z, -sa.y);
50: mr[1].xyz = oc * axis.xyy * axis.yyz + vec3(-sa.z, c, sa.x);
51: mr[2].xyz = oc * axis.zyz * axis.xzz + vec3(sa.y, -sa.x, c);
52:
53: return mr;
54: }
55:
56: mat4 rotation(vec3 rot) {
57: return rotate(vec3(0., 1., 0.), rot.y) * rotate(vec3(0., 0., 1.), rot.z) * rotate(vec3(1., 0., 0.), rot.x);
58: }
59:
60: mat3 modelToNormal(mat4 mat) {
61: // Discard the edges. This won't be accurate for scaled or skewed matrices,
62: // but we don't have to work with those often.
63: mat3 m;
64: m[0] = mat[0].xyz;
65: m[1] = mat[1].xyz;
66: m[2] = mat[2].xyz;
67: return m;
68: }
69:
70: float diffuse(vec3 normal) {
71: vec3 n2 = normal * normal * vec3(.6, .25, .8);
72: return min(n2.x + n2.y * (3. + normal.y) + n2.z, 1.);
73: }
74:
75:
76: struct Vertex {
77: vec3 pos;
78: vec3 normal;
79: vec2 texCoords;
80: vec4 color;
81: vec2 modelLight;
82: };
83:
84:
85: struct BlockFrag {
86: vec2 texCoords;
87: vec4 color;
88: float diffuse;
89: vec2 light;
90: };
91:
92: BlockFrag FLWMain(Vertex v) {
93: vec4 worldPos = vec4(v.pos, 1.);
94: vec3 norm = v.normal;
95:
96: FLWFinalizeWorldPos(worldPos);
97: FLWFinalizeNormal(norm);
98:
99: BlockFrag b;
100: b.diffuse = diffuse(norm);
101: b.texCoords = v.texCoords;
102: b.light = v.modelLight;
103:
104: #if defined(DEBUG_NORMAL)
105: b.color = vec4(norm, 1.);
106: #else
107: b.color = vec4(v.color.rgb / diffuse(v.normal), v.color.a);
108: #endif
109:
110: return b;
111: }
112: attribute vec3 a_v_pos;
113: attribute vec3 a_v_normal;
114: attribute vec2 a_v_texCoords;
115: attribute vec4 a_v_color;
116: attribute vec2 a_v_modelLight;
117:
118:
119: varying vec2 v2f_texCoords;
120: varying vec4 v2f_color;
121: varying float v2f_diffuse;
122: varying vec2 v2f_light;
123:
124:
125: void main() {
126: Vertex v;
127: v.pos = a_v_pos;
128: v.normal = a_v_normal;
129: v.texCoords = a_v_texCoords;
130: v.color = a_v_color;
131: v.modelLight = a_v_modelLight;
132:
133:
134: BlockFrag o = FLWMain(v);
135:
136: v2f_texCoords = o.texCoords;
137: v2f_color = o.color;
138: v2f_diffuse = o.diffuse;
139: v2f_light = o.light;
140:
141: }
[12:45:34] [main/ERROR]: Shader compilation log for flywheel:block.frag: No errors.
[12:45:34] [main/ERROR]: Source for shader 'flywheel:block.frag':
1: #version 110
2:
3: #if defined(USE_FOG)
4: varying float FragDistance;
5: uniform vec4 uFogColor;
6: #endif
7:
8: #if defined(USE_FOG_LINEAR)
9: uniform vec2 uFogRange;
10:
11: float FLWFogFactor() {
12: return (uFogRange.y - FragDistance) / (uFogRange.y - uFogRange.x);
13: }
14: #endif
15:
16: #if defined(USE_FOG_EXP2)
17: uniform float uFogDensity;
18:
19: float FLWFogFactor() {
20: float dist = FragDistance * uFogDensity;
21: return 1. / exp2(dist * dist);
22: }
23: #endif
24: // Adjust the [0,1] normalized lightmap value based on the texture matrix from LightTexture#enableLightmap
25: vec2 shiftLight(vec2 lm) {
26: return lm * 0.99609375 + 0.03125;// * 255/256 + 1/32
27: }
28:
29: varying vec3 BoxCoord;
30: varying vec2 BoxLight;
31: uniform sampler3D uLightVolume;
32:
33: uniform sampler2D uBlockAtlas;
34: uniform sampler2D uLightMap;
35:
36: vec4 FLWBlockTexture(vec2 texCoords) {
37: return texture2D(uBlockAtlas, texCoords);
38: }
39:
40: void FLWFinalizeColor(vec4 color) {
41: #if defined(USE_FOG)
42: float a = color.a;
43: float fog = clamp(FLWFogFactor(), 0., 1.);
44:
45: color = mix(uFogColor, color, fog);
46: color.a = a;
47: #endif
48:
49: gl_FragColor = color;
50: }
51:
52: vec4 FLWLight(vec2 lightCoords) {
53: lightCoords = max(lightCoords, texture3D(uLightVolume, BoxCoord).rg);
54:
55: return texture2D(uLightMap, shiftLight(lightCoords));
56: }
57:
58:
59:
60: struct BlockFrag {
61: vec2 texCoords;
62: vec4 color;
63: float diffuse;
64: vec2 light;
65: };
66:
67: void FLWMain(BlockFrag r) {
68: vec4 tex = FLWBlockTexture(r.texCoords);
69:
70: vec4 color = vec4(tex.rgb * FLWLight(r.light).rgb * r.diffuse, tex.a) * r.color;
71:
72: // flw_WorldPos = ;
73: // flw_Normal = ;
74: // flw_Albedo = tex.rgb;
75: // flw_Alpha = tex.a;
76: // flw_LightMap = r.light;
77: // flw_Tint = r.color;
78: FLWFinalizeColor(color);
79: }
80:
81: varying vec2 v2f_texCoords;
82: varying vec4 v2f_color;
83: varying float v2f_diffuse;
84: varying vec2 v2f_light;
85:
86:
87: void main() {
88: BlockFrag f;
89: f.texCoords = v2f_texCoords;
90: f.color = v2f_color;
91: f.diffuse = v2f_diffuse;
92: f.light = v2f_light;
93:
94:
95: FLWMain(f);
96: }
[12:45:34] [main/INFO]: Loaded all shader programs.
[12:45:42] [main/INFO]: OpenAL initialized.
[12:45:42] [main/INFO]: Sound engine started
[12:45:43] [main/INFO]: Created: 128x256x0 jei:textures/atlas/gui.png-atlas
[12:45:43] [main/INFO]: [OptiFine] Animated sprites: 0
[12:45:43] [main/WARN]: [OptiFine] Invalid grid V: 16, icon: jei:gui/icons/config_button
[12:45:43] [main/WARN]: [OptiFine] Invalid grid V: 16, icon: jei:gui/icons/config_button
[12:45:43] [main/WARN]: [OptiFine] Invalid grid V: 16, icon: jei:gui/icons/config_button_cheat
[12:45:43] [main/WARN]: [OptiFine] Invalid grid V: 16, icon: jei:gui/icons/config_button_cheat
[12:45:43] [main/WARN]: [OptiFine] Invalid grid V: 16, icon: jei:gui/icons/arrow_previous
[12:45:43] [main/WARN]: [OptiFine] Invalid grid V: 16, icon: jei:gui/icons/arrow_previous
[12:45:43] [main/WARN]: [OptiFine] Invalid grid V: 16, icon: jei:gui/icons/arrow_next
[12:45:43] [main/WARN]: [OptiFine] Invalid grid V: 16, icon: jei:gui/icons/arrow_next
[12:45:43] [main/WARN]: [OptiFine] Invalid grid V: 16, icon: minecraft:missingno
[12:45:43] [main/WARN]: [OptiFine] Invalid grid V: 16, icon: minecraft:missingno
[12:45:43] [main/WARN]: [OptiFine] Invalid grid V: 16, icon: jei:gui/icons/info
[12:45:43] [main/WARN]: [OptiFine] Invalid grid V: 16, icon: jei:gui/icons/info
[12:45:43] [main/WARN]: [OptiFine] Invalid grid V: 16, icon: jei:gui/icons/recipe_transfer
[12:45:43] [main/WARN]: [OptiFine] Invalid grid V: 16, icon: jei:gui/icons/recipe_transfer
[12:45:43] [main/INFO]: Created: 2048x1024x4 minecraft:textures/atlas/blocks.png-atlas
[12:45:43] [main/INFO]: [OptiFine] Animated sprites: 54
[12:45:43] [main/INFO]: Created: 256x128x4 minecraft:textures/atlas/signs.png-atlas
[12:45:43] [main/INFO]: [OptiFine] Animated sprites: 0
[12:45:43] [main/INFO]: Created: 512x512x4 minecraft:textures/atlas/banner_patterns.png-atlas
[12:45:43] [main/INFO]: [OptiFine] Animated sprites: 0
[12:45:43] [main/INFO]: Created: 512x512x4 minecraft:textures/atlas/shield_patterns.png-atlas
[12:45:43] [main/INFO]: [OptiFine] Animated sprites: 0
[12:45:43] [main/INFO]: Created: 256x256x4 minecraft:textures/atlas/chest.png-atlas
[12:45:43] [main/INFO]: [OptiFine] Animated sprites: 0
[12:45:43] [main/INFO]: Created: 512x256x4 minecraft:textures/atlas/beds.png-atlas
[12:45:43] [main/INFO]: [OptiFine] Animated sprites: 0
[12:45:43] [main/INFO]: Created: 512x256x4 minecraft:textures/atlas/shulker_boxes.png-atlas
[12:45:43] [main/INFO]: [OptiFine] Animated sprites: 0
[12:45:46] [main/INFO]: Created: 256x256x0 minecraft:textures/atlas/particles.png-atlas
[12:45:46] [main/INFO]: [OptiFine] Animated sprites: 0
[12:45:46] [main/INFO]: Created: 256x256x0 minecraft:textures/atlas/paintings.png-atlas
[12:45:46] [main/INFO]: [OptiFine] Animated sprites: 0
[12:45:46] [main/INFO]: Created: 128x128x0 minecraft:textures/atlas/mob_effects.png-atlas
[12:45:46] [main/INFO]: [OptiFine] Animated sprites: 0
[12:45:46] [main/INFO]: [OptiFine] *** Reloading custom textures ***
[12:45:46] [main/WARN]: [OptiFine] Unknown resource pack file: mod_resources
[12:45:47] [main/WARN]: [OptiFine] Unknown resource pack file: mod_resources
[12:45:47] [main/WARN]: [OptiFine] Unknown resource pack file: mod_resources
[12:46:03] [main/WARN]: [OptiFine] Unknown resource pack file: mod_resources
[12:46:03] [main/WARN]: [OptiFine] Unknown resource pack file: mod_resources
[12:46:03] [main/WARN]: [OptiFine] Unknown resource pack file: mod_resources
[12:46:03] [main/INFO]: [OptiFine] Disable Forge light pipeline
[12:46:03] [main/INFO]: [OptiFine] Set ForgeConfig.CLIENT.forgeLightPipelineEnabled=false
[12:46:04] [Realms Notification Availability checker #1/INFO]: Could not authorize you against Realms server: Invalid session id
[12:46:11] [main/WARN]: Missing data pack mod:tlskincape
[12:46:12] [main/WARN]: Ambiguity between arguments [c, coupling, add, cart1] and [c, coupling, add, carts] with inputs: [Player, 0123, @e, dd12be42-52a9-4a91-a8a1-11c01849e498]
[12:46:12] [main/WARN]: Ambiguity between arguments [c, coupling, add, carts] and [c, coupling, add, cart1] with inputs: [Player, 0123, dd12be42-52a9-4a91-a8a1-11c01849e498]
[12:46:12] [main/WARN]: Ambiguity between arguments [c, coupling, add, cart1] and [c, coupling, add, carts] with inputs: [Player, 0123, @e, dd12be42-52a9-4a91-a8a1-11c01849e498]
[12:46:12] [main/WARN]: Ambiguity between arguments [c, coupling, add, carts] and [c, coupling, add, cart1] with inputs: [Player, 0123, dd12be42-52a9-4a91-a8a1-11c01849e498]
[12:46:12] [main/WARN]: Ambiguity between arguments [teleport, destination] and [teleport, targets] with inputs: [Player, 0123, @e, dd12be42-52a9-4a91-a8a1-11c01849e498]
[12:46:12] [main/WARN]: Ambiguity between arguments [teleport, location] and [teleport, destination] with inputs: [0.1 -0.5 .9, 0 0 0]
[12:46:12] [main/WARN]: Ambiguity between arguments [teleport, location] and [teleport, targets] with inputs: [0.1 -0.5 .9, 0 0 0]
[12:46:12] [main/WARN]: Ambiguity between arguments [teleport, targets] and [teleport, destination] with inputs: [Player, 0123, dd12be42-52a9-4a91-a8a1-11c01849e498]
[12:46:12] [main/WARN]: Ambiguity between arguments [teleport, targets, location] and [teleport, targets, destination] with inputs: [0.1 -0.5 .9, 0 0 0]
[12:46:12] [main/INFO]: Reloading ResourceManager: Default, forge-1.16.5-36.2.39-universal.jar, flywheel-1.16-0.2.5.jar, create-mc1.16.5_v0.3.2g.jar, jei-1.16.5-7.7.1.153.jar
[12:46:16] [main/INFO]: Loaded 19 recipes
[12:46:17] [main/INFO]: Loaded 1663 advancements
[12:46:18] [main/ERROR]: This world was saved with mod tlskincape which appears to be missing, things may not work well
[12:46:18] [main/INFO]: Injecting existing registry data into this CLIENT instance
[12:46:21] [main/WARN]: Missing data pack mod:tlskincape
[12:46:21] [main/WARN]: Ambiguity between arguments [c, coupling, add, cart1] and [c, coupling, add, carts] with inputs: [Player, 0123, @e, dd12be42-52a9-4a91-a8a1-11c01849e498]
[12:46:21] [main/WARN]: Ambiguity between arguments [c, coupling, add, carts] and [c, coupling, add, cart1] with inputs: [Player, 0123, dd12be42-52a9-4a91-a8a1-11c01849e498]
[12:46:21] [main/WARN]: Ambiguity between arguments [c, coupling, add, cart1] and [c, coupling, add, carts] with inputs: [Player, 0123, @e, dd12be42-52a9-4a91-a8a1-11c01849e498]
[12:46:21] [main/WARN]: Ambiguity between arguments [c, coupling, add, carts] and [c, coupling, add, cart1] with inputs: [Player, 0123, dd12be42-52a9-4a91-a8a1-11c01849e498]
[12:46:21] [main/WARN]: Ambiguity between arguments [teleport, destination] and [teleport, targets] with inputs: [Player, 0123, @e, dd12be42-52a9-4a91-a8a1-11c01849e498]
[12:46:21] [main/WARN]: Ambiguity between arguments [teleport, location] and [teleport, destination] with inputs: [0.1 -0.5 .9, 0 0 0]
[12:46:21] [main/WARN]: Ambiguity between arguments [teleport, location] and [teleport, targets] with inputs: [0.1 -0.5 .9, 0 0 0]
[12:46:21] [main/WARN]: Ambiguity between arguments [teleport, targets] and [teleport, destination] with inputs: [Player, 0123, dd12be42-52a9-4a91-a8a1-11c01849e498]
[12:46:21] [main/WARN]: Ambiguity between arguments [teleport, targets, location] and [teleport, targets, destination] with inputs: [0.1 -0.5 .9, 0 0 0]
[12:46:21] [main/INFO]: Reloading ResourceManager: Default, forge-1.16.5-36.2.39-universal.jar, flywheel-1.16-0.2.5.jar, create-mc1.16.5_v0.3.2g.jar, jei-1.16.5-7.7.1.153.jar
[12:46:24] [main/INFO]: Loaded 19 recipes
[12:46:25] [main/INFO]: Loaded 1663 advancements
[12:46:26] [main/ERROR]: This world was saved with mod tlskincape which appears to be missing, things may not work well
[12:46:26] [main/INFO]: Injecting existing registry data into this CLIENT instance
[12:46:31] [main/INFO]: Environment: authHost='https://authserver.mojang.com', accountsHost='https://api.mojang.com', sessionHost='https://sessionserver.mojang.com', servicesHost='https://api.minecraftservices.com', name='PROD'
[12:46:31] [Server thread/INFO]: Starting integrated minecraft server version 1.16.5
[12:46:31] [Server thread/INFO]: Generating keypair
[12:46:32] [Server thread/INFO]: Preparing start region for dimension minecraft:overworld
[12:46:35] [main/INFO]: A preparar a área de nascimento: 0%
[12:46:35] [main/INFO]: A preparar a área de nascimento: 0%
[12:46:35] [main/INFO]: A preparar a área de nascimento: 0%
[12:46:35] [main/INFO]: A preparar a área de nascimento: 0%
[12:46:35] [main/INFO]: A preparar a área de nascimento: 0%
[12:46:35] [main/INFO]: A preparar a área de nascimento: 0%
[12:46:35] [main/INFO]: A preparar a área de nascimento: 0%
[12:46:36] [main/INFO]: A preparar a área de nascimento: 0%
[12:46:40] [main/INFO]: A preparar a área de nascimento: 47%
[12:46:40] [main/INFO]: A preparar a área de nascimento: 47%
[12:46:40] [main/INFO]: A preparar a área de nascimento: 47%
[12:46:40] [main/INFO]: A preparar a área de nascimento: 47%
[12:46:40] [main/INFO]: A preparar a área de nascimento: 47%
[12:46:40] [main/INFO]: A preparar a área de nascimento: 47%
[12:46:40] [main/INFO]: A preparar a área de nascimento: 47%
[12:46:40] [main/INFO]: A preparar a área de nascimento: 47%
[12:46:40] [main/INFO]: A preparar a área de nascimento: 47%
[12:46:41] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:42] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:42] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:43] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:43] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:43] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:44] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:44] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:45] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:45] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:46] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:46] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:47] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:47] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:48] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:48] [main/INFO]: A preparar a área de nascimento: 83%
[12:46:49] [main/INFO]: A preparar a área de nascimento: 84%
[12:46:49] [main/INFO]: A preparar a área de nascimento: 85%
[12:46:50] [main/INFO]: A preparar a área de nascimento: 87%
[12:46:50] [main/INFO]: A preparar a área de nascimento: 87%
[12:46:51] [main/INFO]: A preparar a área de nascimento: 87%
[12:46:51] [main/INFO]: A preparar a área de nascimento: 87%
[12:46:52] [main/INFO]: A preparar a área de nascimento: 88%
[12:46:52] [main/INFO]: A preparar a área de nascimento: 89%
[12:46:53] [main/INFO]: A preparar a área de nascimento: 91%
[12:46:53] [main/INFO]: A preparar a área de nascimento: 91%
[12:46:54] [main/INFO]: A preparar a área de nascimento: 96%
[12:46:54] [main/INFO]: A preparar a área de nascimento: 98%
[12:46:55] [main/INFO]: Time elapsed: 22662 ms
[12:46:56] [Server thread/INFO]: Changing view distance to 2, from 10
[12:47:03] [Server thread/INFO]: Using new advancement loading for net.minecraft.advancements.PlayerAdvancements@50061d1a
[12:47:03] [Netty Local Client IO #0/INFO]: Connected to a modded server.
[12:47:04] [Server thread/INFO]: Vulpes_Ignis[local:E:9d83c9dc] logged in with entity id 334 at (-120.49413395498833, 66.49390748022948, -175.2198610397835)
[12:47:04] [Server thread/INFO]: Vulpes_Ignis entrou no jogo
[12:47:05] [main/INFO]: No shader config found.
[12:47:05] [main/INFO]: Starting JEI...
[12:47:05] [main/INFO]: Registering item subtypes: jei:minecraft ...
[12:47:05] [main/INFO]: Registering item subtypes: jei:minecraft took 36.23 ms
[12:47:05] [main/INFO]: Registering item subtypes: create:jei_plugin ...
[12:47:05] [main/INFO]: Registering item subtypes: create:jei_plugin took 19.25 ?s
[12:47:05] [main/INFO]: Registering item subtypes: jei:debug ...
[12:47:05] [main/INFO]: Registering item subtypes: jei:debug took 43.20 ?s
[12:47:05] [main/INFO]: Registering item subtypes: jei:internal ...
[12:47:05] [main/INFO]: Registering item subtypes: jei:internal took 14.54 ?s
[12:47:05] [main/INFO]: Registering fluid subtypes: jei:minecraft ...
[12:47:05] [main/INFO]: Registering fluid subtypes: jei:minecraft took 42.77 ?s
[12:47:05] [main/INFO]: Registering fluid subtypes: create:jei_plugin ...
[12:47:05] [main/INFO]: Registering fluid subtypes: create:jei_plugin took 2.085 ms
[12:47:05] [main/INFO]: Registering fluid subtypes: jei:debug ...
[12:47:05] [main/INFO]: Registering fluid subtypes: jei:debug took 1.671 ms
[12:47:05] [main/INFO]: Registering fluid subtypes: jei:internal ...
[12:47:05] [main/INFO]: Registering fluid subtypes: jei:internal took 13.69 ?s
[12:47:05] [main/INFO]: Registering ingredients: jei:minecraft ...
[12:47:05] [main/INFO]: Registering ingredients: jei:minecraft took 244.7 ms
[12:47:05] [main/INFO]: Registering ingredients: create:jei_plugin ...
[12:47:05] [main/INFO]: Registering ingredients: create:jei_plugin took 19.25 ?s
[12:47:05] [main/INFO]: Registering ingredients: jei:debug ...
[12:47:05] [main/INFO]: Registering ingredients: jei:debug took 83.40 ?s
[12:47:05] [main/INFO]: Registering ingredients: jei:internal ...
[12:47:05] [main/INFO]: Registering ingredients: jei:internal took 13.69 ?s
[12:47:05] [main/INFO]: Registering categories: jei:minecraft ...
[12:47:06] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 2578ms or 51 ticks behind
[12:47:06] [Server thread/INFO]: Saving and pausing game...
[12:47:06] [main/INFO]: Registering categories: jei:minecraft took 289.3 ms
[12:47:06] [main/INFO]: Registering categories: create:jei_plugin ...
[12:47:06] [main/INFO]: Registering categories: create:jei_plugin took 30.68 ms
[12:47:06] [main/INFO]: Registering categories: jei:debug ...
[12:47:06] [main/INFO]: Registering categories: jei:debug took 22.67 ?s
[12:47:06] [main/INFO]: Registering categories: jei:internal ...
[12:47:06] [main/INFO]: Registering categories: jei:internal took 6.502 ms
[12:47:06] [main/INFO]: Registering vanilla category extensions: jei:minecraft ...
[12:47:06] [main/INFO]: Registering vanilla category extensions: jei:minecraft took 9.155 ms
[12:47:06] [main/INFO]: Registering vanilla category extensions: create:jei_plugin ...
[12:47:06] [main/INFO]: Registering vanilla category extensions: create:jei_plugin took 19.25 ?s
[12:47:06] [main/INFO]: Registering vanilla category extensions: jei:debug ...
[12:47:06] [main/INFO]: Registering vanilla category extensions: jei:debug took 15.82 ?s
[12:47:06] [main/INFO]: Registering vanilla category extensions: jei:internal ...
[12:47:06] [main/INFO]: Registering vanilla category extensions: jei:internal took 19.67 ?s
[12:47:06] [main/INFO]: Registering recipes: jei:minecraft ...
[12:47:06] [main/INFO]: Registering recipes: jei:minecraft took 388.1 ms
[12:47:06] [main/INFO]: Registering recipes: create:jei_plugin ...
[12:47:06] [main/INFO]: Registering recipes: create:jei_plugin took 206.6 ms
[12:47:06] [main/INFO]: Registering recipes: jei:debug ...
[12:47:06] [main/INFO]: Registering recipes: jei:debug took 73.13 ?s
[12:47:06] [main/INFO]: Registering recipes: jei:internal ...
[12:47:06] [main/INFO]: Registering recipes: jei:internal took 14.97 ?s
[12:47:06] [main/INFO]: Registering recipes transfer handlers: jei:minecraft ...
[12:47:06] [main/INFO]: Registering recipes transfer handlers: jei:minecraft took 8.950 ms
[12:47:06] [main/INFO]: Registering recipes transfer handlers: create:jei_plugin ...
[12:47:06] [main/INFO]: Registering recipes transfer handlers: create:jei_plugin took 2.025 ms
[12:47:06] [main/INFO]: Registering recipes transfer handlers: jei:debug ...
[12:47:06] [main/INFO]: Registering recipes transfer handlers: jei:debug took 17.54 ?s
[12:47:06] [main/INFO]: Registering recipes transfer handlers: jei:internal ...
[12:47:06] [main/INFO]: Registering recipes transfer handlers: jei:internal took 11.98 ?s
[12:47:06] [main/INFO]: Registering recipe catalysts: jei:minecraft ...
[12:47:06] [main/INFO]: Registering recipe catalysts: jei:minecraft took 326.8 ?s
[12:47:06] [main/INFO]: Registering recipe catalysts: create:jei_plugin ...
[12:47:06] [main/INFO]: Registering recipe catalysts: create:jei_plugin took 2.064 ms
[12:47:06] [main/INFO]: Registering recipe catalysts: jei:debug ...
[12:47:06] [main/INFO]: Registering recipe catalysts: jei:debug took 20.96 ?s
[12:47:06] [main/INFO]: Registering recipe catalysts: jei:internal ...
[12:47:06] [main/INFO]: Registering recipe catalysts: jei:internal took 14.97 ?s
[12:47:06] [main/INFO]: Registering gui handlers: jei:minecraft ...
[12:47:06] [main/INFO]: Registering gui handlers: jei:minecraft took 12.49 ms
[12:47:06] [main/INFO]: Registering gui handlers: create:jei_plugin ...
[12:47:06] [main/INFO]: Registering gui handlers: create:jei_plugin took 3.994 ms
[12:47:06] [main/INFO]: Registering gui handlers: jei:debug ...
[12:47:06] [main/INFO]: Registering gui handlers: jei:debug took 20.10 ?s
[12:47:06] [main/INFO]: Registering gui handlers: jei:internal ...
[12:47:06] [main/INFO]: Registering gui handlers: jei:internal took 16.61 ms
[12:47:06] [main/INFO]: Registering advanced plugins: jei:minecraft ...
[12:47:06] [main/INFO]: Registering advanced plugins: jei:minecraft took 42.77 ?s
[12:47:06] [main/INFO]: Registering advanced plugins: create:jei_plugin ...
[12:47:07] [main/INFO]: Registering advanced plugins: create:jei_plugin took 51.32 ?s
[12:47:07] [main/INFO]: Registering advanced plugins: jei:debug ...
[12:47:07] [main/INFO]: Registering advanced plugins: jei:debug took 17.96 ?s
[12:47:07] [main/INFO]: Registering advanced plugins: jei:internal ...
[12:47:07] [main/INFO]: Registering advanced plugins: jei:internal took 11.98 ?s
[12:47:07] [main/INFO]: Building ingredient list...
[12:47:07] [main/INFO]: Building ingredient list took 14.05 ms
[12:47:07] [main/INFO]: Building ingredient filter...
[12:47:06] [Server thread/INFO]: Saving chunks for level 'ServerLevel[Pls work sad face]'/minecraft:overworld
[12:47:07] [main/INFO]: Building ingredient filter took 808.5 ms
[12:47:07] [main/INFO]: Building bookmarks...
[12:47:07] [main/INFO]: Building bookmarks took 3.388 ms
[12:47:07] [main/INFO]: Building recipe registry...
[12:47:08] [main/INFO]: Building recipe registry took 274.8 ms
[12:47:08] [main/INFO]: Building runtime...
[12:47:08] [main/INFO]: Building runtime took 132.3 ms
[12:47:08] [main/INFO]: Sending Runtime: jei:minecraft ...
[12:47:08] [main/INFO]: Sending Runtime: jei:minecraft took 81.26 ?s
[12:47:08] [main/INFO]: Sending Runtime: create:jei_plugin ...
[12:47:08] [main/INFO]: Sending Runtime: create:jei_plugin took 56.45 ?s
[12:47:08] [main/INFO]: Sending Runtime: jei:debug ...
[12:47:08] [main/INFO]: Sending Runtime: jei:debug took 149.3 ?s
[12:47:08] [main/INFO]: Sending Runtime: jei:internal ...
[12:47:08] [main/INFO]: Sending Runtime: jei:internal took 74.42 ?s
[12:47:08] [main/INFO]: Starting JEI took 2.862 s
[12:47:09] [main/INFO]: No shader config found.
[12:47:09] [Server thread/INFO]: Saving chunks for level 'ServerLevel[Pls work sad face]'/minecraft:the_nether
[12:47:11] [Server thread/INFO]: Saving chunks for level 'ServerLevel[Pls work sad face]'/minecraft:the_end
[12:47:11] [main/INFO]: Loaded 18 advancements