diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-02-13 20:46:18 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-02-13 20:46:18 +0400 |
commit | 909d64079a228dfa9cccf8ed718efc322a038e7e (patch) | |
tree | d903b43413599f43395e1d7383340557427fc6ec /intern/cycles/kernel | |
parent | 8a20930c71dee32337cd15f3d36fa3574c6c9eea (diff) |
Fix #34226: cycles shadow pass got incorrectly influenced by world multiple
importance sampleing.
Diffstat (limited to 'intern/cycles/kernel')
-rw-r--r-- | intern/cycles/kernel/kernel_emission.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_passes.h | 9 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_types.h | 2 |
3 files changed, 3 insertions, 10 deletions
diff --git a/intern/cycles/kernel/kernel_emission.h b/intern/cycles/kernel/kernel_emission.h index 3b27a1f49c9..9787af535bb 100644 --- a/intern/cycles/kernel/kernel_emission.h +++ b/intern/cycles/kernel/kernel_emission.h @@ -141,7 +141,7 @@ __device_noinline bool direct_emission(KernelGlobals *kg, ShaderData *sd, int li } /* return if it's a lamp for shadow pass */ - *is_lamp = (ls.prim == ~0); + *is_lamp = (ls.prim == ~0 && ls.type != LIGHT_BACKGROUND); return true; } diff --git a/intern/cycles/kernel/kernel_passes.h b/intern/cycles/kernel/kernel_passes.h index 727639386ed..57dbdc2ffc1 100644 --- a/intern/cycles/kernel/kernel_passes.h +++ b/intern/cycles/kernel/kernel_passes.h @@ -125,14 +125,7 @@ __device_inline void kernel_write_light_passes(KernelGlobals *kg, __global float kernel_write_pass_float3(buffer + kernel_data.film.pass_transmission_color, sample, L->color_transmission); 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; - + shadow.w = kernel_data.film.pass_shadow_scale; kernel_write_pass_float4(buffer + kernel_data.film.pass_shadow, sample, shadow); } #endif diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h index 773ea0c43fb..ddbda9240fb 100644 --- a/intern/cycles/kernel/kernel_types.h +++ b/intern/cycles/kernel/kernel_types.h @@ -610,9 +610,9 @@ typedef struct KernelFilm { int pass_ao; int pass_shadow; + float pass_shadow_scale; int pass_pad1; int pass_pad2; - int pass_pad3; } KernelFilm; typedef struct KernelBackground { |