Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2013-02-13 20:46:18 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-02-13 20:46:18 +0400
commit909d64079a228dfa9cccf8ed718efc322a038e7e (patch)
treed903b43413599f43395e1d7383340557427fc6ec /intern/cycles/kernel
parent8a20930c71dee32337cd15f3d36fa3574c6c9eea (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.h2
-rw-r--r--intern/cycles/kernel/kernel_passes.h9
-rw-r--r--intern/cycles/kernel/kernel_types.h2
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 {