Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2018-04-30 13:25:15 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-04-30 17:39:26 +0300
commit41431eacfa1afc66533f5d27cc21dfa58024e26c (patch)
tree11f582e11d426087293bb8519ae2fc8b6681bec3 /source/blender
parent630c24fc61329bb1a161653f355fad887aa1d08d (diff)
Eevee: TAA: Use safe color when outputing the final color.
This prevent any NANs pixel to spear accross the history. This does not mean we should allow NANs at all!
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl5
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_temporal_aa.glsl10
2 files changed, 8 insertions, 7 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
index 3512d4a86c1..6c21d7d6fef 100644
--- a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
@@ -511,11 +511,6 @@ void main()
fallback_cubemap(N, V, worldPosition, viewPosition, roughness, roughnessSquared, spec_accum);
}
- /* XXX TODO FIXME (fclem): Something else produces NANs and is not handled before. */
- if (any(isnan(spec_accum))) {
- spec_accum = vec4(0.0);
- }
-
fragColor = vec4(spec_accum.rgb * speccol_roughness.rgb, 1.0);
}
diff --git a/source/blender/draw/engines/eevee/shaders/effect_temporal_aa.glsl b/source/blender/draw/engines/eevee/shaders/effect_temporal_aa.glsl
index d4fbac21563..8d07ae45b6b 100644
--- a/source/blender/draw/engines/eevee/shaders/effect_temporal_aa.glsl
+++ b/source/blender/draw/engines/eevee/shaders/effect_temporal_aa.glsl
@@ -4,6 +4,12 @@ uniform sampler2D velocityBuffer;
out vec4 FragColor;
+vec4 safe_color(vec4 c)
+{
+ /* Clamp to avoid black square artifacts if a pixel goes NaN. */
+ return clamp(c, vec4(0.0), vec4(1e20)); /* 1e20 arbitrary. */
+}
+
#ifdef USE_REPROJECTION
/**
@@ -85,7 +91,7 @@ void main()
bool out_of_view = any(greaterThanEqual(abs(uv_history - 0.5), vec2(0.5)));
color_history = (out_of_view) ? color : color_history;
- FragColor = color_history;
+ FragColor = safe_color(color_history);
}
#else
@@ -97,6 +103,6 @@ void main()
ivec2 texel = ivec2(gl_FragCoord.xy);
vec4 color = texelFetch(colorBuffer, texel, 0);
vec4 color_history = texelFetch(colorHistoryBuffer, texel, 0);
- FragColor = mix(color_history, color, alpha);
+ FragColor = safe_color(mix(color_history, color, alpha));
}
#endif