I'm using the curve modifier to animate objects along a path. I know that there are other modifiers that do this but I am specifically using the curve modifier because I want the geometry to morph as it moves along.

I'm struggling to find a way to loop these animations along a bezier curve that is looping (cyclic flag enabled in the bezier panel). What I noticed is that the animation speeds up at the beginning and slows down at the end. Also, there is no obvious way to match up the beginning and the end of the loop. Is the distance the object has to move along one axis related to the length of the curve?

I've attached a gif of the behavior I'm seeing.

enter image description here

Thanks in advance for any tips or other paths to take.

  • 2
    $\begingroup$ Quite likely related re the slow / fast / slow nature of your animation. Can you provide a sample file? $\endgroup$
    – batFINGER
    Commented Jun 20, 2018 at 15:46
  • $\begingroup$ @batFINGER just added it to the post. note that i just added keyframes for location. and didn't change the animation curve at all. $\endgroup$
    – Mantissa
    Commented Jun 20, 2018 at 16:31
  • 1
    $\begingroup$ Related: blender.stackexchange.com/a/23384/1853 $\endgroup$
    – user1853
    Commented Jun 20, 2018 at 17:04

2 Answers 2


This looks like an issue with keyframe registration handles / extrapolation. By default, Blender uses Bezier handles with constant extrapolation to ease in and out of animations. This is usually what you want. But not for simple loops like this.

There are two solutions. One is to change the handles. Switch to the graph editor, move to your initial frame, ctrl-k select all this frame, jump to final frame, ctrl-k select all this frame. 'v' change handles -> vector.

Alternatively, change the extrapolation mode. Switch to the graph editor, select your channel (probably X location here), shift-e extrapolation mode -> linear.

As for finding the exact start of the curve, there are a number of plugins that can give you curve length, including the popular Animation Nodes plugin. This curve length could then be used as the translation of the object. But at this speed, it should be safe to eyeball it. What I would do is plop a cursor on one corner of the object on the initial frame, just as a visual marker, and without changing my view, jump to the final frame. Then I would advance my object along the proper axis until the appropriate corner was located at my cursor.

  • $\begingroup$ Thanks++ @Nathan, changing the extrapolation mode did the trick. Will check out Animation Nodes. $\endgroup$
    – Mantissa
    Commented Jun 20, 2018 at 16:43
  • $\begingroup$ I ended up using this script to calculate the length: gist.github.com/zeffii/3449664 $\endgroup$
    – Mantissa
    Commented Jun 20, 2018 at 17:31

make the first keyframe and the last free handle type to free (press v), then in the n panel set the handle y to the same value, also need to make sure the x locations of the handles are the same distance from their keyframe for both the first and last keyframe too (handles are the same length).


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .