From 0983e66e03001d9f38075d3a9ee8fcaa7966a7d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Mon, 8 Mar 2021 17:12:25 +0100 Subject: EEVEE: Occlusion: Use ScreenSpaceRay for iteration The sampling is now optimum with every samples being at least one pixel appart. Also use a squared repartition to improve the sampling near the center. This also removes the thickness heuristic since it seems to remove a lot of details and bias the AO too much. --- source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl') diff --git a/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl b/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl index 0adfea9ca73..7c375aabb62 100644 --- a/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl @@ -65,8 +65,6 @@ void raytrace_screenspace_ray_finalize(inout ScreenSpaceRay ray) /* Clipping to frustum sides. */ float clip_dist = line_unit_box_intersect_dist(ray.origin.xyz, ray.direction.xyz); ray.max_time = min(ray.max_time, clip_dist); - /* Avoid no iteration. */ - ray.max_time = max(ray.max_time, 1.1); /* Convert to texture coords [0..1] range. */ ray.origin = ray.origin * 0.5 + 0.5; ray.direction *= 0.5; @@ -122,6 +120,8 @@ bool raytrace(Ray ray, } ScreenSpaceRay ssray = raytrace_screenspace_ray_create(ray, params.thickness); + /* Avoid no iteration. */ + ssray.max_time = max(ssray.max_time, 1.1); float prev_delta = 0.0, prev_time = 0.0; float depth_sample = get_depth_from_view_z(ray.origin.z); @@ -173,6 +173,8 @@ bool raytrace_planar(Ray ray, RayTraceParameters params, int planar_ref_id, out } ScreenSpaceRay ssray = raytrace_screenspace_ray_create(ray); + /* Avoid no iteration. */ + ssray.max_time = max(ssray.max_time, 1.1); /* Planar Reflections have X mirrored. */ ssray.origin.x = 1.0 - ssray.origin.x; -- cgit v1.2.3