Index: binaries/data/mods/public/shaders/glsl/common/los_fragment.h =================================================================== --- binaries/data/mods/public/shaders/glsl/common/los_fragment.h +++ binaries/data/mods/public/shaders/glsl/common/los_fragment.h @@ -7,14 +7,15 @@ varying vec2 v_los; #endif -float getLOS() +vec3 applyLOS(vec3 color) { #if !IGNORE_LOS - float los = texture2D(losTex, v_los).a; float threshold = 0.03; - return (los - threshold) / (1.0 - threshold); + float los = clamp((texture2D(losTex, v_los).a - threshold) / (1.0 - threshold), 0.0, 1.0); + float luminance = dot(vec3(0.3, 0.59, 0.11), color); + return mix(vec3(luminance), color, los) * los; #else - return 1.0; + return color; #endif } Index: binaries/data/mods/public/shaders/glsl/model_common.fs =================================================================== --- binaries/data/mods/public/shaders/glsl/model_common.fs +++ binaries/data/mods/public/shaders/glsl/model_common.fs @@ -170,7 +170,7 @@ color = applyFog(color); - color *= getLOS(); + color = applyLOS(color); color *= shadingColor; Index: binaries/data/mods/public/shaders/glsl/model_water.fs =================================================================== --- binaries/data/mods/public/shaders/glsl/model_water.fs +++ binaries/data/mods/public/shaders/glsl/model_water.fs @@ -91,7 +91,7 @@ #endif vec3 color = mix(refrColor + 0.3*specular, reflColor + specular, fresShadow); - color *= getLOS(); + color = applyLOS(color); // Make alpha vary based on both depth (so it blends with the shore) and view angle (make it // become opaque faster at lower view angles so we can't look "underneath" the water plane) Index: binaries/data/mods/public/shaders/glsl/model_waterfall.fs =================================================================== --- binaries/data/mods/public/shaders/glsl/model_waterfall.fs +++ binaries/data/mods/public/shaders/glsl/model_waterfall.fs @@ -36,7 +36,7 @@ vec3 color = (texdiffuse.rgb * v_lighting + specular) * getShadowOnLandscape(); color += texdiffuse.rgb * ambient; - color *= getLOS(); + color = applyLOS(color); gl_FragColor = vec4(applyDebugColor(color, 1.0, texdiffuse.a, 0.0), texdiffuse.a); } Index: binaries/data/mods/public/shaders/glsl/overlayline.fs =================================================================== --- binaries/data/mods/public/shaders/glsl/overlayline.fs +++ binaries/data/mods/public/shaders/glsl/overlayline.fs @@ -28,7 +28,7 @@ vec4 mask = texture2D(maskTex, v_tex); color = mix(base.rgb, color, mask.r); - color *= getLOS(); + color = applyLOS(color); gl_FragColor = vec4(applyDebugColor(color, 1.0, alpha * base.a, 0.0), alpha * base.a); } Index: binaries/data/mods/public/shaders/glsl/particle.fs =================================================================== --- binaries/data/mods/public/shaders/glsl/particle.fs +++ binaries/data/mods/public/shaders/glsl/particle.fs @@ -15,7 +15,7 @@ vec4 color = texture2D(baseTex, v_tex) * vec4((v_color.rgb + sunColor)/2.0,v_color.a); color.rgb = applyFog(color.rgb); - color.rgb *= getLOS(); + color.rgb = applyLOS(color.rgb); gl_FragColor = color; } Index: binaries/data/mods/public/shaders/glsl/terrain_common.fs =================================================================== --- binaries/data/mods/public/shaders/glsl/terrain_common.fs +++ binaries/data/mods/public/shaders/glsl/terrain_common.fs @@ -180,7 +180,7 @@ color = applyFog(color); - color *= getLOS(); + color = applyLOS(color); #if DECAL color *= shadingColor; Index: binaries/data/mods/public/shaders/glsl/water_high.fs =================================================================== --- binaries/data/mods/public/shaders/glsl/water_high.fs +++ binaries/data/mods/public/shaders/glsl/water_high.fs @@ -306,5 +306,5 @@ color = applyFog(color); - gl_FragColor = vec4(applyDebugColor(color * getLOS(), 1.0, refrColor.a, 0.0), refrColor.a); + gl_FragColor = vec4(applyDebugColor(applyLOS(color), 1.0, refrColor.a, 0.0), refrColor.a); } Index: binaries/data/mods/public/shaders/glsl/water_simple.fs =================================================================== --- binaries/data/mods/public/shaders/glsl/water_simple.fs +++ binaries/data/mods/public/shaders/glsl/water_simple.fs @@ -9,5 +9,5 @@ void main() { - gl_FragColor = vec4(texture2D(baseTex, v_coords).rgb * color * getLOS(), 1.0); + gl_FragColor = vec4(applyLOS(texture2D(baseTex, v_coords).rgb * color), 1.0); }