55
$\begingroup$

I have created a storyboard where I frequently switch between slow-motion and normal motion. The scene involves a particle system, several animated objects and an animated camera.

How do I animate time for all objects globally? If possible I would love to do so using a curve so I can transition smoothly from real-time to slow-motion and back again. As far as I remember there was such thing as a "Time IPO" curve in Blender 2.4.x but I have yet to find the equivalent, nor do I know if that is actually what I am looking for.


See related question: Which animation features don't support sub-frames?

$\endgroup$
5
  • 1
    $\begingroup$ What do you mean by "animate" time? $\endgroup$ Jun 14, 2013 at 15:15
  • 7
    $\begingroup$ I want to smoothly go from realtime to slow motion and back from slow motion to realtime again. $\endgroup$
    – Bastian
    Jun 14, 2013 at 15:26
  • $\begingroup$ Okay, I understand you better I think (after giving it some thought). $\endgroup$ Jun 14, 2013 at 15:42
  • $\begingroup$ Can you give an example? I'm guessing you mean something like bullet-time to regular speed and back to bullet-time. $\endgroup$
    – CharlesL
    Jun 25, 2013 at 13:08
  • $\begingroup$ Watch Speed up & Slow Down Audio/Video | Snap Strips option from Mikeycal Meyers $\endgroup$
    – Samoth
    Jan 7, 2016 at 19:48

7 Answers 7

42
$\begingroup$

Time Remapper addon

Following Ideasman42's suggestion, I wrote an addon that allows you to animate time in the whole scene.

Limitations

  • Only for Cycles
  • Doesn't work for fluid simulations or motion blur
  • Works with Blender 2.70+
  • Freezes interface until frames are done rendering

Installing

Right click and save to your computer this link: https://raw.githubusercontent.com/hxxr/time-remapper/master/render_timeremapper.py

Open Blender, File > User Preferences > Addons > Install from File, then select the file you just saved.

Type "time" into the search bar and you should see the addon "Render: Time Remapper". Enable it.

In the Properties, you should see some new buttons,

enter image description here

Usage

It's best to launch Blender from a terminal so that you can see the output of the addon. If you're on Windows, then you'd launch Blender normally and go to Window > Toggle System Console.

Create your scene. Change any rigid body objects or animated objects to Quaternion rotation mode (N-menu > set XYZ Euler to Quaternion) Make sure to bake any physics simulations. For Rigid Body Physics, it seems work better if you do Bake to Keyframes (T-menu > Physics > Bake to Keyframes).

There's two modes you can use it in: Speed Factor and Time-Time Curve. Leave it on Speed Factor unless you need to go in reverse-time.

The speed factor can be animated. Setting it to 0.5 will give 2x slow-motion, setting it to 3 will give 3x fast-motion, etc.

After keyframing it, hit TR Animation. This will freeze Blender. You can see the progress of the addon or any error messages by looking in the terminal.

To watch what you've saved out, press TR Playback.

(OPTIONAL) You can choose up to 3 "immune objects" that will be immune to the time remapping effects. For example, if you want your camera to rotate around the scene without slowing down (as in the demo video above), select it as an immune object.

Using reverse motion

If you want you animation to go back in time, then change Speed Factor to Time Time Curve.

enter image description here

Open the Graph Editor. You'll see a 45 degree line that shows how time (in frames) maps to the animation's intrinsic time.

enter image description here

$\endgroup$
5
  • 16
    $\begingroup$ wow... does blender make sandwiches too? maybe someone will write an addon for that ^.^ $\endgroup$ Mar 26, 2014 at 9:00
  • $\begingroup$ wow thanks a lot! I haven't tried it yet but this looks useful. :D $\endgroup$
    – Bastian
    Jan 7, 2016 at 23:56
  • $\begingroup$ Does this work with smoke simulations? $\endgroup$ Aug 3, 2016 at 16:44
  • 2
    $\begingroup$ This fork doesn't freeze Blender github.com/hxxr/time-remapper/releases/download/v0.2/… $\endgroup$
    – ElectroBit
    May 27, 2017 at 0:56
  • 1
    $\begingroup$ Thanks, @ElectroBit, I've updated the links to point to your repo since I'm no longer maintaining it. $\endgroup$
    – Garrett
    May 30, 2017 at 21:19
23
$\begingroup$

Individual objects

Blender used to have a Time Graph Editor curve for controlling time. Since the animation system rewrite by Aligorith this is now done using the NLA Editor:

  • One you've created a NLA-Strip by clicking the snowflake icon next to your action.
  • In the Properties panel (N to toggle) under Evaluation enable "Animated Strip Time".
  • Animate the "Strip Time" as desired.

Evaluation section of the Properties panel

