diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-07-20 00:40:14 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-07-24 16:28:27 +0300 |
commit | babef873fc2aa2f4788a85f8a4461209fc218c70 (patch) | |
tree | 828ef531928acb47a746e4080e8c048f5991c861 /source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl | |
parent | 72a4778391f0b5aa5a9fd4d35e1cf721d8b3ae51 (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.glsl | 9 |
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 */ |