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:
-rw-r--r--source/blender/compositor/nodes/COM_KeyingNode.cpp2
-rw-r--r--source/blender/compositor/operations/COM_KeyingOperation.cpp8
-rw-r--r--source/blender/compositor/operations/COM_KeyingOperation.h1
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_keying.c1
4 files changed, 12 insertions, 0 deletions
diff --git a/source/blender/compositor/nodes/COM_KeyingNode.cpp b/source/blender/compositor/nodes/COM_KeyingNode.cpp
index b1bde9643df..75a2fe96646 100644
--- a/source/blender/compositor/nodes/COM_KeyingNode.cpp
+++ b/source/blender/compositor/nodes/COM_KeyingNode.cpp
@@ -157,6 +157,7 @@ void KeyingNode::convertToOperations(ExecutionSystem *graph, CompositorContext *
InputSocket *inputImage = this->getInputSocket(0);
InputSocket *inputScreen = this->getInputSocket(1);
InputSocket *inputGarbageMatte = this->getInputSocket(2);
+ InputSocket *inputCoreMatte = this->getInputSocket(3);
OutputSocket *outputImage = this->getOutputSocket(0);
OutputSocket *outputMatte = this->getOutputSocket(1);
OutputSocket *outputEdges = this->getOutputSocket(2);
@@ -172,6 +173,7 @@ void KeyingNode::convertToOperations(ExecutionSystem *graph, CompositorContext *
inputScreen->relinkConnections(keyingOperation->getInputSocket(1), 1, graph);
inputGarbageMatte->relinkConnections(keyingOperation->getInputSocket(2), 2, graph);
+ inputCoreMatte->relinkConnections(keyingOperation->getInputSocket(3), 3, graph);
if (keying_data->blur_pre) {
/* chroma preblur operation for input of keying operation */
diff --git a/source/blender/compositor/operations/COM_KeyingOperation.cpp b/source/blender/compositor/operations/COM_KeyingOperation.cpp
index 599989d52dc..e04c79f6713 100644
--- a/source/blender/compositor/operations/COM_KeyingOperation.cpp
+++ b/source/blender/compositor/operations/COM_KeyingOperation.cpp
@@ -57,6 +57,7 @@ KeyingOperation::KeyingOperation(): NodeOperation()
this->addInputSocket(COM_DT_COLOR);
this->addInputSocket(COM_DT_COLOR);
this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_VALUE);
this->addOutputSocket(COM_DT_VALUE);
this->screenBalance = 0.5f;
@@ -64,6 +65,7 @@ KeyingOperation::KeyingOperation(): NodeOperation()
this->pixelReader = NULL;
this->screenReader = NULL;
this->garbageReader = NULL;
+ this->coreReader = NULL;
}
void KeyingOperation::initExecution()
@@ -71,6 +73,7 @@ void KeyingOperation::initExecution()
this->pixelReader = this->getInputSocketReader(0);
this->screenReader = this->getInputSocketReader(1);
this->garbageReader = this->getInputSocketReader(2);
+ this->coreReader = this->getInputSocketReader(3);
}
void KeyingOperation::deinitExecution()
@@ -78,6 +81,7 @@ void KeyingOperation::deinitExecution()
this->pixelReader = NULL;
this->screenReader = NULL;
this->garbageReader = NULL;
+ this->coreReader = NULL;
}
void KeyingOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
@@ -85,10 +89,12 @@ void KeyingOperation::executePixel(float *color, float x, float y, PixelSampler
float pixelColor[4];
float screenColor[4];
float garbageValue[4];
+ float coreValue[4];
this->pixelReader->read(pixelColor, x, y, sampler, inputBuffers);
this->screenReader->read(screenColor, x, y, sampler, inputBuffers);
this->garbageReader->read(garbageValue, x, y, sampler, inputBuffers);
+ this->coreReader->read(coreValue, x, y, sampler, inputBuffers);
int primary_channel = get_pixel_primary_channel(screenColor);
@@ -108,6 +114,8 @@ void KeyingOperation::executePixel(float *color, float x, float y, PixelSampler
}
color[0] *= (1.0f - garbageValue[0]);
+
+ color[0] = MAX2(color[0], coreValue[0]);
}
bool KeyingOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
diff --git a/source/blender/compositor/operations/COM_KeyingOperation.h b/source/blender/compositor/operations/COM_KeyingOperation.h
index 657a1ff807c..8d0e7851ee5 100644
--- a/source/blender/compositor/operations/COM_KeyingOperation.h
+++ b/source/blender/compositor/operations/COM_KeyingOperation.h
@@ -39,6 +39,7 @@ protected:
SocketReader *pixelReader;
SocketReader *screenReader;
SocketReader *garbageReader;
+ SocketReader *coreReader;
float screenBalance;
diff --git a/source/blender/nodes/composite/nodes/node_composite_keying.c b/source/blender/nodes/composite/nodes/node_composite_keying.c
index 31a8a0d67a6..f37c3686e2b 100644
--- a/source/blender/nodes/composite/nodes/node_composite_keying.c
+++ b/source/blender/nodes/composite/nodes/node_composite_keying.c
@@ -49,6 +49,7 @@ static bNodeSocketTemplate cmp_node_keying_in[] = {
{ SOCK_RGBA, 1, "Image", 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
{ SOCK_RGBA, 1, "Key Color", 1.0f, 1.0f, 1.0f, 1.0f},
{ SOCK_FLOAT, 1, "Garbage Matte", 0.0f, 1.0f, 1.0f, 1.0f},
+ { SOCK_FLOAT, 1, "Core Matte", 0.0f, 1.0f, 1.0f, 1.0f},
{ -1, 0, "" }
};