[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50946] trunk/blender/intern/cycles: Fix #32072: cycles shadow pass gave different results with/ without emitting
Brecht Van Lommel
brechtvanlommel at pandora.be
Fri Sep 28 15:41:35 CEST 2012
Revision: 50946
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50946
Author: blendix
Date: 2012-09-28 13:41:34 +0000 (Fri, 28 Sep 2012)
Log Message:
-----------
Fix #32072: cycles shadow pass gave different results with/without emitting
materials present, even though it's only taking lamp shadows into account.
Modified Paths:
--------------
trunk/blender/intern/cycles/kernel/kernel_passes.h
trunk/blender/intern/cycles/render/buffers.cpp
Modified: trunk/blender/intern/cycles/kernel/kernel_passes.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_passes.h 2012-09-28 12:37:20 UTC (rev 50945)
+++ trunk/blender/intern/cycles/kernel/kernel_passes.h 2012-09-28 13:41:34 UTC (rev 50946)
@@ -125,8 +125,18 @@
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
}
Modified: trunk/blender/intern/cycles/render/buffers.cpp
===================================================================
--- trunk/blender/intern/cycles/render/buffers.cpp 2012-09-28 12:37:20 UTC (rev 50945)
+++ trunk/blender/intern/cycles/render/buffers.cpp 2012-09-28 13:41:34 UTC (rev 50946)
@@ -196,7 +196,18 @@
else if(components == 3) {
assert(pass.components == 4);
- if(pass.divide_type != PASS_NONE) {
+ /* RGBA */
+ if(type == PASS_SHADOW) {
+ for(int i = 0; i < size; i++, in += pass_stride, pixels += 3) {
+ float4 f = make_float4(in[0], in[1], in[2], in[3]);
+ float invw = (f.w > 0.0f)? 1.0f/f.w: 1.0f;
+
+ pixels[0] = f.x*invw;
+ pixels[1] = f.y*invw;
+ pixels[2] = f.z*invw;
+ }
+ }
+ else if(pass.divide_type != PASS_NONE) {
/* RGB lighting passes that need to divide out color */
pass_offset = 0;
foreach(Pass& color_pass, params.passes) {
More information about the Bf-blender-cvs
mailing list