diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-02-20 02:15:14 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-02-21 19:56:26 +0300 |
commit | 606bc5f301505024d7cbbbcd12389ea286c3f825 (patch) | |
tree | 868ef2a8bc4275fd3e57fd7ef41ccdd6f68b788b /intern/cycles/kernel/split/kernel_subsurface_scatter.h | |
parent | 5cc1d5fe17c4d22ae310fc1a74c626c0bb25aef7 (diff) |
Fix T54105: random walk SSS missing in branched indirect paths.
Unify the path and branched path indirect SSS code. No performance impact
found on CUDA, for AMD split kernel the extra code was already there.
Diffstat (limited to 'intern/cycles/kernel/split/kernel_subsurface_scatter.h')
-rw-r--r-- | intern/cycles/kernel/split/kernel_subsurface_scatter.h | 25 |
1 files changed, 3 insertions, 22 deletions
diff --git a/intern/cycles/kernel/split/kernel_subsurface_scatter.h b/intern/cycles/kernel/split/kernel_subsurface_scatter.h index e50d63ea3bc..af0303d8608 100644 --- a/intern/cycles/kernel/split/kernel_subsurface_scatter.h +++ b/intern/cycles/kernel/split/kernel_subsurface_scatter.h @@ -228,7 +228,9 @@ ccl_device void kernel_subsurface_scatter(KernelGlobals *kg) if(sd->flag & SD_BSSRDF) { #ifdef __BRANCHED_PATH__ - if(!kernel_data.integrator.branched) { + if(!kernel_data.integrator.branched || + IS_FLAG(ray_state, ray_index, RAY_BRANCHED_INDIRECT)) + { #endif if(kernel_path_subsurface_scatter(kg, sd, @@ -243,27 +245,6 @@ ccl_device void kernel_subsurface_scatter(KernelGlobals *kg) } #ifdef __BRANCHED_PATH__ } - else if(IS_FLAG(ray_state, ray_index, RAY_BRANCHED_INDIRECT)) { - float bssrdf_u, bssrdf_v; - path_state_rng_2D(kg, - state, - PRNG_BSDF_U, - &bssrdf_u, &bssrdf_v); - - const ShaderClosure *sc = shader_bssrdf_pick(sd, throughput, &bssrdf_u); - - /* do bssrdf scatter step if we picked a bssrdf closure */ - if(sc) { - uint lcg_state = lcg_state_init_addrspace(state, 0x68bc21eb); - subsurface_scatter_step(kg, - sd, - state, - sc, - &lcg_state, - bssrdf_u, bssrdf_v, - false); - } - } else { kernel_split_branched_path_subsurface_indirect_light_init(kg, ray_index); |