precision mediump float; uniform vec4 color; uniform sampler2D texture; varying vec3 vertexNormal; varying vec2 vertexTexCoord; void main() { vec3 normal = normalize(vertexNormal); float lambert = max(0.0, -normal.z); float rim = 1.0 - lambert; rim *= rim * rim; vec4 texColor = texture2D(texture, vertexTexCoord); gl_FragColor = rim + (0.4 + 0.4 * lambert) * texColor * color; }