precision highp float; // Constants uniform vec3 vEyePosition; uniform vec4 vDiffuseColor; // Gradient variables uniform vec4 topColor; uniform vec4 bottomColor; uniform float offset; uniform float smoothness; // Input varying vec3 vPositionW; #ifdef NORMAL varying vec3 vNormalW; #endif #ifdef VERTEXCOLOR varying vec4 vColor; #endif // Helper functions #include // Lights #include<__decl__lightFragment>[0] #include<__decl__lightFragment>[1] #include<__decl__lightFragment>[2] #include<__decl__lightFragment>[3] #include #include // Samplers #ifdef DIFFUSE varying vec2 vDiffuseUV; uniform sampler2D diffuseSampler; uniform vec2 vDiffuseInfos; #endif #include // Fog #include void main(void) { #include vec3 viewDirectionW = normalize(vEyePosition - vPositionW); float h = normalize(vPositionW).y + offset; float mysmoothness = clamp(smoothness, 0.01, max(smoothness, 10.)); vec4 baseColor = mix(bottomColor, topColor, max(pow(max(h, 0.0), mysmoothness), 0.0)); // Base color vec3 diffuseColor = baseColor.rgb; // Alpha float alpha = baseColor.a; #ifdef ALPHATEST if (baseColor.a < 0.4) discard; #endif #ifdef VERTEXCOLOR baseColor.rgb *= vColor.rgb; #endif // Bump #ifdef NORMAL vec3 normalW = normalize(vNormalW); #else vec3 normalW = vec3(1.0, 1.0, 1.0); #endif // Lighting vec3 diffuseBase = vec3(0., 0., 0.); lightingInfo info; float shadow = 1.; float glossiness = 0.; #include[0] #include[1] #include[2] #include[3] #ifdef VERTEXALPHA alpha *= vColor.a; #endif vec3 finalDiffuse = clamp(diffuseBase * diffuseColor, 0.0, 1.0) * baseColor.rgb; // Composition vec4 color = vec4(finalDiffuse, alpha); #include gl_FragColor = color; }