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, ""       }
 };

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

Reply via email to