diff options
Diffstat (limited to 'intern/cycles/kernel/kernel_shadow.h')
-rw-r--r-- | intern/cycles/kernel/kernel_shadow.h | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/intern/cycles/kernel/kernel_shadow.h b/intern/cycles/kernel/kernel_shadow.h index 2811a8348ca..cb5fcf813f3 100644 --- a/intern/cycles/kernel/kernel_shadow.h +++ b/intern/cycles/kernel/kernel_shadow.h @@ -107,11 +107,14 @@ ccl_device_inline bool shadow_blocked(KernelGlobals *kg, PathState *state, Ray * /* setup shader data at surface */ ShaderData sd; - shader_setup_from_ray(kg, &sd, isect, ray, state->bounce+1, bounce); + shader_setup_from_ray(kg, &sd, isect, ray); /* attenuation from transparent surface */ if(!(sd.flag & SD_HAS_ONLY_VOLUME)) { - shader_eval_surface(kg, &sd, 0.0f, PATH_RAY_SHADOW, SHADER_CONTEXT_SHADOW); + path_state_modify_bounce(state, true); + shader_eval_surface(kg, &sd, state, 0.0f, PATH_RAY_SHADOW, SHADER_CONTEXT_SHADOW); + path_state_modify_bounce(state, false); + throughput *= shader_bsdf_transparency(kg, &sd); } @@ -253,11 +256,14 @@ ccl_device_inline bool shadow_blocked(KernelGlobals *kg, ccl_addr_space PathStat ShaderData sd_object; ShaderData *sd = &sd_object; #endif - shader_setup_from_ray(kg, sd, isect, ray, state->bounce+1, bounce); + shader_setup_from_ray(kg, sd, isect, ray); /* attenuation from transparent surface */ if(!(ccl_fetch(sd, flag) & SD_HAS_ONLY_VOLUME)) { - shader_eval_surface(kg, sd, 0.0f, PATH_RAY_SHADOW, SHADER_CONTEXT_SHADOW); + path_state_modify_bounce(state, true); + shader_eval_surface(kg, sd, state, 0.0f, PATH_RAY_SHADOW, SHADER_CONTEXT_SHADOW); + path_state_modify_bounce(state, false); + throughput *= shader_bsdf_transparency(kg, sd); } |