Entire scene

  • In video sequencer Add | Scene | Scene or Shift+A,S,S
  • Add | Effect Strip… | Speed or Shift+A,E,P
  • In Properties panel under "Effect Strip" disable "Stretch to input strip length",
  • Animate the "Speed Factor" (or optionally disable "Use as speed" and animate the "Frame Number").
  • Press Refresh Sequencer to update after animating.

Effect Strip section of the Properties panel

$\endgroup$
6
  • $\begingroup$ I tried both, but I couldn't get either to work. in the NLA editor, "Evaluation" wasn't there. (blender 2.67b) In the video sequence editor (after adding the scene and effect strip) changing the "speed factor" value did not effect the scene? $\endgroup$
    – gandalf3
    Jun 27, 2013 at 0:21
  • $\begingroup$ @gandalf3 I've updated the answer, hope it helps. $\endgroup$
    – Aldrik
    Jun 27, 2013 at 9:26
  • $\begingroup$ Thanks, the NLA edtor works, though the Sequence editor still doesn't seem to effect the scene.. $\endgroup$
    – gandalf3
    Jun 28, 2013 at 1:06
  • $\begingroup$ I can't think of anything else to add. Here's an example scene showing it in action. $\endgroup$
    – Aldrik
    Jun 28, 2013 at 7:37
  • 1
    $\begingroup$ @Garrett, 2.76 fixes the issue where the scene had to have a high frame-rate - developer.blender.org/… $\endgroup$
    – ideasman42
    Aug 28, 2015 at 0:44
17
$\begingroup$

Render any point in time

If you are prepared to learn a little scripting, you can in fact render any time you want without frame steps.

Using some fast motion (so you can tell sub-frames are working correctly)

# frame 1.5
bpy.context.scene.frame_set(1, 0.5)

... then press Render.

Since it's not such a hard task to render at any point in time you want, using a more advanced script you could use an fcurve to animate time.

Good opportunity for a newer dev to write a handy addon!

Note: Blender-Internal supports this since 2.77.

$\endgroup$
6
  • $\begingroup$ Thanks for the alternative solution! I don't understand how I could use a more advanced script to use an f-curve to animate time as you describe, but perhaps in the future. Definitely a good opportunity for a newer dev, nevertheless! $\endgroup$
    – Bastian
    Jun 16, 2013 at 10:28
  • $\begingroup$ You could either define a custom property which represents the Frame, then animate with an fcurve, each frame you render the frame number defined by the fcurve (a little odd, but it would work). --- OR more complicated but nicer from user POV, you could define a custom FPS property, then the addon would have to evaluate the FPS changes over time to build up a list of frame times to render. $\endgroup$
    – ideasman42
    Jun 16, 2013 at 14:38
  • $\begingroup$ Alright, I did an addon using this idea. See my answer. $\endgroup$
    – Garrett
    Mar 16, 2014 at 8:05
  • $\begingroup$ @ideasman42, I had a user requesting to be able to use my addon in Blender Internal. You mentioned one only needs to comment out a few lines of C. Is it possible to allow rendering at decimal frames in Blender Internal by default? What's the downsides? $\endgroup$
    – Garrett
    Mar 2, 2015 at 3:56
  • 1
    $\begingroup$ @Garrett: Added a patch to support, developer.blender.org/D1492, Will check on committing after 2.76 release $\endgroup$
    – ideasman42
    Aug 29, 2015 at 5:01
14
$\begingroup$

You can use the 'time remapping' sliders to control time. The benefit of this is that all the simulation and whatnot are also slowed down properly.

Blender time remapping

The ratio controls how fast the 'time' goes.

  • 100:100 is the default.
  • 200:100 is playback at 2x the speed. (fast-forward)
  • 100:50 is playback at half the speed. (slow-motion)
$\endgroup$
7
  • $\begingroup$ Is there a way to animate this? I tried pressing I while hovering over it, but nothing happened. (there was a error of some sort.) $\endgroup$
    – Stephen
    Jun 15, 2013 at 5:13
  • 1
    $\begingroup$ I combined Time Remapping with the VSE and got this result: rvzt.net/Temp/0001-0072.ogg I used a time remapping of 100:800 and used a Speed Control with a Speed factor initially set to x8, then keyframed the factor down to x1 (8 times as slow). It does seem to stutter a bit unfortunately, though. $\endgroup$
    – Bastian
    Jun 15, 2013 at 8:32
  • 1
    $\begingroup$ Interesting... I didn't realize you can't animate Time Remapping. Probably because it will cause havoc with Blender so it was disabled. I haven't considered time remapping in the VSE. It looks like a good way to do it. Will investigate why it doesn't work reliably. Could be a bug. $\endgroup$
    – Mike Pan
    Jun 16, 2013 at 7:14
  • 1
    $\begingroup$ Good question WChargin, as far as I know, yes 100:100 is exactly the same as 200:200. So yeah a decimal would make sense. Maybe a blender coder can chime in? $\endgroup$
    – Mike Pan
    Aug 9, 2013 at 1:19
  • 2
    $\begingroup$ I'm not a dev, but I think the X:X is easier to use. For example, if I have a 3000 frame scene and I want it to play faster by 1 frame, then I can remap 2999:3000 without having to do the math and worry about rounding errors. It's also more explicit: I know exactly what's going on... though I may not know WHICH frame is getting skipped ;-) $\endgroup$
    – Matt
    Mar 26, 2014 at 16:30
