Revision: 47948
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47948
Author:   nazgul
Date:     2012-06-15 11:53:51 +0000 (Fri, 15 Jun 2012)
Log Message:
-----------
Core matte input for keying node

This matte could be used to force alpha be at high values in areas where
algorithm detects it as edge or background color.

Modified Paths:
--------------
    trunk/blender/source/blender/compositor/nodes/COM_KeyingNode.cpp
    trunk/blender/source/blender/compositor/operations/COM_KeyingOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_KeyingOperation.h
    trunk/blender/source/blender/nodes/composite/nodes/node_composite_keying.c

Modified: trunk/blender/source/blender/compositor/nodes/COM_KeyingNode.cpp
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_KeyingNode.cpp    
2012-06-15 11:44:23 UTC (rev 47947)
+++ trunk/blender/source/blender/compositor/nodes/COM_KeyingNode.cpp    
2012-06-15 11:53:51 UTC (rev 47948)
@@ -157,6 +157,7 @@
        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 @@
 
        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  */

Modified: 
trunk/blender/source/blender/compositor/operations/COM_KeyingOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_KeyingOperation.cpp  
2012-06-15 11:44:23 UTC (rev 47947)
+++ trunk/blender/source/blender/compositor/operations/COM_KeyingOperation.cpp  
2012-06-15 11:53:51 UTC (rev 47948)
@@ -57,6 +57,7 @@
        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 @@
        this->pixelReader = NULL;
        this->screenReader = NULL;
        this->garbageReader = NULL;
+       this->coreReader = NULL;
 }
 
 void KeyingOperation::initExecution()
@@ -71,6 +73,7 @@
        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 @@
        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 @@
        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 @@
        }
 
        color[0] *= (1.0f - garbageValue[0]);
+
+       color[0] = MAX2(color[0], coreValue[0]);
 }
 
 bool KeyingOperation::determineDependingAreaOfInterest(rcti *input, 
ReadBufferOperation *readOperation, rcti *output)

Modified: 
trunk/blender/source/blender/compositor/operations/COM_KeyingOperation.h
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_KeyingOperation.h    
2012-06-15 11:44:23 UTC (rev 47947)
+++ trunk/blender/source/blender/compositor/operations/COM_KeyingOperation.h    
2012-06-15 11:53:51 UTC (rev 47948)
@@ -39,6 +39,7 @@
        SocketReader *pixelReader;
        SocketReader *screenReader;
        SocketReader *garbageReader;
+       SocketReader *coreReader;
 
        float screenBalance;
 

Modified: 
trunk/blender/source/blender/nodes/composite/nodes/node_composite_keying.c
===================================================================
--- trunk/blender/source/blender/nodes/composite/nodes/node_composite_keying.c  
2012-06-15 11:44:23 UTC (rev 47947)
+++ trunk/blender/source/blender/nodes/composite/nodes/node_composite_keying.c  
2012-06-15 11:53:51 UTC (rev 47948)
@@ -49,6 +49,7 @@
        {       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, ""       }
 };
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to