uniform mat4 mWorldViewProj; uniform mat4 mInvWorld; uniform mat4 mTransWorld; uniform mat4 mWorld; uniform float dayNightRatio; uniform vec3 eyePosition; uniform float animationTimer; varying vec3 vPosition; varying vec3 worldPosition; varying vec3 eyeVec; varying vec3 lightVec; varying vec3 normal; varying vec3 binormal; varying vec3 tangent; const float e = 2.718281828459; const float BS = 10.0; void main(void) { gl_TexCoord[0] = gl_MultiTexCoord0; gl_Position = mWorldViewProj * gl_Vertex; vPosition = gl_Position.xyz; worldPosition = (gl_Vertex).xyz; vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); normal = normalize(gl_Normal); tangent = normalize(gl_MultiTexCoord1.xyz); binormal = normalize(gl_MultiTexCoord2.xyz); vec3 v; lightVec = sunPosition - worldPosition; eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz; vec4 color; float day = gl_Color.r; float night = gl_Color.g; float light_source = gl_Color.b; float rg = mix(night, day, dayNightRatio); rg += light_source * 2.5; // Make light sources brighter float b = rg; // Moonlight is blue b += (day - night) / 13.0; rg -= (day - night) / 23.0; // Emphase blue a bit in darker places // See C++ implementation in mapblock_mesh.cpp finalColorBlend() b += max(0.0, (1.0 - abs(b - 0.13) / 0.17) * 0.025); // Artificial light is yellow-ish // See C++ implementation in mapblock_mesh.cpp finalColorBlend() rg += max(0.0, (1.0 - abs(rg - 0.85) / 0.15) * 0.065); color.r = rg; color.g = rg; color.b = b; color.a = gl_Color.a; gl_FrontColor = gl_BackColor = clamp(color, 0.0, 1.0); }