In this video we show you how you can exaggerate your animation by using a common motion graphics technique called overshoot:

Here’s the script by Liero used to stagger the keyframes:

## offset actions in time

offset = 0.25 ## offset in frames
noise = 50 ## add some offset variation (set to 0 to disable)
reset = False ## enable to align actions to frame 0

import bpy, random
objs = [o for o in bpy.context.selected_objects if o.animation_data]

for i,o in enumerate(objs):
act = o.animation_data.action
delta = offset * i
delta += random.random() * noise
if reset: delta = act.frame_range[0] * -1

for fcu in act.fcurves:
for k in fcu.keyframe_points:[0] += delta
k.handle_left[0] += delta
k.handle_right[0] += delta

Written version:

Let’s begin by deleting the default cube and adding some text.

You can press tab in order to take the text into edit mode and change what it says.

Let’s space the letters out a little in the text settings.

Next we can make them thicker with the extrude-setting.

Now that we are happy with the text, we can convert it into a regular object for a better control of the mesh.

The result gives us some nasty triangles, but we can use the remesh modifier to get rid of them.

Let’s uncheck the “remove disconnected pieces” option and increase the octree depth until the text looks decent.

If we apply the modifier and head back into edit mode, we can see a better looking mesh.

We want each letter to be a separate object, so let’s hit L, to select a letter while hovering over it with the mouse, and P, to separate the selected letter into a separate object.

While all our letters are selected, let’s re-center their origin points by choosing object, transform, origin to geometry.

Let’s go to frame 30 and start animating by adding scale keyframes to each letter.

Then we’ll move the playhead to the beginning of the timeline and change the pivot point of our scale operation to the origin point of each letter.

Now we hit s to scale and 0 to scale them all the way down into nothing.

Remember to insert the second keyframe in order to finish the animation.

Here’s how our animation looks so far.

It looks ok, but let’s exaggerate it a bit by adding some overshoot.

Let’s open up the graph editor. We can hit the home button in order to maximize the animation curve display.

Let’s uncheck the “display only selected keyframe handles” option. This is important so that we can move all the handles simultaneously.

Now we can select our incoming handles with control b, and then move them all together by hitting g for grab.

Bending the curve like this is one way of overshooting. Some prefer doing it with the outgoing handle of the first keyframe like this, because it makes the ending smoother.

Let’s see how this looks. Not bad, but I think it would be more interesting if the letters animated in a staggered order.

So let’s head over to the dope sheet to see the keyframes. We could always move the keyframes one by one but that would be too much work.

So let’s drag at the corner to make another window and change it to the script editor. We want to thank username Liero for providing this script that we’ll use to automate the process.

If we select run script, you can see how the keyframes move around. We don’t want random placement for them though, so let’s undo and change the script slightly.

First of all let’s make the offset 10 frames and remove all the random noise. If we run the script now, we get an ordered staggering, but unfortunately the direction is wrong.

We wanted to animate the first letter first and not the other way around. The script orders the effect based on the names of the selected objects, so we can either change the names or the script itself.

Changing the script is faster so let’s dig in and multiply the delta value with minus one, in order to change the values around. Maybe we’ll use only five frames for the offset this time.

That’s looking better!

Here’s our rendered animation for which we added a small camera move and some subsurface scatter for the letters. Thanks for watching and see you next time on



No responses yet

Leave a Reply

Your email address will not be published. Required fields are marked *