diff options
Diffstat (limited to 'source/blender/draw')
3 files changed, 6 insertions, 5 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 355c2038dd2..520dc7b9624 100644 --- a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl @@ -252,12 +252,13 @@ vec4 get_ssr_sample( inout float weight_acc) { vec4 hit_co_pdf = texelFetch(hitBuffer, target_texel, 0).rgba; - bool has_hit = (hit_co_pdf.z < 0.0); + bool has_hit = (hit_co_pdf.z > 0.0); bool is_planar = (hit_co_pdf.w < 0.0); - hit_co_pdf.z = -abs(hit_co_pdf.z); + hit_co_pdf.z = abs(hit_co_pdf.z); hit_co_pdf.w = abs(hit_co_pdf.w); /* Hit position in world space. */ + hit_co_pdf.xyz = get_view_space_from_depth(hit_co_pdf.xy, hit_co_pdf.z); vec3 hit_pos = transform_point(ViewMatrixInverse, hit_co_pdf.xyz); vec2 ref_uvs; 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) diff --git a/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl b/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl index 68e0c2a682f..6dbd761ba8d 100644 --- a/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl @@ -36,6 +36,7 @@ vec4 screen_space_refraction(vec3 viewPosition, vec3 N, vec3 V, float ior, float vec3 hit_pos = raycast(-1, viewPosition, R, ssrThickness, jitter, roughnessSquared); if ((hit_pos.z < 0.0) && (F_eta(ior, dot(H, V)) < 1.0)) { + hit_pos = get_view_space_from_depth(hit_pos.xy, hit_pos.z); float hit_dist = distance(hit_pos, viewPosition); float cone_cos = cone_cosine(roughnessSquared); |