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-05-13 14:40:42 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-05-13 14:40:42 +0400
commitfa4ef0828e0211fdfdd06b125ed244cba06c1293 (patch)
tree36b2acbb1c0cf45e97dc3756105b7bec68f7d17e /source/blender/compositor
parent4e5541a9a64008526adbbcd676d01cee9751e284 (diff)
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.
Diffstat (limited to 'source/blender/compositor')
-rw-r--r--source/blender/compositor/nodes/COM_ZCombineNode.cpp15
-rw-r--r--source/blender/compositor/operations/COM_ZCombineOperation.cpp21
2 files changed, 18 insertions, 18 deletions
diff --git a/source/blender/compositor/nodes/COM_ZCombineNode.cpp b/source/blender/compositor/nodes/COM_ZCombineNode.cpp
index 82effaf0eda..95f06e350b1 100644
--- a/source/blender/compositor/nodes/COM_ZCombineNode.cpp
+++ b/source/blender/compositor/nodes/COM_ZCombineNode.cpp
@@ -71,9 +71,18 @@ void ZCombineNode::convertToOperations(ExecutionSystem *system, CompositorContex
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();
diff --git a/source/blender/compositor/operations/COM_ZCombineOperation.cpp b/source/blender/compositor/operations/COM_ZCombineOperation.cpp
index 4368ba4f9a0..10090294a54 100644
--- a/source/blender/compositor/operations/COM_ZCombineOperation.cpp
+++ b/source/blender/compositor/operations/COM_ZCombineOperation.cpp
@@ -123,13 +123,7 @@ void ZCombineMaskOperation::executePixel(float output[4], float x, float y, Pixe
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 @@ void ZCombineMaskAlphaOperation::executePixel(float output[4], float x, float y,
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]);
}