[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48074] trunk/blender/source/blender/ compositor: * fixed defocus background blurin...

Jeroen Bakker j.bakker at atmind.nl
Tue Jun 19 11:52:53 CEST 2012


Revision: 48074
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48074
Author:   jbakker
Date:     2012-06-19 09:52:52 +0000 (Tue, 19 Jun 2012)
Log Message:
-----------
 * fixed defocus background blurin...
 

Modified Paths:
--------------
    trunk/blender/source/blender/compositor/nodes/COM_BokehBlurNode.cpp
    trunk/blender/source/blender/compositor/nodes/COM_DefocusNode.cpp
    trunk/blender/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.h

Modified: trunk/blender/source/blender/compositor/nodes/COM_BokehBlurNode.cpp
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_BokehBlurNode.cpp	2012-06-19 09:52:16 UTC (rev 48073)
+++ trunk/blender/source/blender/compositor/nodes/COM_BokehBlurNode.cpp	2012-06-19 09:52:52 UTC (rev 48074)
@@ -37,24 +37,24 @@
 
 void BokehBlurNode::convertToOperations(ExecutionSystem *graph, CompositorContext *context)
 {
-	Object *camob = context->getScene()->camera;
+//	Object *camob = context->getScene()->camera;
 
-	if (this->getInputSocket(2)->isConnected()) {
-		VariableSizeBokehBlurOperation *operation = new VariableSizeBokehBlurOperation();
-		ConvertDepthToRadiusOperation *converter = new ConvertDepthToRadiusOperation();
-		converter->setfStop(this->getbNode()->custom3);
-		converter->setCameraObject(camob);
-		operation->setMaxBlur((int)this->getbNode()->custom4);
-		operation->setQuality(context->getQuality());
-		this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), 0, graph);
-		this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), 1, graph);
-		this->getInputSocket(2)->relinkConnections(converter->getInputSocket(0), 2, graph);
-		addLink(graph, converter->getOutputSocket(), operation->getInputSocket(2));
-		graph->addOperation(operation);
-		graph->addOperation(converter);
-		this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
-	}
-	else {
+//	if (this->getInputSocket(2)->isConnected()) {
+//		VariableSizeBokehBlurOperation *operation = new VariableSizeBokehBlurOperation();
+//		ConvertDepthToRadiusOperation *converter = new ConvertDepthToRadiusOperation();
+//		converter->setfStop(this->getbNode()->custom3);
+//		converter->setCameraObject(camob);
+//		operation->setMaxBlur((int)this->getbNode()->custom4);
+//		operation->setQuality(context->getQuality());
+//		this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), 0, graph);
+//		this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), 1, graph);
+//		this->getInputSocket(2)->relinkConnections(converter->getInputSocket(0), 2, graph);
+//		addLink(graph, converter->getOutputSocket(), operation->getInputSocket(2));
+//		graph->addOperation(operation);
+//		graph->addOperation(converter);
+//		this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+//	}
+//	else {
 		BokehBlurOperation *operation = new BokehBlurOperation();
 		this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), 0, graph);
 		this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), 1, graph);
@@ -63,5 +63,5 @@
 		operation->setQuality(context->getQuality());
 		graph->addOperation(operation);
 		this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
-	}
+//	}
 }

Modified: trunk/blender/source/blender/compositor/nodes/COM_DefocusNode.cpp
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_DefocusNode.cpp	2012-06-19 09:52:16 UTC (rev 48073)
+++ trunk/blender/source/blender/compositor/nodes/COM_DefocusNode.cpp	2012-06-19 09:52:52 UTC (rev 48074)
@@ -96,6 +96,7 @@
 	operation->setThreshold(data->bthresh);
 	addLink(graph, bokeh->getOutputSocket(), operation->getInputSocket(1));
 	addLink(graph, radiusOperation->getOutputSocket(), operation->getInputSocket(2));
+	addLink(graph, radiusOperation->getInputSocket(0)->getConnection()->getFromSocket(), operation->getInputSocket(3));
 	if (data->gamco) {
 		GammaCorrectOperation *correct = new GammaCorrectOperation();
 		GammaUncorrectOperation *inverse = new GammaUncorrectOperation();

Modified: trunk/blender/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cpp	2012-06-19 09:52:16 UTC (rev 48073)
+++ trunk/blender/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cpp	2012-06-19 09:52:52 UTC (rev 48074)
@@ -31,13 +31,15 @@
 {
 	this->addInputSocket(COM_DT_COLOR);
 	this->addInputSocket(COM_DT_COLOR, COM_SC_NO_RESIZE); // do not resize the bokeh image.
-	this->addInputSocket(COM_DT_VALUE);
+	this->addInputSocket(COM_DT_VALUE); // radius
+	this->addInputSocket(COM_DT_VALUE); // depth
 	this->addOutputSocket(COM_DT_COLOR);
 	this->setComplex(true);
 
 	this->inputProgram = NULL;
 	this->inputBokehProgram = NULL;
 	this->inputSizeProgram = NULL;
+	this->inputDepthProgram = NULL;
 	this->maxBlur = 32.0f;
 	this->threshold = 1.0f;
 }
@@ -48,6 +50,7 @@
 	this->inputProgram = getInputSocketReader(0);
 	this->inputBokehProgram = getInputSocketReader(1);
 	this->inputSizeProgram = getInputSocketReader(2);
+	this->inputDepthProgram = getInputSocketReader(3);
 	QualityStepHelper::initExecution(COM_QH_INCREASE);
 }
 
