// __multiversion__ // This signals the loading code to prepend either #version 100 or #version 300 es as apropriate. #include "shaders/fragmentVersionSimple.h" uniform sampler2D TEXTURE_0; uniform sampler2D TEXTURE_1; uniform sampler2D TEXTURE_2; varying vec2 uv; varying vec4 color; varying vec4 worldPosition; varying vec4 fogColor; void main() { vec4 albedo = texture2D( TEXTURE_0, uv); #ifdef ALPHA_TEST if (albedo.a < 0.5) discard; #endif albedo.a *= color.a; vec2 occlusionUV = worldPosition.xz; vec4 occlusionTexture = texture2D( TEXTURE_1, occlusionUV); #ifndef FLIP_OCCLUSION #define OCCLUSION_OPERATOR < #else #define OCCLUSION_OPERATOR > #endif #ifdef SNOW #define OCCLUSION_HEIGHT occlusionTexture.g #define OCCLUSION_LUMINANCE occlusionTexture.r #else #define OCCLUSION_HEIGHT occlusionTexture.a #define OCCLUSION_LUMINANCE occlusionTexture.b #endif // clamp the uvs if ( occlusionUV.x >= 0.0 && occlusionUV.x <= 1.0 && occlusionUV.y >= 0.0 && occlusionUV.y <= 1.0 && worldPosition.y OCCLUSION_OPERATOR OCCLUSION_HEIGHT) { albedo.a = 0.0; } float mixAmount = (worldPosition.y - OCCLUSION_HEIGHT)*25.0; vec2 lightingUVs = vec2(OCCLUSION_LUMINANCE, 1.0); lightingUVs.x = mix(lightingUVs.x, 0.0, mixAmount); vec3 lighting = texture2D( TEXTURE_2, lightingUVs ).rgb; vec4 finalOutput = albedo; finalOutput.rgb *= lighting.rgb; //apply fog gl_FragColor.rgb = mix( finalOutput.rgb, fogColor.rgb, fogColor.a ); gl_FragColor.a = finalOutput.a; }