Use range-based fog instead of z-plane based.
authorLars Hofhansl <larsh@apache.org>
Wed, 12 Oct 2016 20:38:53 +0000 (13:38 -0700)
committersfan5 <sfan5@live.de>
Thu, 13 Oct 2016 21:30:15 +0000 (23:30 +0200)
client/shaders/nodes_shader/opengl_fragment.glsl
client/shaders/water_surface_shader/opengl_fragment.glsl
client/shaders/wielded_shader/opengl_fragment.glsl
src/game.cpp

index 6862842a7a3108c8f5e353f58042840e7f6f451c..654b1396d29fc83339824eddb4d7ebea0e3b7ccb 100644 (file)
@@ -197,13 +197,13 @@ void main(void)
 #if MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT
        float alpha = gl_Color.a;
        if (fogDistance != 0.0) {
-               float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
+               float d = max(0.0, min(length(eyeVec) / fogDistance * 1.5 - 0.6, 1.0));
                alpha = mix(alpha, 0.0, d);
        }
        col = vec4(col.rgb, alpha);
 #else
        if (fogDistance != 0.0) {
-               float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
+               float d = max(0.0, min(length(eyeVec) / fogDistance * 1.5 - 0.6, 1.0));
                col = mix(col, skyBgColor, d);
        }
        col = vec4(col.rgb, base.a);
index 1fa6695413d3b7b5ca4fb8af5cb17704d5b13f20..1aa721f831383bca47715f7f484162488df19b29 100644 (file)
@@ -153,13 +153,13 @@ vec4 base = texture2D(baseTexture, uv).rgba;
 #if MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE
        float alpha = gl_Color.a;
        if (fogDistance != 0.0) {
-               float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
+               float d = max(0.0, min(length(eyeVec) / fogDistance * 1.5 - 0.6, 1.0));
                alpha = mix(alpha, 0.0, d);
        }
        col = vec4(col.rgb, alpha);
 #else
        if (fogDistance != 0.0) {
-               float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
+               float d = max(0.0, min(length(eyeVec) / fogDistance * 1.5 - 0.6, 1.0));
                col = mix(col, skyBgColor, d);
        }
        col = vec4(col.rgb, base.a);
index 75dd1b674966cf3b64e234b527b80ace8e0ab972..afb8cc32d64d67aed2ac971cf6de564c2230e72c 100644 (file)
@@ -107,7 +107,7 @@ void main(void)
        vec4 col = vec4(color.rgb, base.a);
        col *= gl_Color;
        if (fogDistance != 0.0) {
-               float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
+               float d = max(0.0, min(length(eyeVec) / fogDistance * 1.5 - 0.6, 1.0));
                col = mix(col, skyBgColor, d);
        }
        gl_FragColor = vec4(col.rgb, base.a);
index b85f6d98d4f7a21032e01bfa53f8a134f4c275e5..ed2673c7123cfb16d5366eba078866cddd6c8e4c 100644 (file)
@@ -4168,7 +4168,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats,
                                runData->fog_range * 1.0,
                                0.01,
                                false, // pixel fog
-                               false // range fog
+                               true // range fog
                );
        } else {
                driver->setFog(