[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59176] trunk/blender: Merge plane track feature from tomato branch

Sergey Sharybin sergey.vfx at gmail.com
Fri Aug 16 11:46:31 CEST 2013


Revision: 59176
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59176
Author:   nazgul
Date:     2013-08-16 09:46:30 +0000 (Fri, 16 Aug 2013)
Log Message:
-----------
Merge plane track feature from tomato branch

This commit includes all the changes made for plane tracker
in tomato branch.

Movie clip editor changes:

- Artist might create a plane track out of multiple point
  tracks which belongs to the same track (minimum amount of
  point tracks is 4, maximum is not actually limited).

  When new plane track is added, it's getting "tracked"
  across all point tracks, which makes it stick to the same
  plane point tracks belong to.

- After plane track was added, it need to be manually adjusted
  in a way it covers feature one might to mask/replace.

  General transform tools (G, R, S) or sliding corners with
  a mouse could be sued for this. Plane corner which
  corresponds to left bottom image corner has got X/Y axis
  on it (red is for X axis, green for Y).

- Re-adjusting plane corners makes plane to be "re-tracked"
  for the frames sequence between current frame and next
  and previous keyframes.

- Kayframes might be removed from the plane, using Shit-X
  (Marker Delete) operator. However, currently manual
  re-adjustment or "re-track" trigger is needed.

Compositor changes:

- Added new node called Plane Track Deform.

- User selects which plane track to use (for this he need
  to select movie clip datablock, object and track names).

- Node gets an image input, which need to be warped into
  the plane.

- Node outputs:
  * Input image warped into the plane.
  * Plane, rasterized to a mask.

Masking changes:

- Mask points might be parented to a plane track, which
  makes this point deforming in a way as if it belongs
  to the tracked plane.

Some video tutorials are available:
- Coder video: http://www.youtube.com/watch?v=vISEwqNHqe4
- Artist video: https://vimeo.com/71727578

This is mine and Keir's holiday code project :)

Modified Paths:
--------------
    trunk/blender/extern/libmv/libmv-capi.cc
    trunk/blender/extern/libmv/libmv-capi.h
    trunk/blender/extern/libmv/libmv-capi_stub.cc
    trunk/blender/release/scripts/startup/bl_ui/properties_mask_common.py
    trunk/blender/release/scripts/startup/bl_ui/space_clip.py
    trunk/blender/release/scripts/startup/nodeitems_builtins.py
    trunk/blender/source/blender/blenkernel/BKE_mask.h
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/BKE_tracking.h
    trunk/blender/source/blender/blenkernel/intern/mask.c
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/blenkernel/intern/tracking.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/compositor/CMakeLists.txt
    trunk/blender/source/blender/compositor/intern/COM_Converter.cpp
    trunk/blender/source/blender/editors/mask/mask_relationships.c
    trunk/blender/source/blender/editors/mask/mask_shapekey.c
    trunk/blender/source/blender/editors/space_clip/clip_draw.c
    trunk/blender/source/blender/editors/space_clip/clip_graph_ops.c
    trunk/blender/source/blender/editors/space_clip/clip_intern.h
    trunk/blender/source/blender/editors/space_clip/clip_utils.c
    trunk/blender/source/blender/editors/space_clip/space_clip.c
    trunk/blender/source/blender/editors/space_clip/tracking_ops.c
    trunk/blender/source/blender/editors/space_clip/tracking_select.c
    trunk/blender/source/blender/editors/space_node/drawnode.c
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/editors/transform/transform_generics.c
    trunk/blender/source/blender/makesdna/DNA_mask_types.h
    trunk/blender/source/blender/makesdna/DNA_node_types.h
    trunk/blender/source/blender/makesdna/DNA_tracking_types.h
    trunk/blender/source/blender/makesrna/intern/rna_mask.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/makesrna/intern/rna_tracking.c
    trunk/blender/source/blender/nodes/CMakeLists.txt
    trunk/blender/source/blender/nodes/NOD_composite.h
    trunk/blender/source/blender/nodes/NOD_static_types.h

