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>2017-07-20 00:40:14 +0300
committerClément Foucault <foucault.clem@gmail.com>2017-07-24 16:28:27 +0300
commitbabef873fc2aa2f4788a85f8a4461209fc218c70 (patch)
tree828ef531928acb47a746e4080e8c048f5991c861 /source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
parent72a4778391f0b5aa5a9fd4d35e1cf721d8b3ae51 (diff)
Eevee: SSR: Don't block the ray if tracing behind object.
This requires to check for backface after a hit.
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl')
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl9
1 files changed, 6 insertions, 3 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 3c0b1952e7a..7337ec792c9 100644
--- a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
@@ -67,11 +67,14 @@ void main()
/* Raycast over screen */
float hit_dist = raycast(depthBuffer, viewPosition, R);
- /* TODO Check if has hit a backface */
-
vec2 hit_co = project_point(ProjectionMatrix, viewPosition + R * hit_dist).xy * 0.5 + 0.5;
+
+ /* Check if has hit a backface */
+ vec3 hit_N = normal_decode(textureLod(normalBuffer, hit_co, 0.0).rg, V);
+ pdf *= step(0.0, dot(-R, hit_N));
+
hitData = hit_co.xyxy;
- pdfData = vec4(pdf) * step(-0.1, hit_dist);
+ pdfData = vec4(pdf) * step(0.0, hit_dist);
}
#else /* STEP_RESOLVE */