Blender 2.5 Character Animation Cookbook — Save 50%
50 great recipes for giving soul to your characters by building high-quality rigs
The most difficult thing in animation is, quite ironically, mastering the basics. Young animators often have an urge to do "complicated" things such as complex dialogues and action scenes, but fail to understand aspects such as timing, spacing, asymmetry, or squash and stretch.
We must take care to make the basic underlying layers first, and make them well. Before attempting the fancy stuff, we need to make sure we have a good foundation. This foundation must work on its own: you should be able to communicate the actions and its motivations without all the polish.
In this article by Virgilio Vasconcelos, author of Blender 2.5 Character Animation Cookbook, we will cover the following topics:
- Adjusting and tracking the timing
- Spacing: favoring and easing poses
- Anticipating an action
- Using squash and stretch
- Breaking the symmetry
|Read more about this book|
(For more resources on Blender, see here.)
Adjusting and tracking the timing
Timing, by itself, is a subject that goes well beyond the scope of a simple recipe. It is, in fact, the main subject of a number of animation-related books. Strictly speaking, Timing in animation is how long it takes (in frames or seconds) between two Extreme poses.
You can have your character in great poses, but if the timing between them is not right, your shot may be ruined. Maybe it is a difficult thing to master because there are no definite rules for it: everyone is born with a particular sense of timing. Despite that, it's enormously important to look at video and real life references to understand the timing for different actions.
Imagine a tennis ball falling to the ground and bouncing. Think of the time between its first and second contact with the ground. Now replace it with a bowling ball and think of the time required for this bounce. You know, from your life experience, that the tennis ball bounces slower than the bowling ball. The timing between these two balls is different. The timing here (along with spacing, subject of the next recipe) is the main factor that makes us perceive the different nature and weight of each ball.
The "rules" of timing can also be broken for comedic effect: something that purposely moves faster or slower than usual may get a laugh from the audience. We're going to see how different timings can change how we perceive a shot with the same poses.
How to do it...
- Open the file 007-Timing.blend (Go to Support to get the code). It has our character Otto with three poses, making him look from one side to the other:
(Move the mouse over the image to enlarge it.)
- Press Alt + A to play the animation. You may think the timing is acceptable for this head turn, but this method of checking the timing is not ideal. When you tell Blender to play the animation through Alt + A, you're relying in your computer's power to process all the information of your scene in real time. You'd probably end up seeing something slower than what you'll actually get after rendering the frames.
When playing the animation inside the 3D view, you can see the actual playback frame rate on the top left corner of the window. If it's slower than the scene frame rate (in this case, 24 fps), it means that the rendered animation will be faster than what you're seeing.
When adjusting the timing, we must be sure of the exact results of every keyframe set. Even a one-frame change can make a huge impact on the scene, but rendering a complex scene just to test the timing is out of the question, because it just takes too long to see the results. We need a quick way to check the timing precisely.
Fortunately, Blender allows us to make a quick "render" of our 3D view, with only the OpenGL information. This is also called "playblast", and is exactly what we need. Take a look at the header of our 3D view and find the button with a clapperboard icon, as seen in the next screenshot:
OpenGL stands for Open Graphics Library, and is a free cross-platform specification and API for writing 2D and 3D computer graphics. Not only are the objects inside Blender's 3D view made using this library, but also the user interface with all its buttons, icons, and text are drawn on the screen with OpenGL. From OpenGL version 2.0 it's possible to use GLSL, a high level shading language heavily used to create games and supported by Blender to enhance the way objects are displayed on the screen in real time. From Blender 2.5, GLSL is the default real time rendering method when the user selects the Textured viewport shading mode, but that option has to be supported by your graphics card.
- Click on that clapperboard button, and the active 3D view will be used for a quick OpenGL render of your scene. This preview rendering shares the Render panel settings in the Properties window, so the picture size, frame rate, output folder, file format, duration, and stamp will be the same. If you can't see the button in your 3D View header (it is available only in the header) it may be an issue of lack of space; you can click with the middle button (or the scroll wheel) of your mouse over the header and drag it to the sides to find it.
- After the OpenGL rendering is complete, press Esc to go back to your scene and press Ctrl + F11 to preview the animation with the correct frame rate to check the timing.
Starting with the Blender 2.5 series, there's no built-in player in the program, so you have to specify one in the User Preferences window (Ctrl + Alt + U), on the File tab. This player can even be a previous version of Blender in the 2.4 series or any player you wish, such as DJV or Mplayer. With any of these options you must tell Blender the file path where the player is installed.
Now that you can watch the animation with the correct frame rate, you'll notice that the head turns quite fast, since it only takes five frames to complete. This fast timing makes our action seem to happen after the character listens to an abrupt and loud noise coming from his left, so he has to turn his head quickly and look to see what happened.
Let's suppose our character is watching a tennis match in Wimbledon, and his seat is in line with the net, at the middle of the court (yep, lucky guy). Watching the ball from the serve until it reaches the other side of the court should take longer than what we have just set up, so let's adjust our keyframes now.
- In the DopeSheet window, leave the first keyframe at frame 1. Select the last column of keyframes by holding Alt and right-clicking on any keyframe set at frame 5. Move (G) the column to frame 15 (hold Ctrl for snapping to the frames), so our action takes three times longer than the original.
Another way of selecting a column of keyframes is through the DopeSheet Summary option on the window header. It creates an extra line above all channels. If you select the diamond on this line, all keyframes on that column will be selected. You can even collapse all channels and use only the DopeSheet Summary to move the keys along the timeline to make timing adjustments easily.
- Now, the Breakdown, or intermediate position between two Extreme poses. It doesn't have to be at the exact middle of our action. Actually, it's good to avoid symmetry not only in our models and poses, but in our motions too. Move (G) the Breakdown to frame 6, and you'll have something similar to the next screenshot:
Now you can make another OpenGL render to preview the action with the new timing. You can choose to disable the layer where the armature is located, the second, by holding Shift and clicking over it, so you don't have the bones on the preview. Of course this is far from a finished shot: it's a good idea to make the character blink during the head turn, add some moving holds, animate the eyeballs, add some facial expressions, and so on. This rough example is only to show how drastically the timing can change the feel of an action. If you set the timing between the positions even higher, our character may seem like he's looking at something slower (someone on a bike, maybe?) moving in front of him.
How it works...
Along with good posing, the timing is crucial to make our actions vivid, believable, and with a sense of weight. The timing also is very important to help your audience understand what is happening in the scene, so it must be carefully adjusted. To have a precise view of how the timing is working in an action within Blender, it's best to use the OpenGL preview mode, since the usual Alt + A shortcut to preview the animation inside the 3D View can be misleading.
Depending on the complexity of your scene, you can achieve the correct frame rate within the 3D view with Alt + A. You can disable the visibility of irrelevant objects or some modifiers to help speed up this real time processing, like lowering (or disabling) the Subdivision Surface modifier and hiding the armature and background layers.
Spacing: favoring and easing poses
The previous recipe shows us how to adjust the timing of our character's actions, which is something extremely important to make our audience not only understand what is happening on the screen, but also know the weight and forces involved in the motion. Since timing is closely related to spacing, there is often confusion between the two concepts.
Timing in animation is the number of frames between two Extreme poses. Spacing is how the animated subject moves and shows variations of speed along these frames. Actions with the same timing and different spacing are perceived differently by the audience, and these principles combined are responsible for the feeling of weight of our actions.
We're going to see how the spacing works and how we can create eases and favoring poses to enhance movements.
How to do it...
- Open the file 007-Spacing.blend. It has our character Otto turning his head from right to left, just like in the timing recipe. We don't have a Breakdown position defined yet, and this action has a timing set to 15 frames.
First, let's understand the most elementary type of spacing: linear, or even spacing. This is when the calculated intermediate positions between two keyframes have the same distance among them, without any kind of acceleration. This isn't something we're used to seeing in nature, thus it's not the default interpolation mode in Blender.
- To use it, select the desired keyframes in a DopeSheet or a Graph Editor window, press Shift + T, and choose the Linear interpolation mode. The curves between the keyframes will turn into straight lines, as you can see in the next screenshot showing the channels for the Head bone.
If you preview the animation with Alt + A, you'll see that the movement is very mechanical and unappealing, something we don't see in nature. That's why this interpolation mode isn't the default one. Movements in nature all have some variation in speed, going from a resting state, accelerating to a peak velocity, then slowing down until another resting state. These variations of speed are called eases, and are represented with curved lines on the Graph Editor. When there is an increase in speed we have an ease out. When the movement slows down to a resting state, we have an ease in.
- This variation in speed is the default interpolation method in Blender, and you can enable it by selecting the desired keyframes in a DopeSheet or Graph Editor window, press Shift + T and select the Bezier interpolation mode. The next screenshot shows the same keyframes with easing:
When we adjust the curve handles on the Graph Editor, we're actually defining the eases of that movement. When you insert keyframes in Blender, it automatically creates both eases: out and in (with same speeds). Since not all movements have the same variation of speed at their beginning and end, it's a good idea to change the handles on the Graph Editor. This difference of speed between the start and end keyframes is called favoring.
When the Spacing between two poses have different eases, we say the movement "favors" one of the poses, notably the one which has the bigger ease. In the next screenshot, the curves for the Head bone were adjusted so the movement favors the second pose. Note that there is a softer curve near the second pose, while the first has sharper lines near it. This will make the head leave the first pose very quick and slowly settle into the second one.
In order to create sharp angles with the handles in the Graph Editor window, you need to select the desired curve channels, press V and choose the Free handle type.
- Open the video file 007-Spacing.mov in a video player, which enables navigating through the frames (such as DJV), to watch the three actions at the same time. Although the timing of the action is unchanged, you can clearly notice how the interpolation changes the motion. In the next screenshot, you can see that at frame 8, the Favoring version has the face closer to the second pose:
Now that you understand what spacing is, know the difference between the interpolation types, and can use eases to favor poses, let's add a Breakdown position. This action is pretty boring, since the head turn happens without any arcs. It's a good idea to tilt the head down a little during the turn, making an imaginary arc with the eyes.
Especially during quick head turns, it's a good idea to make your character blink during the turn. Unless your character is following something with the eyes—such as in a tennis court in our example—a quick blink is useful to make a "scene cut" in our minds from one subject to the other.
- On the DopeSheet window, in the Action Editor, select the Favoring action. Go to frame 6, where the character looks to the camera. Select and rotate (R) the Head and Neck bones to front on their local X axis, as seen in the next screenshot, and insert a keyframe (I) for its rotation:
Since Blender automatically creates symmetrical eases on each new keyframe, it's time to adjust our spacing for the Head and Neck bones on the Graph Editor window. If you play the animation with Alt + A, you'll notice that the motion goes very weird because of that automatic ease. The F-Curves on the X axis of each bone for this motion are not soft. Ideally, since this is a Breakdown position, the curves between it and its surrounding Extreme poses should be smooth, regardless of the favoring.
- Select the curve handles on frames 1 and 6, and move (G) them in order to soften the curve peak in that Breakdown position. The next screenshot shows the curves before and after editing. Notice how the peak curves at the Breakdown in the middle get smoother after editing:
Now the action looks more natural, with a nice Breakdown and favoring created using the F-Curves. The file 007-Spacing-complete.blend has this finished example for your reference, in which you can play the animation with Alt + A to see the results.
How it works...
By understanding the principle of Spacing, you can create eases and favoring in order to create snappy and interesting motions. Just like visible shapes, the pace of motion in nature is often asymmetrical. To make your motions not only more interesting, but also more believable and with accents to reinforce the purpose behind the movements, you should master Spacing. Be sure to check out the interpolation curves in your animations: interesting movements normally have different eases between two Extreme positions.
eBook Price: $26.99
Book Price: $44.99
|Read more about this book|
(For more resources on Blender, see here.)
Anticipating an action
In nature, most actions have a preceding movement. Be it a subtle eye or eyebrow movements to anticipate a head turn, or a full-body preparation for a jump.
Giving proper premise to your characters' actions will not only make them look more natural, but will also give visual clues to your audience so they know what's happening on the screen and where to look next. If you think of it like that, you may conclude that the anticipation principle is a storytelling resource in the animator's tool set.
As any other animation principle, you can use it (or remove it) for dramatic or comedic purposes. For instance, a character may leave the screen without anticipation, leaving only dust in its place and a proper sound to make the audience laugh.
How to do it...
- Open the file 007-Anticipation.blend. It has our character Otto with some basic poses for a jump. From right to left in the next screenshot: he is standing before the jump; the start of the jump; the moment where he finishes the jump, with his left foot touching the ground. We have a very important missing position here, the anticipation pose where he takes impulse for the jump. This pose must be between the first and second positions.
If you play the animation using Alt + A or render a playblast, you'll see that our character needs an impulse to accomplish the jump in a natural way. The timing is also something that we need to adjust, since we have only basic poses equally distributed on the timeline.
- On a DopeSheet window, leave our first keyframe at frame 1. Move (G), the second column of keyframes to frame 17, the third to frame 19, the fourth to frame 22, and the last to frame 26. You'll notice a big empty space between the first and second keyframes, as shown in the next screenshot. We're going to fill it with an anticipation pose.
- Go to frame 11 and adjust the pose so our character bends his torso and both knees in order to prepare for the jump. Rotate (R) the IK_Roll.R controller to make the left leg stand over the ball of the foot, and also the finger controllers to close them a bit.
- You'll notice the right foot in the next keyframe is a bit forward to help the impulse. You can select the diamond related to the Foot.R bone on frame 17, duplicate (Shift + D) it, and bring the copy to frame 11. Refer to the next screenshot to base your pose on:
Now, with our basic poses ready and with a proper anticipation to the jump, it's just a matter of adding more subtleties and fixes to our motion. Since the computer is a "dumb" inbetweener, we need to add more positions before and after our Extremes and Breakdowns in order to achieve good arcs.
The file 007-Anticipation-complete.blend has this complete exercise with some more positions added, so you can refer to it and compare your own results.
How it works...
By understanding the principles behind motion, you'll be able to add proper anticipation to your character's actions. Along with more physical examples similar to those in this recipe, you should think of this principle as a storytelling device with subtleties, such as making your character look at an object before picking it up, or looking to one side prior to a head turn.
Using squash and stretch
The animators at Disney, notably Frank Thomas and Ollie Johnston, stated that the animation principles were discovered instead of defined. Among those discoveries, arguably the most important is the fact that organic bodies squash and stretch its shapes during movement.
Most people associate this principle only with cartoony and exaggerated animation, but small amounts of squash and stretch are very welcome to "realistic" types of motion to help emphasize extreme poses. That's why it's a good idea to have a squash and stretch enabled character rig.
How to do it...
- Open the file 007-Stretch.blend. It has our character Otto making a jump, just like the result of our previous recipe on anticipation. To enhance the feeling of impulse and help lead the eyes of our audience, we're going to add a little squash and stretch to the torso and legs.
First, the torso. Our rig enables us to stretch the torso region by simply scaling the desired controllers. In our scene, the character gets into its crouching position at frame 11. We need a soft squashing here to enhance the feeling of weight after the body stops the down movement.
- At frame 11 the torso shouldn't have squashed yet, so go to this frame, select the Belly and Spine bones, and insert a keyframe (I) for their resting sizes.
- Our character starts its ascending movement and makes the jump at frame 17. Go to this frame and insert another keyframe to the resting size of the bones. Up until now nothing has changed: we have just defined when the squashing action will start and end.
- Now go to frame 13. Scale (S) down these bones slightly so you have a nice squashing action in the middle of the crouching action, as seen in the next screenshot:
This will create a subtle squashing action. Besides being subtle, it enhances the pose and the feeling of weight behind the action.
- Now we're going to do the same for the peak of the jump, when the torso should be fully stretched. Go to frame 19 and scale (S) the two bones up, inserting another size keyframe (I) for them, as you can see in the next screenshot:
- Go to frame 23 and, since this is where the impact happens, scale down the controllers to achieve another squashing. Finally, go to the last frame of the action (23), return the size of both controllers to their default (Alt + S) and save another scale keyframe for them. This will create a nice and subtle variation of squashing and stretching during the action, reinforcing the feeling of weight and forces involved.
If you expand the channels for the Belly and Spine controllers on the DopeSheet window you'll see that the number of rotation and location keyframes is higher than the number of scaling ones, which are responsible for this "layer" of squashing and stretching, as you can see in the next screenshot:
(Move the mouse over the image to enlarge it.)
- Now, the legs. Since they're in IK mode, we need to enable the stretching feature in our rig. Go to front view (Numpad 1) at the first frame of the animation, select and move (G) both stretch controllers for the legs to the right, and insert a location keyframe (I) for them, as seen in the following screenshot:
- Now go back to side view and adjust the Foot.L and Foor.R controllers to slightly stretch the legs where applicable. When you move the controller beyond the regular extension of each leg, they'll stretch to follow it. It's a good idea to add a little stretching to the right leg at frame 18 in order to enhance the feeling of impulse, and the left leg at frame 21 to enhance the foot contact to the ground. The next screenshot shows the two legs stretching at their frames:
Those stretching actions on the torso and legs last for a couple of frames, look weird when viewed alone, but they do add some charm and help the action when watched in continuous motion. Now it's just a matter of rendering an OpenGL playblast (the clapperboard icon on the 3D window header) and watching the animation on its correct timing.
The file 007-Stretch-complete.blend has this completed example for your reference.
How it works...
In nature, all organic structures are somewhat flexible, achieving levels of squashing and stretching while in motion. The squash-and-stretch principle can enhance the feeling of weight and forces involved in motion, and should be used not only in cartoon animations, but also as a layer of improvement.
Breaking the symmetry
Among the 12 basic principles stated by the animation legends Frank Thomas and Ollie Johnston, there is one called Solid Drawing. Even if you can't draw anything else other than a stick figure, this principle remains as important for those who use the computer as is does for classical 2D animators.
Think of the computer and its software as a highly sophisticated and expensive kind of pencil. A pencil doesn't make a masterpiece for itself, nor the computer. It's the person behind the tool who makes the difference.
When posing your character on the screen you're creating a "drawing", even if there's no pencil and paper involved. Thus, you have to take control of the shapes presented on the screen to make this drawing more appealing to the audience and tell a story.
Images rendered in a 3D application tend to look too perfect and symmetrical, and that does not feel natural. A big part of the work of artists involved in the processes of modeling, texturing, and lighting is to add "imperfections" to their work in order to make the images look more natural, believable, and interesting. The work of an animator shouldn't be different.
How to do it...
- Open the file 007-Symmetry.blend. It has our character with four basic poses applied to it in an action of falling to the ground. We are not worried about the timing just yet, because we need to finish our poses first. You will notice that his poses are absolutely symmetrical, as the next screenshot shows it in front and side views:
Nobody falls like that! In the side view, we can't even tell whether he has more than one arm or leg, since they are at the exact same position. We need to bring a bit of asymmetry to these poses to make the fall appear more natural.
natural motion, it can be useful to use this symmetry as a starting point. In this case, I've posed only the torso and left limbs and copied the flipped pose to the right limbs. Since the bones have the .L and .R suffixes, you can use the X-Axis Mirror option on the Toolshelf panel (T) or the Copy Pose and Paste Flipped Pose buttons on the 3D Window header.
- Go to frame 1 and start breaking this symmetry. Rotate (R) and move (G) the bones to have a more relaxed and natural pose on each of the four "drawings" we have on the timeline. Don't forget to replace the keyframes (I) of each bone that you've changed. It's also useful to check your changes in all views at the same time with the quad-view split option toggle (Ctrl + Alt + Q). The next screenshot shows our first pose with a more natural shape:
- This is looking much better. Once you feel happy with the resulting first pose, go change the next ones. Remember to make the adjustments in a coherent way; for instance, if the right leg is closer to the ground prior to the impact, it will most likely touch the ground first.
That leads us to another way of thinking about the asymmetry: not only the shapes on the screen shouldn't be symmetrical, but also the motion. The animation principle of the Overlapping Action tells us that different parts of an organic body move at different speeds. Taking this into consideration, both our character's hands and feet shouldn't touch the ground at the same time, for instance.
Another implication of it is that we'll need more positions set in our timeline than what we already have to address this overlapping actions. That shouldn't be an issue, since we're actually going to add more positions anyway: the computer is a "dumb" inbetweener and obligates us to add more keyframes than the regular Extreme and Breakdown positions.
The following screenshot shows our adjusted poses, and the file 007-Symmetry.blend has our complete recipe with the correction applied to the poses for your reference. To finish this action we need to add some extra keyframes and adjust the timing and spacing, but that is out of the scope of this recipe. Check our recipes covering timing, spacing, and arcs to learn more about this.
How it works...
Most organic (or non-mechanical) creatures move in a non-symmetrical way. Despite having some sort of physiological symmetry, such as the bilateral symmetry on humans, there are some "imperfections" that our eyes are very used to perceive. The lack of these imperfections both in shape and motion is something we notice very quickly, breaking the "illusion of life" that we want to create as animators. Adding a fair amount of asymmetry helps our animations to be more believable, looking more natural and fluid.
In this article we saw some very important principles of animation applied to our characters.
- Introduction to Blender 2.5: Color Grading [article]
- Getting Started with Blender’s Particle System [article]
- Advanced Effects using Blender Particle System [article]
- Blender 2.5: Detailed Render of the Earth from Space [article]
eBook Price: $26.99
Book Price: $44.99
About the Author :
Virgilio Vasconcelos is an animator based in Brazil, who uses Blender as his 3D tool to produce animations. He is also a university professor, teaching digital 3D and 2D animation at Universidade Federal de Minas Gerais (UFMG). His specialties include character rigging and animation, and his first tryst with Blender was back in 2003. He has worked as lead 3D artist at Nitrocorpz Design Studio, and has several personal and commissioned productions recognized by the Blender community, being awarded and nominated for artistic categories in events such as Blender Conference and BlenderPRO