Added Paths:
-----------
    trunk/blender/source/blender/compositor/nodes/COM_PlaneTrackDeformNode.cpp
    trunk/blender/source/blender/compositor/nodes/COM_PlaneTrackDeformNode.h
    trunk/blender/source/blender/compositor/operations/COM_PlaneTrackCommonOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_PlaneTrackCommonOperation.h
    trunk/blender/source/blender/compositor/operations/COM_PlaneTrackMaskOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_PlaneTrackMaskOperation.h
    trunk/blender/source/blender/compositor/operations/COM_PlaneTrackWarpImageOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_PlaneTrackWarpImageOperation.h
    trunk/blender/source/blender/nodes/composite/nodes/node_composite_planetrackdeform.c

Modified: trunk/blender/extern/libmv/libmv-capi.cc
===================================================================
--- trunk/blender/extern/libmv/libmv-capi.cc	2013-08-16 08:31:39 UTC (rev 59175)
+++ trunk/blender/extern/libmv/libmv-capi.cc	2013-08-16 09:46:30 UTC (rev 59176)
@@ -58,6 +58,8 @@
 #include "libmv/simple_pipeline/reconstruction_scale.h"
 #include "libmv/simple_pipeline/keyframe_selection.h"
 
+#include "libmv/multiview/homography.h"
+
 #ifdef _MSC_VER
 #  define snprintf _snprintf
 #endif
@@ -1080,4 +1082,28 @@
 	}
 }
 
+void libmv_homography2DFromCorrespondencesLinear(double (*x1)[2], double (*x2)[2], int num_points,
+                                                 double H[3][3], double expected_precision)
+{
+	libmv::Mat x1_mat, x2_mat;
+	libmv::Mat3 H_mat;
+
+	x1_mat.resize(2, num_points);
+	x2_mat.resize(2, num_points);
+
+	for (int i = 0; i < num_points; i++) {
+		x1_mat.col(i) = libmv::Vec2(x1[i][0], x1[i][1]);
+		x2_mat.col(i) = libmv::Vec2(x2[i][0], x2[i][1]);
+	}
+
+	LG << "x1: " << x1_mat;
+	LG << "x2: " << x2_mat;
+
+	libmv::Homography2DFromCorrespondencesLinear(x1_mat, x2_mat, &H_mat, expected_precision);
+
+	LG << "H: " << H_mat;
+
+	memcpy(H, H_mat.data(), 9 * sizeof(double));
+}
+
 #endif

Modified: trunk/blender/extern/libmv/libmv-capi.h
===================================================================
--- trunk/blender/extern/libmv/libmv-capi.h	2013-08-16 08:31:39 UTC (rev 59175)
+++ trunk/blender/extern/libmv/libmv-capi.h	2013-08-16 09:46:30 UTC (rev 59176)
@@ -159,6 +159,9 @@
 void libmv_cameraIntrinsicsInvert(const libmv_CameraIntrinsicsOptions *libmv_camera_intrinsics_options,
                                   double x, double y, double *x1, double *y1);
 
+void libmv_homography2DFromCorrespondencesLinear(double (*x1)[2], double (*x2)[2], int num_points,
+                                                 double H[3][3], double expected_precision);
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/blender/extern/libmv/libmv-capi_stub.cc
===================================================================
--- trunk/blender/extern/libmv/libmv-capi_stub.cc	2013-08-16 08:31:39 UTC (rev 59175)
+++ trunk/blender/extern/libmv/libmv-capi_stub.cc	2013-08-16 09:46:30 UTC (rev 59176)
@@ -277,4 +277,13 @@
 	*y1 = (y - principal_y) / focal_length;
 }
 
