[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56755] trunk/blender/source/blender/ compositor: Fix #35327: compositing Z combine node was not giving the same result as previous

Brecht Van Lommel brechtvanlommel at pandora.be
Mon May 13 12:40:42 CEST 2013


Revision: 56755
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56755
Author:   blendix
Date:     2013-05-13 10:40:42 +0000 (Mon, 13 May 2013)
Log Message:
-----------
Fix #35327: compositing Z combine node was not giving the same result as previous
versions when the Z values were the same, Also was inconsistent between full sample
on/off.

Modified Paths:
--------------
    trunk/blender/source/blender/compositor/nodes/COM_ZCombineNode.cpp
    trunk/blender/source/blender/compositor/operations/COM_ZCombineOperation.cpp

Modified: trunk/blender/source/blender/compositor/nodes/COM_ZCombineNode.cpp
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_ZCombineNode.cpp	2013-05-13 09:51:36 UTC (rev 56754)
+++ trunk/blender/source/blender/compositor/nodes/COM_ZCombineNode.cpp	2013-05-13 10:40:42 UTC (rev 56755)
@@ -71,10 +71,19 @@
 	else {
 		// not full anti alias, use masking for Z combine. be aware it uses anti aliasing.
 		// step 1 create mask
-		MathGreaterThanOperation *maskoperation = new MathGreaterThanOperation();
-		this->getInputSocket(1)->relinkConnections(maskoperation->getInputSocket(0), 1, system);
-		this->getInputSocket(3)->relinkConnections(maskoperation->getInputSocket(1), 3, system);
+		NodeOperation *maskoperation;
 
+		if (this->getbNode()->custom1) {
+			maskoperation = new MathGreaterThanOperation();
+			this->getInputSocket(1)->relinkConnections(maskoperation->getInputSocket(0), 3, system);
+			this->getInputSocket(3)->relinkConnections(maskoperation->getInputSocket(1), 1, system);
+		}
+		else {
+			maskoperation = new MathLessThanOperation();
+			this->getInputSocket(1)->relinkConnections(maskoperation->getInputSocket(0), 1, system);
+			this->getInputSocket(3)->relinkConnections(maskoperation->getInputSocket(1), 3, system);
+		}
+
 		// step 2 anti alias mask bit of an expensive operation, but does the trick
 		AntiAliasOperation *antialiasoperation = new AntiAliasOperation();
 		addLink(system, maskoperation->getOutputSocket(), antialiasoperation->getInputSocket(0));

Modified: trunk/blender/source/blender/compositor/operations/COM_ZCombineOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_ZCombineOperation.cpp	2013-05-13 09:51:36 UTC (rev 56754)
+++ trunk/blender/source/blender/compositor/operations/COM_ZCombineOperation.cpp	2013-05-13 10:40:42 UTC (rev 56755)
@@ -123,13 +123,7 @@
 	this->m_image1Reader->read(color1, x, y, sampler);
 	this->m_image2Reader->read(color2, x, y, sampler);
 
-	float fac = mask[0];
-	// multiply mask with alpha, if mask == 0 color1, else color2 make sure
-	float mfac = 1.0f - fac;
-	output[0] = color1[0] * mfac + color2[0] * fac;
-	output[1] = color1[1] * mfac + color2[1] * fac;
-	output[2] = color1[2] * mfac + color2[2] * fac;
-	output[3] = max(color1[3], color2[3]);
+	interp_v4_v4v4(output, color1, color2, 1.0f - mask[0]);
 }
 
 void ZCombineMaskAlphaOperation::executePixel(float output[4], float x, float y, PixelSampler sampler)
@@ -142,15 +136,12 @@
 	this->m_image1Reader->read(color1, x, y, sampler);
 	this->m_image2Reader->read(color2, x, y, sampler);
 
-	float fac = mask[0];
-	// multiply mask with alpha, if mask == 0 color1, else color2 make sure
+	float fac = (1.0f - mask[0])*(1.0f - color1[3]) + mask[0]*color2[3];
 	float mfac = 1.0f - fac;
-	float alpha = color1[3] * mfac + color2[3] * fac;
-	float facalpha = fac * alpha;
-	mfac = 1.0f - facalpha;
-	output[0] = color1[0] * mfac + color2[0] * facalpha;
-	output[1] = color1[1] * mfac + color2[1] * facalpha;
-	output[2] = color1[2] * mfac + color2[2] * facalpha;
+
+	output[0] = color1[0] * mfac + color2[0] * fac;
+	output[1] = color1[1] * mfac + color2[1] * fac;
+	output[2] = color1[2] * mfac + color2[2] * fac;
 	output[3] = max(color1[3], color2[3]);
 }
 




More information about the Bf-blender-cvs mailing list