Shaders: Harmonize Irrlicht and shader fog calculations
authorLars Hofhansl <larsh@apache.org>
Fri, 21 Oct 2016 05:21:49 +0000 (22:21 -0700)
committerparamat <mat.gregory@virginmedia.com>
Mon, 24 Oct 2016 06:41:00 +0000 (07:41 +0100)
client/shaders/nodes_shader/opengl_fragment.glsl
client/shaders/water_surface_shader/opengl_fragment.glsl
client/shaders/wielded_shader/opengl_fragment.glsl

index 654b1396d29fc83339824eddb4d7ebea0e3b7ccb..299de2749b9de454cf49aff701bb20fe82907577 100644 (file)
@@ -197,14 +197,14 @@ 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(length(eyeVec) / fogDistance * 1.5 - 0.6, 1.0));
-               alpha = mix(alpha, 0.0, d);
+               float d = clamp((fogDistance - length(eyeVec)) / (fogDistance * 0.6), 0.0, 1.0);
+               alpha = mix(0.0, alpha, d);
        }
        col = vec4(col.rgb, alpha);
 #else
        if (fogDistance != 0.0) {
-               float d = max(0.0, min(length(eyeVec) / fogDistance * 1.5 - 0.6, 1.0));
-               col = mix(col, skyBgColor, d);
+               float d = clamp((fogDistance - length(eyeVec)) / (fogDistance * 0.6), 0.0, 1.0);
+               col = mix(skyBgColor, col, d);
        }
        col = vec4(col.rgb, base.a);
 #endif
index 1aa721f831383bca47715f7f484162488df19b29..8321ddf93766782d6d022ce2ae32a7412bd3c121 100644 (file)
@@ -153,14 +153,14 @@ 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(length(eyeVec) / fogDistance * 1.5 - 0.6, 1.0));
-               alpha = mix(alpha, 0.0, d);
+               float d = clamp((fogDistance - length(eyeVec)) / (fogDistance * 0.6), 0.0, 1.0);
+               alpha = mix(0.0, alpha, d);
        }
        col = vec4(col.rgb, alpha);
 #else
        if (fogDistance != 0.0) {
-               float d = max(0.0, min(length(eyeVec) / fogDistance * 1.5 - 0.6, 1.0));
-               col = mix(col, skyBgColor, d);
+               float d = clamp((fogDistance - length(eyeVec)) / (fogDistance * 0.6), 0.0, 1.0);
+               col = mix(skyBgColor, col, d);
        }
        col = vec4(col.rgb, base.a);
 #endif
index afb8cc32d64d67aed2ac971cf6de564c2230e72c..bd97414419594ac31033ed465cbb91a24345b619 100644 (file)
@@ -107,8 +107,8 @@ void main(void)
        vec4 col = vec4(color.rgb, base.a);
        col *= gl_Color;
        if (fogDistance != 0.0) {
-               float d = max(0.0, min(length(eyeVec) / fogDistance * 1.5 - 0.6, 1.0));
-               col = mix(col, skyBgColor, d);
+               float d = clamp((fogDistance - length(eyeVec)) / (fogDistance * 0.6), 0.0, 1.0);
+               col = mix(skyBgColor, col, d);
        }
        gl_FragColor = vec4(col.rgb, base.a);
 }