]> git.lizzy.rs Git - minetest.git/blobdiff - client/shaders/test_shader_1/opengl_vertex.glsl
Handle day-night transition in shader and make light sources brighter when shaders...
[minetest.git] / client / shaders / test_shader_1 / opengl_vertex.glsl
index 4980850535f569f6a2c9aac316d46bbd05195db5..e24f58c099b254098aa80e25e1510bbdd7203783 100644 (file)
@@ -2,6 +2,7 @@
 uniform mat4 mWorldViewProj;\r
 uniform mat4 mInvWorld;\r
 uniform mat4 mTransWorld;\r
+uniform float dayNightRatio;\r
 \r
 varying vec3 vPosition;\r
 \r
@@ -11,15 +12,43 @@ void main(void)
 \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