+void libmv_homography2DFromCorrespondencesLinear(double (* /* x1 */)[2], double (* /* x2 */)[2], int /* num_points */,
+                                                 double H[3][3], double /* expected_precision */)
+{
+	memset(H, 0, sizeof(H));
+	N[0][0] = 1.0f;
+	N[1][1] = 1.0f;
+	N[02[2] = 1.0f;
+}
+
 #endif  // ifndef WITH_LIBMV

Modified: trunk/blender/release/scripts/startup/bl_ui/properties_mask_common.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/properties_mask_common.py	2013-08-16 08:31:39 UTC (rev 59175)
+++ trunk/blender/release/scripts/startup/bl_ui/properties_mask_common.py	2013-08-16 09:46:30 UTC (rev 59176)
@@ -190,16 +190,21 @@
             clip = parent.id
             tracking = clip.tracking
 
+            row = col.row()
+            row.prop(parent, "type", expand=True)
+
             col.prop_search(parent, "parent", tracking,
                             "objects", icon='OBJECT_DATA', text="Object:")
 
+            tracks_list = "tracks" if parent.type == 'POINT_TRACK' else 'plane_tracks'
+
             if parent.parent in tracking.objects:
                 object = tracking.objects[parent.parent]
                 col.prop_search(parent, "sub_parent", object,
-                                "tracks", icon='ANIM_DATA', text="Track:")
+                                tracks_list, icon='ANIM_DATA', text="Track:")
             else:
                 col.prop_search(parent, "sub_parent", tracking,
-                                "tracks", icon='ANIM_DATA', text="Track:")
+                                tracks_list, icon='ANIM_DATA', text="Track:")
 
 
 class MASK_PT_display():

Modified: trunk/blender/release/scripts/startup/bl_ui/space_clip.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_clip.py	2013-08-16 08:31:39 UTC (rev 59175)
+++ trunk/blender/release/scripts/startup/bl_ui/space_clip.py	2013-08-16 09:46:30 UTC (rev 59176)
@@ -311,6 +311,16 @@
         layout.operator("clip.join_tracks", text="Join")
 
 
+class CLIP_PT_tools_plane_tracking(CLIP_PT_tracking_panel, Panel):
+    bl_space_type = 'CLIP_EDITOR'
+    bl_region_type = 'TOOLS'
+    bl_label = "Plane Track"
+
+    def draw(self, context):
+        layout = self.layout
+        layout.operator("clip.create_plane_track")
+
+
 class CLIP_PT_tools_solve(CLIP_PT_tracking_panel, Panel):
     bl_space_type = 'CLIP_EDITOR'
     bl_region_type = 'TOOLS'
@@ -579,6 +589,26 @@
             layout.label(text=label_text)
 
 
+class CLIP_PT_plane_track(CLIP_PT_tracking_panel, Panel):
+    bl_space_type = 'CLIP_EDITOR'
+    bl_region_type = 'UI'
+    bl_label = "Plane Track"
+
+    def draw(self, context):
+        layout = self.layout
+
+        sc = context.space_data
+        clip = context.space_data.clip
+        active_track = clip.tracking.plane_tracks.active
+
+        if not active_track:
+            layout.active = False
+            layout.label(text="No active plane track")
+            return
+
+        layout.prop(active_track, "name")
+
+
 class CLIP_PT_track_settings(CLIP_PT_tracking_panel, Panel):
     bl_space_type = 'CLIP_EDITOR'
     bl_region_type = 'UI'

Modified: trunk/blender/release/scripts/startup/nodeitems_builtins.py
===================================================================
--- trunk/blender/release/scripts/startup/nodeitems_builtins.py	2013-08-16 08:31:39 UTC (rev 59175)
+++ trunk/blender/release/scripts/startup/nodeitems_builtins.py	2013-08-16 09:46:30 UTC (rev 59176)
@@ -342,6 +342,7 @@
         NodeItem("CompositorNodeMapUV"),
         NodeItem("CompositorNodeTransform"),
         NodeItem("CompositorNodeStabilize"),
