4
$\begingroup$

enter image description hereI am working with Blender principally to render camera animations of photogrammetry models of underwater shipwrecks and other sites. I've successfully animated a camera along a nurbs path, using an empty to change the direction the camera points. So far so good. Where I am struggling is with the camera speed. I wish to initially achieve a steady camera speed along the complete curve, to give a basis for finetuning that camera speed to slow down and speed up along certain segments. However, the initial camera speed that Blender gives me is erratic, and speeds up and slows down seemingly dependent on the acuteness of the curve. It seems to speed up in straighter parts of the curve and slow down when the curve bends more acutely. This is very frustrating and I have to then use the graph editor to try and achieve some semblance of a steady speed, which I an struggling to do. The same speed changes are apparent whether I am using a linear or bezier curve at the start, before applying any other modifiers. I suspect I am missing something pretty basic but I also find it strange that I have not found any other posts on this subject. The attached pic shows the path and areas where the speed up happens

I converted the path to a mesh and back again in order to generate an even distribution of points but that did not make any difference at all. Prior to that I added extra points in between existing ones, also no change.

I am using the "follow path" constraint. I am enabling the "fixed position" option then using the offset factor to try to fine tune the speed. However the speed changes happen when there are no intermediate keyframes, just one at the start with zero offset factor, and one at the end with 1 offset factor.

Link to minimal version of .blend file

Link to screen recording of animation

Thanks in advance John

$\endgroup$
7
  • $\begingroup$ Please add a screenshot of your scene where the nurbs path is clearly visible. I suspect that having the camera speed is depending on how many control points you have. If you have an even distribution of points, the camera speed will be more even as well. $\endgroup$
    – Gunslinger
    Commented Apr 22, 2022 at 6:58
  • $\begingroup$ Are you using a 'Follow Path' constraint? $\endgroup$
    – Robin Betts
    Commented Apr 22, 2022 at 7:14
  • $\begingroup$ Hi Gunslinger, in fact I converted the path to a mesh and back again in order to generate an even distribution of points but that did not make any difference at all. Prior to that I added extra points in between existing ones, also no change $\endgroup$
    – John Wood
    Commented Apr 22, 2022 at 7:32
  • $\begingroup$ @RobinBetts correct I am using the "follow path" constraint. I am enabling the "fixed position" option then using the offset factor to try to fine tune the speed. However the speed changes happen when there are no intermediate keyframes, just one at the start with zero offset factor, and one at the end with 1 offset factor $\endgroup$
    – John Wood
    Commented Apr 22, 2022 at 7:34
  • 1
    $\begingroup$ Turns out you needed to apply scale to the curve. $\endgroup$ Commented Apr 23, 2022 at 19:02

1 Answer 1

3
$\begingroup$

One solution is to not animate the Offset Factor, but rather go to the curve and animate its Evaluation time. For your file this means

  • Select the camera
  • Go to the Follow Path constraint
  • Toggle "Fixed Position" off
  • Toggle "Follow Curve" on.
  • Hover over the "Offset Factor" input field, right click and select "Clear keyframes"
  • Change the "Offset Factor" to 0 and also clear the keyframe there.
  • Select the curve
  • Go to the Curve Object Properties tab of the Properties editor and open the "Path Animation" tab:

path animation tab

With "Frames" set to 100, the evaluation time represents a percentage of the length of the curve. If you wanted the camera to travel from one end of the curve to the other over the length of your animation, you would

  • Go to frame 1, set evaluation time to 0, and set a keyframe.
  • Go to frame 500, set evaluation time to 100, and set a keyframe.

You'll end up with an fcurve like this:

f curve

It has Bezier easing enabled. If you want linear easing, select both keyframes, enter T to bring up the menu and select 'linear' from the easing tab.

Now you can add keyframes at intermediate points to control the rate of change. You can even move the camera backwards this way.

EDIT: Color me very embarrassed. The acceleration is because you haven't applied scale. Scale is off in the X direction, and that confuses the curve length calculation. (Aside: You still have Bezier easing, so there's acceleration at the start and deceleration at the end because of that.)

$\endgroup$
10
  • 1
    $\begingroup$ This is probably going to come in handy for me. Cheers Marty $\endgroup$ Commented Apr 22, 2022 at 17:16
  • $\begingroup$ I don't know what the devs were thinking. Almost everyone hits on the idea of animating the offset in the modifier as their first approach to animating follow curve, probably because you think about animating the object, not the path it is following, but the approach I described is far more flexible. (and, in my opinion, easier to understand) $\endgroup$ Commented Apr 22, 2022 at 17:19
  • $\begingroup$ I tried this. It is a nice intuitive approach to animating a camera along a curve but the end result is identical to my original and does not resolve the problem I have of the camera's erratic speed. I've included a link to a screen recording of the animation here drive.google.com/file/d/1WHWnYnh7uh4ZxMp7tWqoIOLJPgLuOPmv/… and in the original question $\endgroup$
    – John Wood
    Commented Apr 23, 2022 at 14:55
  • 1
    $\begingroup$ That's a screen recording. It's rare that running an animation in the display will produce a consistent frame rate. Without a consistent frame rate, you get what looks like erratic motion. Replace the camera with an object, place a camera above the scene and render an eevee animation of just that object. that's the one that will tell if you have actual erratic bhavior. $\endgroup$ Commented Apr 23, 2022 at 15:53
  • 1
    $\begingroup$ @MartyFouts that's perfect solution is great many thanks! $\endgroup$
    – John Wood
    Commented Apr 24, 2022 at 6:26

You must log in to answer this question.

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