Is it possible to achieve a result like this using Blender, where the trail of the ball is drawn on the video?

example outcome (Screen capture from the video)

I've only really used blender for video editing, so any pointers are much appreciated. I was able to track the bowling ball for a few frames but as it got smaller I had to create a new marker and resize (any way to overcome that?)

Finally, I'm not sure what steps to take after I've tracked the ball in order to render the line on top of the view.

  • 1
    $\begingroup$ In general that sort of on screen effect would not be generated from tracking data. In a case like this where precision is not too critical, just manually place a curve in the correct spot, then animate a mask to follow the ball. Where you can use tracking, is if your whole shot is moving, or use the tracking data off the ball to drive the mask. $\endgroup$
    – David
    Aug 27 '16 at 14:15
  • $\begingroup$ Yes it is possible. Track your object, Link the track to an empty and use the empty as a hook on a curve. $\endgroup$
    – user1853
    Aug 27 '16 at 17:30
  • $\begingroup$ @David instead of a mask you can just animate the bevel factor's resolution start and end values, like here: blender.stackexchange.com/questions/34377/… $\endgroup$
    – user1853
    Aug 27 '16 at 19:24
  • $\begingroup$ Track, Match, Blend - 02 One Point Tracking $\endgroup$
    – Samoth
    Aug 29 '16 at 11:02

Track your object in the Movie Clip Editor

Select the tracker and in the solve section select Link empty to track.

enter image description here

Switch to the the regular 3d view. Through the camera biew you'll see an empty that behaves like the tracker.

enter image description here

(I added the video image as background for clarity, but is not necessary)

Select the empty and snap the cursor to the empty (Ctrl+S and select Cursor to selected)

enter image description here

Add a Curve > Bezier object.

enter image description here

I edit mode (Tab) select the end control point of the curve, and snap it to the cursor, that will move the end of the curve to the empty.

enter image description here

Exit edit mode.

Select the Empty and while pressing shift select the curve. And enter edit mode (this is done so that the Empty becomes the target object for the next operation)

Press the space bar, type "hook" and select "Hook to Selected object".

That will make the end of the curve follow the empty.

Go to the first frame of the video (or where the movement begins), and snap the cursor to the empty (Shift S > snap cursor to selected). Don't worry if the other segment seems to unhook from the empty momentarily

Then select the curve, enter edit mode, select the first segment of the curve and snap it to the empty (snap selection to cursor). (don't worry if the other segment seems to unhook from the empty momentraily)

enter image description here

Note that the curve will track the beginning and end points but not necessarily curve along the way... you might need to adjust that manually.

  • $\begingroup$ Thinking about this, what about using a particle emitter at the point with no physics? It would need to have enough frames that it looks smooth though... $\endgroup$
    – Gliderman
    Aug 27 '16 at 19:29
  • $\begingroup$ @Gliderman that would work too. There are quite a few ways to create this. $\endgroup$
    – user1853
    Aug 27 '16 at 19:31
  1. Link Empty to track
  2. Add a motion path for the empty that was created (via Object Properties > Motion Paths > Add Frame Range > Calculate)
  3. Next open the text editor in Blender and run the below script
  4. The script creates a curve
  5. In the Curve Object Data Properties > Bevel give it some depth and animate the Bevel End
  6. Done

Here you will find the below script: https://blenderartists.org/t/convert-object-motion-path-to-curve/679316

import bpy
ob = bpy.context.object
mp = ob.motion_path

if mp:
    path = bpy.data.curves.new('path','CURVE')
    curve = bpy.data.objects.new('Curve',path)
    path.dimensions = '3D'
    spline = path.splines.new('BEZIER')
    for i,o in enumerate(spline.bezier_points):
        o.co = mp.points[i].co
        o.handle_right_type = 'AUTO'
        o.handle_left_type = 'AUTO'

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.