diff options
Diffstat (limited to 'intern/cycles/kernel/kernel_path.h')
-rw-r--r-- | intern/cycles/kernel/kernel_path.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/intern/cycles/kernel/kernel_path.h b/intern/cycles/kernel/kernel_path.h index 8ce9a4f02ec..f90701a8260 100644 --- a/intern/cycles/kernel/kernel_path.h +++ b/intern/cycles/kernel/kernel_path.h @@ -109,6 +109,10 @@ ccl_device void kernel_path_indirect(KernelGlobals *kg, /* intersect scene */ Intersection isect; uint visibility = path_state_ray_visibility(kg, state); + if(state->bounce > kernel_data.integrator.ao_bounces) { + visibility = PATH_RAY_SHADOW; + ray->t = kernel_data.background.ao_distance; + } bool hit = scene_intersect(kg, *ray, visibility, @@ -292,6 +296,9 @@ ccl_device void kernel_path_indirect(KernelGlobals *kg, break; } + else if(state->bounce > kernel_data.integrator.ao_bounces) { + break; + } /* setup shading */ shader_setup_from_ray(kg, @@ -627,6 +634,11 @@ ccl_device_inline float4 kernel_path_integrate(KernelGlobals *kg, lcg_state = lcg_state_init(rng, &state, 0x51633e2d); } + if(state.bounce > kernel_data.integrator.ao_bounces) { + visibility = PATH_RAY_SHADOW; + ray.t = kernel_data.background.ao_distance; + } + bool hit = scene_intersect(kg, ray, visibility, &isect, &lcg_state, difl, extmax); #else bool hit = scene_intersect(kg, ray, visibility, &isect, NULL, 0.0f, 0.0f); @@ -769,6 +781,9 @@ ccl_device_inline float4 kernel_path_integrate(KernelGlobals *kg, break; } + else if(state.bounce > kernel_data.integrator.ao_bounces) { + break; + } /* setup shading */ shader_setup_from_ray(kg, &sd, &isect, &ray); |