8
$\begingroup$

Blender's time is very quantized, and doing something as simple as encoding at multiple frame rates (PAL -vs- NTSC -vs- cinema) can be frustrating. This is in contrast to animated SVG where everything is in continuous time.

Using the animation philosophy of "don't make it if you can fake it", consider setting your frame rate at 3000Hz and then only render every 100th frame. There is a Frame Step parameter in the Render tab.

Doing the smooth transitions would be a little trickier, requiring you to render frames at non-uniform steps. I am optimistic that the blender API has functions you could drive from a python script to render specific frame numbers according to a non-linear formula that will give the effect of a smooth transition from slow-mo to real-time.

The Nyquist-Shannon theorem would suggest you set your project's frame rate at twice the frequency of your fastest slow-motion shots, and I don't see the harm in setting it at 10x (but I invite corrections).

Just to be a wonk, here are the frame steps to achieve all the frame rates I remember from MPEG specifications

divisor = 60000

  • 60Hz = step 1000
  • 59.94Hz = step 1001
  • 30Hz = step 2000
  • 29.97Hz = step 2002 (NTSC)
  • 25Hz = step 2400 (PAL)
  • 24Hz = step 2500 (cinema)
$\endgroup$
4
  • $\begingroup$ Sounds like quite a bit of manual work but thank you for the input on this issue! $\endgroup$
    – Bastian
    Jun 15, 2013 at 8:37
  • $\begingroup$ I think a script implementing your ideas wouldn't be too hard, using bpy.context.scene.frame_set(.) and having it choose frames to render corresponding to some F-curve. I suppose one downside of this is that all physics demos would now be over many frames, so they have to be slowed down and fluid simulations and soft body simulations would take a long time to bake. $\endgroup$
    – Garrett
    Feb 4, 2014 at 10:35
  • $\begingroup$ I don't think a script would even be necessary. The step setting in the render panel can be keyframed, IIRC. For a 3000 frame animation, a step of 10 would be 10x speed and 1 would be "regular." So if everything is animated so that a step of 10 looks normal, then a step of 1 would look like slo-mo. $\endgroup$
    – Matt
    Mar 26, 2014 at 16:33
  • $\begingroup$ ...it'd even accommodate physics sims. $\endgroup$
    – Matt
    Mar 26, 2014 at 16:34
5
$\begingroup$

Another technique for animating time is to use a Speed Control strip in the Video Sequence editor.

Whenever you want to use the VSE it is highly recommended that you create a separate scene that is only the VSE and has no 3D objects in it. While it is not necessary, keeping VSE work separate from 3D work precludes a wide variety of very confusing mistakes.

Add a VSE strip referencing the target scene. Then add an Effect Strip / Speed. Then go into the properties of the Speed strip and uncheck Stretch to input strip length and uncheck Use as speed. Now you have a Frame number property which you can keyframe. speed control

One of my favorite tricks is to loop the source track by creating a linear animation of the frame number and using the fcurves editor to add a Cycles modifier to turn it into a sawtooth.

Note

Frame numbers with a fractional component only works in 2.76, there was a bug/limitation in older Blender versions, subframe rendering in the sequencer didn't work.

$\endgroup$
3
  • $\begingroup$ What type of confusion does having a different scene produce? $\endgroup$ Jan 3, 2017 at 23:37
  • 1
    $\begingroup$ Having a different scene "precludes" (prevent from happening) a wide variety of confusing mistakes. Precluding mistakes is a good thing, so you should keep your 3D scenes separate from VSE scenes. The most common problem is outlined at web.purplefrog.com/~thoth/blender/python-cookbook/… in section 2. $\endgroup$
    – Mutant Bob
    Jan 4, 2017 at 15:18
  • $\begingroup$ Okay, cool. Good to know. $\endgroup$ Jan 4, 2017 at 15:22
3
$\begingroup$

This isn't the cleanest way to handle the issue, but you can manually convert specific segments of your animation to slow-motion in the Graph Editor. Select the range of keyframes you want to do in slow-motion, scale them in the x direction (S+X), then shift them/the surrounding frames to fit.

Again, it's a clunky solution, but if there's no cleaner way to do it, at least this is an option.

$\endgroup$
1
  • 1
    $\begingroup$ Useful except in situations where you have physics, simulations and particles involved as is with my case. Hence why I was looking for a global solution. Thanks for the input, nevertheless! $\endgroup$
    – Bastian
    Jun 15, 2013 at 8:36

You must log in to answer this question.

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