diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-09-28 17:41:34 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-09-28 17:41:34 +0400 |
commit | 71195b247e34432196242b764301043cbef3a162 (patch) | |
tree | 07b45b6bf1c6d2d817b666a352e1d391dc46cdc5 /intern/cycles/kernel/kernel_passes.h | |
parent | 1d2e59ba1c7cc3f823ad6e3916ebee28b4a069b1 (diff) |
Fix #32072: cycles shadow pass gave different results with/without emitting
materials present, even though it's only taking lamp shadows into account.
Diffstat (limited to 'intern/cycles/kernel/kernel_passes.h')
-rw-r--r-- | intern/cycles/kernel/kernel_passes.h | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/intern/cycles/kernel/kernel_passes.h b/intern/cycles/kernel/kernel_passes.h index f3ddda4a392..42733d691e0 100644 --- a/intern/cycles/kernel/kernel_passes.h +++ b/intern/cycles/kernel/kernel_passes.h @@ -125,8 +125,18 @@ __device_inline void kernel_write_light_passes(KernelGlobals *kg, __global float kernel_write_pass_float3(buffer + kernel_data.film.pass_glossy_color, sample, L->color_glossy); if(flag & PASS_TRANSMISSION_COLOR) kernel_write_pass_float3(buffer + kernel_data.film.pass_transmission_color, sample, L->color_transmission); - if(flag & PASS_SHADOW) - kernel_write_pass_float4(buffer + kernel_data.film.pass_shadow, sample, L->shadow); + if(flag & PASS_SHADOW) { + float4 shadow = L->shadow; + + /* bit of an ugly hack to compensate for emitting triangles influencing + * amount of samples we get for this pass */ + if(kernel_data.integrator.progressive && kernel_data.integrator.pdf_triangles != 0.0f) + shadow.w = 0.5f; + else + shadow.w = 1.0f; + + kernel_write_pass_float4(buffer + kernel_data.film.pass_shadow, sample, shadow); + } #endif } |