diff options
author | Mathieu Menuet <bliblubli> | 2017-09-12 16:13:55 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2017-09-12 16:37:35 +0300 |
commit | 659ba012b0f30450c6de13f8b1c2fccce32fc461 (patch) | |
tree | 95dbfbcdec4f20f6cf39b8c0657fa02f7bce64fa /intern/cycles/kernel/kernel_path.h | |
parent | d2202117fe2cb596e4a6d817300e8f46428ee956 (diff) |
Cycles: change AO bounces approximation to do more glossy and transmission.
Rather than treating all ray types equally, we now always render 1 glossy
bounce and unlimited transmission bounces. This makes it possible to get
good looking results with low AO bounces settings, making it useful to
speed up interior renders for example.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D2818
Diffstat (limited to 'intern/cycles/kernel/kernel_path.h')
-rw-r--r-- | intern/cycles/kernel/kernel_path.h | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/intern/cycles/kernel/kernel_path.h b/intern/cycles/kernel/kernel_path.h index 3319e2c2435..bc8f8ec09f8 100644 --- a/intern/cycles/kernel/kernel_path.h +++ b/intern/cycles/kernel/kernel_path.h @@ -111,7 +111,7 @@ 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) { + if(path_state_ao_bounce(kg, state)) { visibility = PATH_RAY_SHADOW; ray->t = kernel_data.background.ao_distance; } @@ -294,7 +294,7 @@ ccl_device void kernel_path_indirect(KernelGlobals *kg, break; } - else if(state->bounce > kernel_data.integrator.ao_bounces) { + else if(path_state_ao_bounce(kg, state)) { break; } @@ -473,13 +473,18 @@ ccl_device_inline void kernel_path_integrate(KernelGlobals *kg, lcg_state = lcg_state_init(&state, 0x51633e2d); } - if(state.bounce > kernel_data.integrator.ao_bounces) { + if(path_state_ao_bounce(kg, &state)) { visibility = PATH_RAY_SHADOW; ray.t = kernel_data.background.ao_distance; } bool hit = scene_intersect(kg, ray, visibility, &isect, &lcg_state, difl, extmax); #else + if(path_state_ao_bounce(kg, state)) { + visibility = PATH_RAY_SHADOW; + ray.t = kernel_data.background.ao_distance; + } + bool hit = scene_intersect(kg, ray, visibility, &isect, NULL, 0.0f, 0.0f); #endif /* __HAIR__ */ @@ -620,7 +625,7 @@ ccl_device_inline void kernel_path_integrate(KernelGlobals *kg, break; } - else if(state.bounce > kernel_data.integrator.ao_bounces) { + else if(path_state_ao_bounce(kg, &state)) { break; } |