[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