From 0ad40fd484f57ab5d0536f9aaa892997f8aa9bd2 Mon Sep 17 00:00:00 2001 From: Lars Hofhansl Date: Wed, 12 Oct 2016 13:38:53 -0700 Subject: Use range-based fog instead of z-plane based. --- client/shaders/water_surface_shader/opengl_fragment.glsl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'client/shaders/water_surface_shader/opengl_fragment.glsl') diff --git a/client/shaders/water_surface_shader/opengl_fragment.glsl b/client/shaders/water_surface_shader/opengl_fragment.glsl index 1fa669541..1aa721f83 100644 --- a/client/shaders/water_surface_shader/opengl_fragment.glsl +++ b/client/shaders/water_surface_shader/opengl_fragment.glsl @@ -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); -- cgit v1.2.3 From 779d2c5f64e321cc126b3e3abed9e37fd30edb1b Mon Sep 17 00:00:00 2001 From: Lars Hofhansl Date: Thu, 20 Oct 2016 22:21:49 -0700 Subject: Shaders: Harmonize Irrlicht and shader fog calculations --- client/shaders/water_surface_shader/opengl_fragment.glsl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'client/shaders/water_surface_shader/opengl_fragment.glsl') diff --git a/client/shaders/water_surface_shader/opengl_fragment.glsl b/client/shaders/water_surface_shader/opengl_fragment.glsl index 1aa721f83..8321ddf93 100644 --- a/client/shaders/water_surface_shader/opengl_fragment.glsl +++ b/client/shaders/water_surface_shader/opengl_fragment.glsl @@ -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 -- cgit v1.2.3 From 98176481c1d0b6f8960574af1c2568085e37e433 Mon Sep 17 00:00:00 2001 From: Lars Hofhansl Date: Mon, 24 Oct 2016 08:23:13 -0700 Subject: Shaders: Apply tone mapping before fog calculation. --- client/shaders/water_surface_shader/opengl_fragment.glsl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'client/shaders/water_surface_shader/opengl_fragment.glsl') diff --git a/client/shaders/water_surface_shader/opengl_fragment.glsl b/client/shaders/water_surface_shader/opengl_fragment.glsl index 8321ddf93..d910220e9 100644 --- a/client/shaders/water_surface_shader/opengl_fragment.glsl +++ b/client/shaders/water_surface_shader/opengl_fragment.glsl @@ -150,6 +150,10 @@ vec4 base = texture2D(baseTexture, uv).rgba; vec4 col = vec4(color.rgb * gl_Color.rgb, 1.0); +#ifdef ENABLE_TONE_MAPPING + col = applyToneMapping(col); +#endif + #if MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE float alpha = gl_Color.a; if (fogDistance != 0.0) { @@ -165,9 +169,5 @@ vec4 base = texture2D(baseTexture, uv).rgba; col = vec4(col.rgb, base.a); #endif -#ifdef ENABLE_TONE_MAPPING - gl_FragColor = applyToneMapping(col); -#else gl_FragColor = col; -#endif } -- cgit v1.2.3 From 198ed60cabd3066977df5360b7b32a6b895ea744 Mon Sep 17 00:00:00 2001 From: lhofhansl Date: Wed, 26 Oct 2016 07:24:45 -0700 Subject: Shaders: Remove special handling for liquids. (#4670) --- client/shaders/water_surface_shader/opengl_fragment.glsl | 9 --------- 1 file changed, 9 deletions(-) (limited to 'client/shaders/water_surface_shader/opengl_fragment.glsl') diff --git a/client/shaders/water_surface_shader/opengl_fragment.glsl b/client/shaders/water_surface_shader/opengl_fragment.glsl index d910220e9..b4c0cc4f8 100644 --- a/client/shaders/water_surface_shader/opengl_fragment.glsl +++ b/client/shaders/water_surface_shader/opengl_fragment.glsl @@ -154,20 +154,11 @@ vec4 base = texture2D(baseTexture, uv).rgba; col = applyToneMapping(col); #endif -#if MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE - float alpha = gl_Color.a; - if (fogDistance != 0.0) { - 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 = clamp((fogDistance - length(eyeVec)) / (fogDistance * 0.6), 0.0, 1.0); col = mix(skyBgColor, col, d); } col = vec4(col.rgb, base.a); -#endif gl_FragColor = col; } -- cgit v1.2.3 From 5f0dc8e78ad7e62959786efd5c7f72044aacb53a Mon Sep 17 00:00:00 2001 From: Rogier-5 Date: Wed, 16 Nov 2016 17:56:05 +0100 Subject: Fix unexplained shader issue (glsl compiler bug??) (#4757) --- client/shaders/water_surface_shader/opengl_fragment.glsl | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'client/shaders/water_surface_shader/opengl_fragment.glsl') diff --git a/client/shaders/water_surface_shader/opengl_fragment.glsl b/client/shaders/water_surface_shader/opengl_fragment.glsl index b4c0cc4f8..4164870c7 100644 --- a/client/shaders/water_surface_shader/opengl_fragment.glsl +++ b/client/shaders/water_surface_shader/opengl_fragment.glsl @@ -21,6 +21,8 @@ bool texSeamless = false; const float e = 2.718281828459; const float BS = 10.0; +const float fogStart = 0.4; +const float fogShadingParameter = 1 / ( 1 - fogStart); #ifdef ENABLE_TONE_MAPPING @@ -155,8 +157,18 @@ vec4 base = texture2D(baseTexture, uv).rgba; #endif if (fogDistance != 0.0) { - float d = clamp((fogDistance - length(eyeVec)) / (fogDistance * 0.6), 0.0, 1.0); - col = mix(skyBgColor, col, d); + // Due to a bug in some (older ?) graphics stacks (possibly in the glsl compiler ?), + // the fog will only be rendered correctly if the last operation before the + // clamp() is an addition. Else, the clamp() seems to be ignored. + // E.g. the following won't work: + // float clarity = clamp(fogShadingParameter + // * (fogDistance - length(eyeVec)) / fogDistance), 0.0, 1.0); + // As additions usually come for free following a multiplication, the new formula + // should be more efficient as well. + // Note: clarity = (1 - fogginess) + float clarity = clamp(fogShadingParameter + - fogShadingParameter * length(eyeVec) / fogDistance, 0.0, 1.0); + col = mix(skyBgColor, col, clarity); } col = vec4(col.rgb, base.a); -- cgit v1.2.3 From 075833e39368e63e06889f21140f816420e83541 Mon Sep 17 00:00:00 2001 From: Lars Hofhansl Date: Sat, 3 Dec 2016 21:43:25 -0800 Subject: Fog: Make fraction of visible distance at which fog starts configurable Optimise the fetching of global settings 'camera_smoothing', 'cinematic' and 'cinematic_camera_smoothing'. Cache 'cam_smoothing'. --- client/shaders/water_surface_shader/opengl_fragment.glsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'client/shaders/water_surface_shader/opengl_fragment.glsl') diff --git a/client/shaders/water_surface_shader/opengl_fragment.glsl b/client/shaders/water_surface_shader/opengl_fragment.glsl index 4164870c7..c4e78470d 100644 --- a/client/shaders/water_surface_shader/opengl_fragment.glsl +++ b/client/shaders/water_surface_shader/opengl_fragment.glsl @@ -21,7 +21,7 @@ bool texSeamless = false; const float e = 2.718281828459; const float BS = 10.0; -const float fogStart = 0.4; +const float fogStart = FOG_START; const float fogShadingParameter = 1 / ( 1 - fogStart); #ifdef ENABLE_TONE_MAPPING -- cgit v1.2.3