diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2021-03-13 22:56:26 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2021-03-13 22:59:20 +0300 |
commit | 03490618a285a46dca137055735a8df780a24047 (patch) | |
tree | dc8ec2d11957ab748897077da4cdb67170ca9e5e /source/blender/draw | |
parent | 09e77d2c89315ee3b7153e53d6990469b6759fa7 (diff) |
EEVEE: ScreenSpaceReflections: Avoid outputing NaNs
This happens when the normal is too much deformed to give valid
reflection even after ensure_valid_reflection.
Cycles seems to not handle this case either so we just discard the
rays.
Diffstat (limited to 'source/blender/draw')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/effect_reflection_trace_frag.glsl | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/effect_reflection_trace_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_reflection_trace_frag.glsl index b88a106e897..b1f17cb7b07 100644 --- a/source/blender/draw/engines/eevee/shaders/effect_reflection_trace_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/effect_reflection_trace_frag.glsl @@ -113,6 +113,13 @@ void main() vec3 vH = sample_ggx(rand.xzw, alpha, vV, vN, vT, vB, pdf); vec3 vR = reflect(-vV, vH); + if (isnan(pdf)) { + /* Seems that somethings went wrong. + * This only happens on extreme cases where the normal deformed too much to have any valid + * reflections. */ + return; + } + if (data.is_planar) { vec3 view_plane_normal = transform_direction(ViewMatrix, planars_data[planar_id].pl_normal); /* For planar reflections, we trace inside the reflected view. */ |