uniform mat4 mWorldViewProj;\r
uniform mat4 mInvWorld;\r
uniform mat4 mTransWorld;\r
+uniform float dayNightRatio;\r
\r
varying vec3 vPosition;\r
\r
\r
vPosition = (mWorldViewProj * gl_Vertex).xyz;\r
\r
- if(gl_Normal.y > 0.5)\r
- gl_FrontColor = gl_BackColor = gl_Color;\r
- else\r
- gl_FrontColor = gl_BackColor = gl_Color * 0.7;\r
+ vec4 color;\r
+ //color = vec4(1.0, 1.0, 1.0, 1.0);\r
\r
- /*if(gl_Normal.y > 0.5)\r
- gl_FrontColor = gl_BackColor = vec4(1.0, 1.0, 1.0, 1.0);\r
- else\r
- gl_FrontColor = gl_BackColor = vec4(1.0, 1.0, 1.0, 1.0) * 0.7;*/\r
+ float day = gl_Color.r;\r
+ float night = gl_Color.g;\r
+ float light_source = gl_Color.b;\r
+\r
+ /*color.r = mix(night, day, dayNightRatio);\r
+ color.g = color.r;\r
+ color.b = color.r;*/\r
+\r
+ float rg = mix(night, day, dayNightRatio);\r
+ rg += light_source * 1.0; // Make light sources brighter\r
+ float b = rg;\r
+\r
+ // Moonlight is blue\r
+ b += (day - night) / 13.0;\r
+ rg -= (day - night) / 13.0;\r
+\r
+ // Emphase blue a bit in darker places\r
+ // See C++ implementation in mapblock_mesh.cpp finalColorBlend()\r
+ b += max(0.0, (1.0 - abs(b - 0.13)/0.17) * 0.025);\r
+\r
+ // Artificial light is yellow-ish\r
+ // See C++ implementation in mapblock_mesh.cpp finalColorBlend()\r
+ rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);\r
+\r
+ color.r = rg;\r
+ color.g = rg;\r
+ color.b = b;\r
+\r
+ if(gl_Normal.y <= 0.5)\r
+ color *= 0.7;\r
+\r
+ color.a = gl_Color.a;\r
+\r
+ gl_FrontColor = gl_BackColor = color;\r
\r
gl_TexCoord[0] = gl_MultiTexCoord0;\r
}\r