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>2021-03-18 18:58:26 +0300
committerClément Foucault <foucault.clem@gmail.com>2021-03-18 20:07:46 +0300
commitb1150fa1f5a5d5fa500d26c4b466e3f03fc30feb (patch)
treeba6e510488683866b4f1d780f488504be4c685d8 /source/blender/draw
parent51c7ff9222c362e03d07aba0ebbffd9d52fc9d3b (diff)
Fix T86448 EEVEE: SSRefraction Depth regression
Caused by recent change for contact shadow raytracing. rB4e236326c137
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_reflection_trace_frag.glsl2
-rw-r--r--source/blender/draw/engines/eevee/shaders/lights_lib.glsl2
-rw-r--r--source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl5
-rw-r--r--source/blender/draw/engines/eevee/shaders/ssr_lib.glsl2
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);