[Bf-blender-cvs] [2339a84] master: Compositor: Expose track velocity via the Track Position node

Sergey Sharybin noreply at git.blender.org
Tue Dec 15 09:58:24 CET 2015


Commit: 2339a84443c07011acded1968a73b311b277101a
Author: Sergey Sharybin
Date:   Tue Dec 15 13:51:09 2015 +0500
Branches: master
https://developer.blender.org/rB2339a84443c07011acded1968a73b311b277101a

Compositor: Expose track velocity via the Track Position node

velocity is measured in pixels per frame. It is basically a coordinate
difference of track coordinate at current frame and previous one (no future
prediction happens).

It's not really most intuitive place for such a things, but historically the
node was called this way..

Track velocity could be used to face effects like motion blur bu piping it
to the vector blur node.

Reviewers: campbellbarton

Reviewed By: campbellbarton

Subscribers: hype, sebastian_k

Differential Revision: https://developer.blender.org/D1591

===================================================================

M	source/blender/compositor/nodes/COM_TrackPositionNode.cpp
M	source/blender/compositor/operations/COM_TrackPositionOperation.cpp
M	source/blender/compositor/operations/COM_TrackPositionOperation.h
M	source/blender/nodes/composite/nodes/node_composite_trackpos.c

===================================================================

