diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-09-24 02:25:21 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-09-25 21:14:42 +0300 |
commit | 98dd2a518be52b7f94c3a6f9345f19a0aebb2284 (patch) | |
tree | 263c9cbb4b466782b133030e796bfe8b67e9f06f /source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl | |
parent | 00955d8d7a2e17ee86767e5f3703d6c20f2602b8 (diff) |
Eevee: Fix SSR in orthographic view.
The problem was that orthographic views can have hit position that are negative. Thus we cannot encode the hit in the sign of the Z component.
The workaround is to store the hit position in screenspace. But since we are using floating point render target, we are loosing quite a bit of precision.
TODO: use RGBA16 instead of RGBA16F. But that means encoding the pdf value somehow.
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl b/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl index d0fc14f8a29..b9aacde264d 100644 --- a/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl @@ -211,11 +211,10 @@ vec3 raycast(int index, vec3 ray_origin, vec3 ray_dir, float thickness, float ra ray_time = max(0.001, min(ray_time, max_time - 1.5)); vec4 ss_ray = ss_start + ss_step * ray_time; - vec3 hit_pos = get_view_space_from_depth(ss_ray.xy, ss_ray.z); /* Tag Z if ray failed. */ - hit_pos.z *= (hit) ? 1.0 : -1.0; - return hit_pos; + ss_ray.z *= (hit) ? 1.0 : -1.0; + return ss_ray.xyz; } float screen_border_mask(vec2 hit_co) |