From 86cb7d52dde019921d5f9d613e28a1e0edef535f Mon Sep 17 00:00:00 2001 From: adQuid <28126232+adQuid@users.noreply.github.com> Date: Wed, 16 Aug 2023 15:09:56 -0400 Subject: [PATCH 1/2] add horizon fadeout for fog effects prevents bizzare fog glow when looking off of high places past the draw distance --- shaders/clouds.omwfx | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/shaders/clouds.omwfx b/shaders/clouds.omwfx index 7f613ff..432685f 100644 --- a/shaders/clouds.omwfx +++ b/shaders/clouds.omwfx @@ -669,16 +669,22 @@ fragment main { col.rgb = mix(mix(omw.sunColor.rgb, normalize(omw.sunColor.rgb), 0.75) * 0.4, col.rgb, 1.0 / (1.0 + max_dist * 0.005 * pow(interior_mist, 2))); } } else { - if (max_dist >= HORIZON * 0.9) { - if (replace_skybox) { - // Darken the sky above - col.rgb = sky_color * mix(vec3(0.5, 0.7, 0.9), vec3(1.0), vec3(1.0 - dir.z)); - } - if (better_sun) { - col.rgb += sun_light(dir); - } + if (max_dist >= HORIZON * 0.9) { + if (replace_skybox) { + // Darken the sky above + col.rgb = sky_color * mix(vec3(0.5, 0.7, 0.9), vec3(1.0), vec3(1.0 - dir.z)); } - col = apply_fog(col, wpos, dir, max_dist, dyn_clouds, dyn_mist); + if (better_sun) { + col.rgb += sun_light(dir); + } + } + + if (max_dist < HORIZON * 0.9){ + col = apply_fog(col, wpos, dir, max_dist, dyn_clouds, dyn_mist); + } else if (dir.z > 0){ + float fogFadeIn = clamp(dir.z * 5.0, 0, 1); + col = apply_fog(col, wpos, dir, max_dist, dyn_clouds, dyn_mist) * fogFadeIn + (col * (1-fogFadeIn)); + } } if (point_glow_enabled && point_glow_intensity > 0.0) { From 81c51fc962858f79ef6f56a41323bf15c7928ab6 Mon Sep 17 00:00:00 2001 From: adQuid <28126232+adQuid@users.noreply.github.com> Date: Fri, 18 Aug 2023 12:08:09 -0400 Subject: [PATCH 2/2] rework fadeout strategy --- shaders/clouds.omwfx | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/shaders/clouds.omwfx b/shaders/clouds.omwfx index 432685f..b8c3b8d 100644 --- a/shaders/clouds.omwfx +++ b/shaders/clouds.omwfx @@ -457,6 +457,19 @@ fragment main { } } + //trims away the glowing white region when looking off a high place + if (wpos.z < omw.eyePos.z + 10 && cull_dist > HORIZON * 0.001){ + mist = 0.0; + } + + //fade out the clouds near the horizon to make them blend together + if (dir.z < -0.0){ + cloud = 0.0; + } else if (dir.z < 0.2){ + float cloudFadeIn = clamp(pow((dir.z * 5.0), 3), 0, 1); + cloud *= cloudFadeIn; + } + //float attenuation = 0.00009 / (1.0 + wpos.z / 300); return vec2( @@ -679,12 +692,7 @@ fragment main { } } - if (max_dist < HORIZON * 0.9){ - col = apply_fog(col, wpos, dir, max_dist, dyn_clouds, dyn_mist); - } else if (dir.z > 0){ - float fogFadeIn = clamp(dir.z * 5.0, 0, 1); - col = apply_fog(col, wpos, dir, max_dist, dyn_clouds, dyn_mist) * fogFadeIn + (col * (1-fogFadeIn)); - } + col = apply_fog(col, wpos, dir, max_dist, dyn_clouds, dyn_mist); } if (point_glow_enabled && point_glow_intensity > 0.0) {