diff --git a/source/blender/compositor/nodes/COM_TrackPositionNode.cpp b/source/blender/compositor/nodes/COM_TrackPositionNode.cpp
index 75c8c78..7f23798 100644
--- a/source/blender/compositor/nodes/COM_TrackPositionNode.cpp
+++ b/source/blender/compositor/nodes/COM_TrackPositionNode.cpp
@@ -44,6 +44,8 @@ void TrackPositionNode::convertToOperations(NodeConverter &converter, const Comp
 	
 	NodeOutput *outputX = this->getOutputSocket(0);
 	NodeOutput *outputY = this->getOutputSocket(1);
+	NodeOutput *outputSpeedX = this->getOutputSocket(2);
+	NodeOutput *outputSpeedY = this->getOutputSocket(3);
 
 	int frame_number;
 	if (editorNode->custom1 == CMP_TRACKPOS_ABSOLUTE_FRAME) {
@@ -62,7 +64,7 @@ void TrackPositionNode::convertToOperations(NodeConverter &converter, const Comp
 	operationX->setPosition(editorNode->custom1);
 	operationX->setRelativeFrame(editorNode->custom2);
 	converter.addOperation(operationX);
-	
+
 	TrackPositionOperation *operationY = new TrackPositionOperation();
 	operationY->setMovieClip(clip);
 	operationY->setTrackingObject(trackpos_data->tracking_object);
@@ -72,7 +74,31 @@ void TrackPositionNode::convertToOperations(NodeConverter &converter, const Comp
 	operationY->setPosition(editorNode->custom1);
 	operationY->setRelativeFrame(editorNode->custom2);
 	converter.addOperation(operationY);
-	
+
+	TrackPositionOperation *operationSpeedX = new TrackPositionOperation();
+	operationSpeedX->setMovieClip(clip);
+	operationSpeedX->setTrackingObject(trackpos_data->tracking_object);
+	operationSpeedX->setTrackName(trackpos_data->track_name);
+	operationSpeedX->setFramenumber(frame_number);
+	operationSpeedX->setAxis(0);
+	operationSpeedX->setPosition(editorNode->custom1);
+	operationSpeedX->setRelativeFrame(editorNode->custom2);
+	operationSpeedX->setSpeedOutput(true);
+	converter.addOperation(operationSpeedX);
+
+	TrackPositionOperation *operationSpeedY = new TrackPositionOperation();
+	operationSpeedY->setMovieClip(clip);
+	operationSpeedY->setTrackingObject(trackpos_data->tracking_object);
+	operationSpeedY->setTrackName(trackpos_data->track_name);
+	operationSpeedY->setFramenumber(frame_number);
+	operationSpeedY->setAxis(1);
+	operationSpeedY->setPosition(editorNode->custom1);
+	operationSpeedY->setRelativeFrame(editorNode->custom2);
+	operationSpeedY->setSpeedOutput(true);
+	converter.addOperation(operationSpeedY);
+
 	converter.mapOutputSocket(outputX, operationX->getOutputSocket());
 	converter.mapOutputSocket(outputY, operationY->getOutputSocket());
+	converter.mapOutputSocket(outputSpeedX, operationSpeedX->getOutputSocket());
+	converter.mapOutputSocket(outputSpeedY, operationSpeedY->getOutputSocket());
 }
diff --git a/source/blender/compositor/operations/COM_TrackPositionOperation.cpp b/source/blender/compositor/operations/COM_TrackPositionOperation.cpp
index ca169d0..52ceb50 100644
--- a/source/blender/compositor/operations/COM_TrackPositionOperation.cpp
+++ b/source/blender/compositor/operations/COM_TrackPositionOperation.cpp
@@ -45,6 +45,7 @@ TrackPositionOperation::TrackPositionOperation() : NodeOperation()
 	this->m_axis = 0;
 	this->m_position = CMP_TRACKPOS_ABSOLUTE;
 	this->m_relativeFrame = 0;
+	this->m_speed_output = false;
 }
 
 void TrackPositionOperation::initExecution()
@@ -78,7 +79,16 @@ void TrackPositionOperation::initExecution()
 
 			copy_v2_v2(this->m_markerPos, marker->pos);
 
-			if (this->m_position == CMP_TRACKPOS_RELATIVE_START) {
+			if (this->m_speed_output) {
+				marker = BKE_tracking_marker_get(track, clip_framenr - 1);
+				if ((marker->flag & MARKER_DISABLED) == 0) {
+					copy_v2_v2(this->m_relativePos, marker->pos);
+				}
+				else {
+					copy_v2_v2(this->m_relativePos, this->m_markerPos);
+				}
+			}
+			else if (this->m_position == CMP_TRACKPOS_RELATIVE_START) {
 				int i;
 
 				for (i = 0; i < track->markersnr; i++) {
diff --git a/source/blender/compositor/operations/COM_TrackPositionOperation.h b/source/blender/compositor/operations/COM_TrackPositionOperation.h
index 10dbaf9..a5a58ad 100644
--- a/source/blender/compositor/operations/COM_TrackPositionOperation.h
+++ b/source/blender/compositor/operations/COM_TrackPositionOperation.h
@@ -47,6 +47,7 @@ protected:
 	int m_axis;
 	int m_position;
 	int m_relativeFrame;
+	bool m_speed_output;
 
 	int m_width, m_height;
 	float m_markerPos[2];
@@ -67,6 +68,7 @@ public:
 	void setAxis(int value) {this->m_axis = value;}
 	void setPosition(int value) {this->m_position = value;}
 	void setRelativeFrame(int value) {this->m_relativeFrame = value;}
+	void setSpeedOutput(bool speed_output) {this->m_speed_output = speed_output;};
 
 	void initExecution();
 
diff --git a/source/blender/nodes/composite/nodes/node_composite_trackpos.c b/source/blender/nodes/composite/nodes/node_composite_trackpos.c
index 0daf89b..de4fe47 100644
--- a/source/blender/nodes/composite/nodes/node_composite_trackpos.c
+++ b/source/blender/nodes/composite/nodes/node_composite_trackpos.c
@@ -36,6 +36,8 @@
 static bNodeSocketTemplate cmp_node_trackpos_out[] = {
 	{	SOCK_FLOAT,		0,	N_("X")},
 	{	SOCK_FLOAT,		0,	N_("Y")},
+	{	SOCK_FLOAT,		0,	N_("Speed X")},
+	{	SOCK_FLOAT,		0,	N_("Speed Y")},
 	{	-1, 0, ""	}
 };




More information about the Bf-blender-cvs mailing list