@@ -56,7 +59,7 @@
 	float readColor[4];
 	float bokeh[4];
 	float tempSize[4];
-	float tempSizeCenter[4];
+	float tempDepth[4];
 	float multiplier_accum[4] = {0.0f, 0.0f, 0.0f, 0.0f};
 	float color_accum[4]      = {0.0f, 0.0f, 0.0f, 0.0f};
 
@@ -65,30 +68,35 @@
 	int minx = x - maxBlur;
 	int maxx = x + maxBlur;
 	{
-		inputSizeProgram->read(tempSizeCenter, x, y, COM_PS_NEAREST, inputBuffers);
+		inputSizeProgram->read(tempSize, x, y, COM_PS_NEAREST, inputBuffers);
+		inputDepthProgram->read(tempDepth, x, y, COM_PS_NEAREST, inputBuffers);
 		inputProgram->read(readColor, x, y, COM_PS_NEAREST, inputBuffers);
 		add_v4_v4(color_accum, readColor);
 		add_v4_fl(multiplier_accum, 1.0f);
-		float sizeCenter = tempSizeCenter[0];
+		float sizeCenter = tempSize[0];
+		float centerDepth = tempDepth[0]+threshold;
 		
 		for (int ny = miny; ny < maxy; ny += QualityStepHelper::getStep()) {
 			for (int nx = minx; nx < maxx; nx += QualityStepHelper::getStep()) {
 				if (nx >= 0 && nx < this->getWidth() && ny >= 0 && ny < getHeight()) {
+					inputDepthProgram->read(tempDepth, nx, ny, COM_PS_NEAREST, inputBuffers);
 					inputSizeProgram->read(tempSize, nx, ny, COM_PS_NEAREST, inputBuffers);
 					float size = tempSize[0];
-					if ((sizeCenter > threshold && size > threshold) || size <= threshold) {
-						float dx = nx - x;
-						float dy = ny - y;
-						if (nx == x && ny == y) {
+					if (tempDepth[0] < centerDepth) {
+						if ((sizeCenter > threshold && size > threshold) || size <= threshold) {
+							float dx = nx - x;
+							float dy = ny - y;
+							if (nx == x && ny == y) {
+							}
+							else if (size >= fabsf(dx) && size >= fabsf(dy)) {
+								float u = 256 + dx * 256 / size;
+								float v = 256 + dy * 256 / size;
+								inputBokehProgram->read(bokeh, u, v, COM_PS_NEAREST, inputBuffers);
+								inputProgram->read(readColor, nx, ny, COM_PS_NEAREST, inputBuffers);
+								madd_v4_v4v4(color_accum, bokeh, readColor);
+								add_v4_v4(multiplier_accum, bokeh);
+							}
 						}
-						else if (size >= fabsf(dx) && size >= fabsf(dy)) {
-							float u = 256 + dx * 256 / size;
-							float v = 256 + dy * 256 / size;
-							inputBokehProgram->read(bokeh, u, v, COM_PS_NEAREST, inputBuffers);
-							inputProgram->read(readColor, nx, ny, COM_PS_NEAREST, inputBuffers);
-							madd_v4_v4v4(color_accum, bokeh, readColor);
-							add_v4_v4(multiplier_accum, bokeh);
-						}
 					}
 				}
 			}
@@ -131,6 +139,10 @@
 	if (operation->determineDependingAreaOfInterest(&bokehInput, readOperation, output) ) {
 		return true;
 	}
+	operation = getInputOperation(3);
+	if (operation->determineDependingAreaOfInterest(&newInput, readOperation, output) ) {
+		return true;
+	}
 	operation = getInputOperation(0);
 	if (operation->determineDependingAreaOfInterest(&newInput, readOperation, output) ) {
 		return true;

Modified: trunk/blender/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.h
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.h	2012-06-19 09:52:16 UTC (rev 48073)
+++ trunk/blender/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.h	2012-06-19 09:52:52 UTC (rev 48074)
@@ -32,6 +32,7 @@
 	SocketReader *inputProgram;
 	SocketReader *inputBokehProgram;
 	SocketReader *inputSizeProgram;
+	SocketReader *inputDepthProgram;
 
 public:
 	VariableSizeBokehBlurOperation();




More information about the Bf-blender-cvs mailing list