+        NodeItem("CompositorNodePlaneTrackDeform"),
         ]),
     CompositorNodeCategory("CMP_GROUP", "Group", items=node_group_items),
     CompositorNodeCategory("CMP_LAYOUT", "Layout", items=[

Modified: trunk/blender/source/blender/blenkernel/BKE_mask.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mask.h	2013-08-16 08:31:39 UTC (rev 59175)
+++ trunk/blender/source/blender/blenkernel/BKE_mask.h	2013-08-16 09:46:30 UTC (rev 59176)
@@ -53,9 +53,11 @@
 void BKE_mask_layer_remove(struct Mask *mask, struct MaskLayer *masklay);
 
 void BKE_mask_layer_free_shapes(struct MaskLayer *masklay);
+void BKE_mask_layer_free_deform(struct MaskLayer *mask_layer);
 void BKE_mask_layer_free(struct MaskLayer *masklay);
 void BKE_mask_layer_free_list(struct ListBase *masklayers);
 void BKE_mask_spline_free(struct MaskSpline *spline);
+void BKE_mask_spline_free_list(struct ListBase *splines);
 struct MaskSpline *BKE_mask_spline_copy(struct MaskSpline *spline);
 void BKE_mask_point_free(struct MaskSplinePoint *point);
 

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h	2013-08-16 08:31:39 UTC (rev 59175)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h	2013-08-16 09:46:30 UTC (rev 59176)
@@ -898,6 +898,7 @@
 #define CMP_NODE_PIXELATE       318
 
 #define CMP_NODE_MAP_RANGE	319
+#define CMP_NODE_PLANETRACKDEFORM	320
 
 /* channel toggles */
 #define CMP_CHAN_RGB		1

Modified: trunk/blender/source/blender/blenkernel/BKE_tracking.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_tracking.h	2013-08-16 08:31:39 UTC (rev 59175)
+++ trunk/blender/source/blender/blenkernel/BKE_tracking.h	2013-08-16 09:46:30 UTC (rev 59176)
@@ -38,6 +38,8 @@
 struct MovieReconstructContext;
 struct MovieTrackingTrack;
 struct MovieTrackingMarker;
+struct MovieTrackingPlaneTrack;
+struct MovieTrackingPlaneMarker;
 struct MovieTracking;
 struct MovieTrackingContext;
 struct MovieTrackingObject;
@@ -55,6 +57,7 @@
 void BKE_tracking_settings_init(struct MovieTracking *tracking);
 
 struct ListBase *BKE_tracking_get_active_tracks(struct MovieTracking *tracking);
+struct ListBase *BKE_tracking_get_active_plane_tracks(struct MovieTracking *tracking);
 struct MovieTrackingReconstruction *BKE_tracking_get_active_reconstruction(struct MovieTracking *tracking);
 
 /* matrices for constraints and drawing */
@@ -97,6 +100,7 @@
 /* selection */
 void BKE_tracking_track_select(struct ListBase *tracksbase, struct MovieTrackingTrack *track, int area, int extend);
 void BKE_tracking_track_deselect(struct MovieTrackingTrack *track, int area);
+void BKE_tracking_tracks_deselect_all(struct ListBase *tracksbase);
 
 /* **** Marker **** */
 struct MovieTrackingMarker *BKE_tracking_marker_insert(struct MovieTrackingTrack *track,
@@ -113,6 +117,32 @@
 
 void BKE_tracking_marker_get_subframe_position(struct MovieTrackingTrack *track, float framenr, float pos[2]);
 
+/* **** Plane Track **** */
+struct MovieTrackingPlaneTrack *BKE_tracking_plane_track_add(struct MovieTracking *tracking, struct ListBase *plane_tracks_base,
+                                                             struct ListBase *tracks, int framenr);
+void BKE_tracking_plane_track_unique_name(struct ListBase *plane_tracks_base, struct MovieTrackingPlaneTrack *plane_track);
+void BKE_tracking_plane_track_free(struct MovieTrackingPlaneTrack *plane_track);
+
+bool BKE_tracking_plane_track_has_marker_at_frame(struct MovieTrackingPlaneTrack *plane_track, int framenr);
+bool BKE_tracking_plane_track_has_enabled_marker_at_frame(struct MovieTrackingPlaneTrack *plane_track, int framenr);
+
+struct MovieTrackingPlaneTrack *BKE_tracking_plane_track_get_named(struct MovieTracking *tracking,
+                                                                   struct MovieTrackingObject *object,
+                                                                   const char *name);
+
+struct MovieTrackingPlaneTrack *BKE_tracking_plane_track_get_active(struct MovieTracking *tracking);
+
+void BKE_tracking_plane_tracks_deselect_all(struct ListBase *plane_tracks_base);
+
+/* **** Plane Marker **** */

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list