From 0067825187b569e9dc9590cd9a944c8094709b2f Mon Sep 17 00:00:00 2001 From: Joshua Barretto Date: Sat, 31 Dec 2022 19:19:52 +0000 Subject: [PATCH] Reflection smearing --- assets/voxygen/shaders/clouds-frag.glsl | 18 ++++++++++++++++-- voxygen/src/render/mod.rs | 3 +++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/assets/voxygen/shaders/clouds-frag.glsl b/assets/voxygen/shaders/clouds-frag.glsl index 746731c690..22580bdab3 100644 --- a/assets/voxygen/shaders/clouds-frag.glsl +++ b/assets/voxygen/shaders/clouds-frag.glsl @@ -191,13 +191,27 @@ void main() { } #endif - new_uv = clamp(new_uv, vec2(0), vec2(1)); + #ifdef EXPERIMENTAL_SMEARREFLECTIONS + const float SMEAR_FRAC = 0.2; + vec2 anew_uv = abs(new_uv - 0.5) * 2; + new_uv = mix( + anew_uv, + 1.0 - SMEAR_FRAC + (1.0 - 1.0 / (1.0 + (anew_uv - 1.0 + SMEAR_FRAC))) * SMEAR_FRAC, + lessThan(vec2(1.0 - SMEAR_FRAC), anew_uv) + ) * sign(new_uv - 0.5) * 0.5 + 0.5; + #else + new_uv = clamp(new_uv, vec2(0), vec2(1)); + #endif vec3 new_wpos = wpos_at(new_uv); float new_dist = distance(new_wpos, cam_pos.xyz); float merge = min( // Off-screen merge factor - clamp((1.0 - max(abs(new_uv.y - 0.5), abs(new_uv.x - 0.5)) * 2) * 8.0, 0, 1), + #ifdef EXPERIMENTAL_SMEARREFLECTIONS + 1.0, + #else + clamp((1.0 - max(abs(new_uv.y - 0.5), abs(new_uv.x - 0.5)) * 2) * 6.0, 0, 1), + #endif // Depth merge factor clamp((new_dist - dist * 0.5) / (dist * 0.5), 0.0, 1.0) ); diff --git a/voxygen/src/render/mod.rs b/voxygen/src/render/mod.rs index 75ec959f4a..92e5906585 100644 --- a/voxygen/src/render/mod.rs +++ b/voxygen/src/render/mod.rs @@ -531,4 +531,7 @@ pub enum ExperimentalShader { ViewNormals, /// Show gbuffer materials. ViewMaterials, + /// Rather than fading out screen-space reflections at view space borders, + /// smear screen space to cover the reflection vector. + SmearReflections, }