diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2021-03-18 18:58:26 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2021-03-18 20:07:46 +0300 |
commit | b1150fa1f5a5d5fa500d26c4b466e3f03fc30feb (patch) | |
tree | ba6e510488683866b4f1d780f488504be4c685d8 | |
parent | 51c7ff9222c362e03d07aba0ebbffd9d52fc9d3b (diff) |
Fix T86448 EEVEE: SSRefraction Depth regression
Caused by recent change for contact shadow raytracing. rB4e236326c137
4 files changed, 7 insertions, 4 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/effect_reflection_trace_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_reflection_trace_frag.glsl index b1f17cb7b07..cd574c6c9fd 100644 --- a/source/blender/draw/engines/eevee/shaders/effect_reflection_trace_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/effect_reflection_trace_frag.glsl @@ -141,7 +141,7 @@ void main() data.is_hit = raytrace_planar(ray, params, planar_id, hit_sP); } else { - data.is_hit = raytrace(ray, params, true, hit_sP); + data.is_hit = raytrace(ray, params, true, false, hit_sP); } data.ray_pdf_inv = safe_rcp(pdf); diff --git a/source/blender/draw/engines/eevee/shaders/lights_lib.glsl b/source/blender/draw/engines/eevee/shaders/lights_lib.glsl index 5d3db8d4966..87934027361 100644 --- a/source/blender/draw/engines/eevee/shaders/lights_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/lights_lib.glsl @@ -297,7 +297,7 @@ float light_contact_shadows(LightData ld, vec3 P, vec3 vP, vec3 vNg, float rand_ vec3 hit_position_unused; - if (raytrace(ray, params, false, hit_position_unused)) { + if (raytrace(ray, params, false, false, hit_position_unused)) { return 0.0; } } diff --git a/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl b/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl index 5c4fe6d47a0..1b2135646c9 100644 --- a/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl @@ -105,6 +105,7 @@ struct RayTraceParameters { bool raytrace(Ray ray, RayTraceParameters params, const bool discard_backface, + const bool allow_self_intersection, out vec3 hit_position) { /* Clip to near plane for perspective view where there is a singularity at the camera origin. */ @@ -114,11 +115,13 @@ bool raytrace(Ray ray, ScreenSpaceRay ssray = raytrace_screenspace_ray_create(ray, params.thickness); /* Avoid no iteration. */ - if (ssray.max_time < 1.1) { + if (!allow_self_intersection && ssray.max_time < 1.1) { hit_position = ssray.origin.xyz + ssray.direction.xyz; return false; } + ssray.max_time = max(1.1, ssray.max_time); + float prev_delta = 0.0, prev_time = 0.0; float depth_sample = get_depth_from_view_z(ray.origin.z); float delta = depth_sample - ssray.origin.z; diff --git a/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl b/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl index 612e95832e4..1d52dfeab26 100644 --- a/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl @@ -53,7 +53,7 @@ vec4 screen_space_refraction(vec3 vP, vec3 N, vec3 V, float ior, float roughness params.roughness = roughnessSquared; vec3 hit_pos; - bool hit = raytrace(ray, params, false, hit_pos); + bool hit = raytrace(ray, params, false, true, hit_pos); if (hit && (F_eta(ior, dot(H, V)) < 1.0)) { hit_pos = get_view_space_from_depth(hit_pos.xy, hit_pos.z); |