[WML-Source: Animation_with_objects.wml][TOC][Part00]

[chapter]Animation with objects

[section]Object IPOs

[subsection]Keys and curves

Two methods are normally used in animation software to start a 3D object moving.

[point]Key frames

Complete positions are saved for certain time units (frames). An animation is created by moving an object through them interpolated fluidly. The advantage of this principle is that it allows you to work with clearly visualised units. The animator works from position to position and can change already created positions or move them in time.

[point]Motion Curves

Curves can be drawn for each XYZ component for location, rotation and size. These, in fact, form the graphs for the movement, with time set out horizontally and the value set out vertically. The advantage of this system is that you have precise control over the results of the movement.

Both systems are completely integrated in Blender: in the "Ipo". Fundamentally, the Ipo system consists of the standard motion curves. A simple press of a button changes the Ipo to a key system, without conversion and with no change in the results. The user can work any way he wishes with the keys and switch to motion curves and back again - whatever produces the best result or satisfies the user's preferences. This chapter first describes the basic principles of the Ipo block and working with motion curves. We close with the "IpoKey" system.

[subsection]Ipo Block

The Ipo block in Blender is universal. It makes no difference whether an Object's movement is controlled or the Material's settings. If you once learn to work with Object Ipos, how you work with other Ipos is obvious. Blender does distinguish between different types of Ipos. This only has to do with the type of blocks on which Ipos can work. It is better not to link Object Ipos to a Material! The user does not need to think about this; the interface keeps track of it automatically.

Every type of Ipo block has a fixed number of available channels. These have a name (LocX, SizeZ, etc.) which indicates how they can be applied. When you add an IpoCurve to a channel, animation starts up immediately. At your discretion, and there are separate channels for this, a curve can be linked directly to a value or can only affect a difference from this. The latter enables you to move an Object as usual with the Grabber, while the actual location is determined by IpoCurves relative to it.

The Blender interface offers extensive options for copying Ipos, linking Ipos to more than one Object (one Ipo can animate multiple Objects.), or deleting Ipo links. The IpoWindow Reference section gives a detailed description of this. This chapter is restricted to the options for application.

[subsection]Making Ipos in the 3DWindow

  [images/InsertKeyMenu.tga]

The most simple method for creating an Object Ipo is with the IKEY, "Insert key", command in the 3DWindow. A PopupMenu provides a wide selection of options. We will select the topmost option: "Loc". Now the current location, X-Y-Z, is saved. Everything takes place automatically:

We go 30 frames further (3 x UPARROW) and move the Object. Again we use IKEY and immediately press ENTER. The new position is inserted in the IpoCurves. We can see this by slowly paging back through the frames (LEFTARROW). The Object moves between the two positions.

In this way, you can create the animation by paging through the frames, position by position. Note that the location of the Object is directly linked to the curves. When you change frames, the Ipos are always re-evaluated and re-applied. You can freely move the Object within the same frame, but since you have changed frame, the Object 'jumps' to the position determined by the Ipo.

The rotation and size of the Object are completely free in this example. They can be changed or animated with the "Insert key".

[subsection]The IpoWindow

  [images/IPOWindow.tga]

Now we want to see exactly what happened. The first Screen for this is initialised in the standard Blender start-up file. Activate this Screen with (ALT-)CTRL+LEFTARROW. At the right we see the IpoWindow displayed. This shows all the IpoCurves and shows the channels used and those available. You can zoom in on the IpoWindow and translate, just as everywhere else in Blender with (CTRL+) MiddleMouse.

In addition to the standard channels, you have the 'delta' options, such as "dLocX". These channels allow you to assign a relative change. This option is primarily used to control multiple Objects with the same Ipo. In addition, it is possible to work in animation 'layers'. You can achieve subtle effects this way without having to draw complicated curves.

Each curve can be selected individually: with RightMouse. In addition, the Grabber and Size modes operate here just as in the 3DWindow. By selecting all curves (AKEY) and moving them to the right (GKEY), you move the complete animation in time.

[subsection]Beziers

Each curve can be placed in EditMode individually, or you can do it collectively. Select the curves and press TAB. Now the individual vertices and handles of the curve are displayed. The Bezier handles are coded, just like the Curve Object:

Handles can be moved by first selecting the middle vertex with RightMouse; this selects the other two vertices as well. Then immediately start Grab mode with RightMouse-hold-move. Handles can be rotated by selecting the end of one of the vertices. Then use the Grabber again with RightMouse-hold-move.

As soon as handles are rotated, the type is changed automatically:

"Auto" handles are placed in a curve by default. The first and last Auto handles always move horizontally, which creates a fluid interpolation.

[subsection]IpoCurves

The IpoCurves have an important feature that distinguishes them from normal curves; it is impossible to place more than one curve segment horizontally. Loops and circles in an Ipo are senseless and ambiguous; an Ipo can only have 1 value at a time. This is automatically detected in the IpoWindow. By moving part of the IpoCurve horizontally, you see that the selected vertices move 'through' the curve. This allows you to duplicate parts of a curve (SHIFT+D) and to move them to another time frame.

It is also important to specify how an IpoCurve must be read outside the curve itself. There are three options for this in the IpoHeader.

  [images/IPOExtendModes.tga]

[point]Extend mode Constant (IconBut)

The ends of selected IpoCurves are continuously (=horizontally) extrapolated.

[point]Extend mode Direction (IconBut)

The ends of the selected IpoCurves continue in the direction in which they ended.

[point]Extend mode Cyclic (IconBut)

The complete width of the IpoCurve is repeated cyclically.

[point]Extend Mode Cyclic Extrapolation (IconBut)

The complete width of the IpoCurve is extrapolated cyclic.

In addition to Beziers, there are two other possible types for IpoCurves. Use the TKEY comand to select them. A PopupMenu asks what type the selected IpoCurves must be:

[subsection]Draw IpoCurves

The IpoCurves can also be drawn 'by hand'. Use the CTRL+LeftMouse command. Here are the rules:

This is the best method for specifying axis rotations quickly. Select the Object. In the IpoWindow, press one of the "Rot" channels and use CTRL+LeftMouse to insert two points. If the axis rotation must be continuous, you must use the button IpoHeader->"Extend mode Directional".

[subsection]Rotations and Scaling

One disadvantage of working with motion curves is that the freedom of transformations is limited. You can work quite intuitively with motion curves, but only if this can be processed on an XYZ basis. For a location, this is outstanding, but for a size and rotation there are better mathematical descriptions available: matrices (3x3 numbers) for size and quaternions (4 numbers) for rotation. These could also have been processed in the channels, but this can quite easily lead to comfusing and mathematically complicated situations.

Limiting the size to the three numbers XYZ is obvious, but this limits it to a rectangular distortion. A diagonal scaling such as 'shearing' is impossible. This can be solved simply by working in hierarchies. A non-uniform scaled Parent will influence the rotation of a Child as a 'shear'.

The limitation of the three number XYZ rotation is less intuitive. This so-called Euler rotation is not uniform - the same rotation can be expressed with different numbers - and has the bothersome effect that it is not possible to rotate from any position to another, the famous gimbal lock. While working with different rotation keys, the user may suddenly be confronted with quite unexpected interpolations, or it may turn out to be impossible to force a particular axis rotation when making manual changes. Here, as well, a better solution is to work with a hierarchy. A Parent will always assign the specified axis rotation to the Child. (It is handy to know that the X, Y and Z rotations are calculated one after the other. The curve that affects the "RotX" channel, always determines the X axis rotation).

Luckily Blender calculates everything internally with matrices and quaternions. Hierarchies thus work normally and the Rotate mode does what you would expect. Only the Ipos are a limitation here, but in this case the ease of use prevails above the not very intuitive mathematical purity.

[subsection]IpoKeys

The easiest way to work with motion curves is to convert them to IpoKeys. We return to the situation in the previous example: we have specified two positions in a Object Ipo in frame 1 and frame 31 with "Insert Key". At the right of the screen, you can see an IpoWindow. We set the current frame to 21.

  [images/ScreenIpoKeys.tga]

Press KKEY while the mouse cursor is in the 3DWindow. Two things happen now:

The two actions each have separate meanings.

In addition to now being able to visualise the key positions of the Object, you can also modify them in the 3DWindow. In this example, use the Grab mode on the Object to change the selected IpoKeys.

Below are a number of instructions for utilising the full power of the system:

[section]Vertex Keys

[subsection]The Key block

VertexKeys, which should not be confused with "Object keys", the specified positions of Objects, can also be created in Blender; VertexKeys are the specified positions of vertices in ObData. Since this can involve thousands of vertices, separate motion curves are not created for each vertex, but the traditional Key position system is used instead. A single IpoCurve is used to determine how interpolation is performed and the times at which a VertexKey can be seen.

VertexKeys are part of ObData, not of an Object. When duplicating ObData, the associated VertexKey block is also copied. It is not possible to permit multiple users to use VertexKeys in Blender, since it would not be very practical.

The Key block is also universal and understands the distinction between a Mesh, Curve, Surface or Lattice. Their interface and use are therefore identical. Working with Mesh VertexKeys is explained in detail in this section, which also contains a number of brief comments on the other ObData.

The first VertexKey position created, is always the reference Key. This key defines the texture coordinates. Only with this Key active the faces and curves or the number of vertices can be changed. It is allowed to assign other Keys a different number of vertices. The Key system automatically interpolates this.

[subsection]Mesh VertexKeys

Creating VertexKeys in Blender is very simple, but the fact that the system is very sensitive in terms of its configuration, can cause a number of 'invisible' things to happen. The following rule must therefore be taken into consideration: A practical example is given below.

When working with VertexKeys, it is very handy to have an IpoWindow open. Use the first Screen from the standard Blender file, for example. In the IpoWindow, we must then specify that we want to see the VertexKeys. Do this using the Icon button with the vertex square.

Go to the 3DWindow with the mouse cursor and press IKEY. With a Mesh Object active, this key gives us the "Insert Key" menu with the "Mesh" option at the bottom. As soon as this has been selected, a yellow horizontal line is drawn in the IpoWindow. This is the first key and thus the reference Key. An IpoCurve is also created. Go a few frames further and again select: IKEY, ENTER (in the 3DWindow). The second Key is drawn as a light blue line. This is a normal Key; this key and all subsequent Keys affect only the vertex information. Press TAB for EditMode and translate one of the vertices in the Mesh. Then browse a few frames back: nothing happens! As long as we are in EditMode, other VertexKeys are not applied. What you see in EditMode is always the active VertexKey. Leave EditMode and browse through the frames again. We now see the effect of the VertexKey system.

VertexKeys can only be selected in the IpoWindow. We always do this out of EditMode: the 'contents' of the VertexKey are now temporarily displayed in the the Mesh. We can edit the specified Key by starting Editmode.

There are three methods for working with Vertex Keys:

  1. The 'performance animation' method. This method works entirely in EditMode, chronologically from position to position.
  2. The 'editing' method.
  3. The 'insert' method
While in EditMode, the Keys cannot be switched. If the user attempts to do so, a menu appears: "Copy Key". This method can be used to copy the current key to the newly selected Key.

[subsection]The IpoCurve and VertexKey lines

Both the IpoCurve and the VertexKey lines are drawn in the IpoWindow. They can be separately selected with RightMouse. Since it would otherwise be too difficult working with them, selection of the Key lines are switched off when the curve is in EditMode. The channel button can be used to temporarily hide the curve (SHIFT+LeftMouse on "Speed") to make it easier to select Keys.

The Key lines in the IpoWindow can be placed at any vertical position. Select the line and use Grab mode to do this. The IpoCurve can also be processed here in the same way as described in the previous section. Instead of a 'value', however, the curve determines the interpolation between the Keys, e.g. a sine curve can be used to create a cyclical animation.

With a Key line selected, three interpolation types can be specified. Press TKEY to open a menu with the options:

[subsection]Tips

[subsection]Relative Vertexkeys

(relative VertexKeys-cw-)
Relative VertexKeys simplify the creation of facial and character animation by blending sets of VertexKeys. While traditional vertex keys are controlled with only one interpolation curve, relative vertex keys are controlled by one interpolation curve for every key position, thus relative keys can be mixed (added, subtracted, etc.).


Face by Jason Nairn
For facial animation the base position might be a relaxed position with a slightly open mouth and eyelids half open. Then keys would be defined for left/right eyeblink, happy, sad, smiling, frowning, etc.

The trick with relative vertex keys is that only the vertices which are changed between the base and the key affect the final output during blending. This means it is possible to have several keys affecting the object in different places all at the same time.

For example, a face with three keys: smile, and left/right eyeblink could be animated to smile, then blink left eye, then blink right eye, then open both eyes and stop smiling - all by blending 3 keys. Without relative vertex keys 6 vertex keys would have needed to be generated, one for each target position.

[point]The Relative VertexKey buttons

  [images/relakey01.gif]

The "Relative Keys" button (AnimButtons, F7) toggles the VertexKey system for the selected object between traditional and relative mode. It only becomes active after the first ('base') key has been inserted.

  [images/relakey02.gif]

Relative keys are defined by inserting normal vertex keys. The vertical order of the vertex key determines its corresponding IPO curve, ie. the lowest blue key line will be controlled by the "Key1" curve, the second lowest will be controlled by the "Key2" curve, and so on.

The "Relative Keys" button in the AnimButtons must be active for the Key curves to be displayed. When "Relative Keys" is active the speed curve no longer affects the mesh position and can be removed.

  [images/relakey03.gif]

The blending between relative keys is controlled by the IPO Curve for each key. These curves should be created in the typical fashion (see manual page 118, "Draw IPOCurves"). The final position is determined by adding all of the affects of each individual IPO curve.

An important part of relative keys is the use of additive or extrapolated positions. For example, if the base position for a face is with a straight mouth, and a key is defined for a smile, then it is possible that the negative application of that key will result in a frown. Likewise, extending the IPO Curve above 1.0 will "extrapolate" that key, making an extreme smile.

[subsection]Curve and Surface Keys

As mentioned earlier in this manual, Curve and Surface Keys work exactly the same way as Mesh Keys. For Curves, it is particularly interesting to place Curve Keys in the bevel Object. Although this animation is not displayed real-time in the 3Dwindow, it is rendered.

[subsection]Lattice Keys

Lattice Vertex Keys can be applied in a variety of ways by the user. When combined with "slurping", they can achieve some very interesting effects. As soon as one Key is present in a Lattice, the buttons that are used to determine the resolution are blocked.

[section]Special animation techniques

[subsection]Motion paths

Curve Objects can be used for the 3D display of an animation path. Only the first curve in the Object is then used. Each Curve becomes a path by setting the option AnimButtons->CurvePath to ON. All Child Objects of the Curve move along the specified path. It is also a good idea to set the option EditButtons->3D to ON so that the paths can be freely modeled. In the ADD menu under Curve->Path, a primitive with the correct settings is already. This is a 5th order Nurbs spline, which can be used to create very fluid, continuous movements.

Curves that are used as paths always get the correct number of interpolated points automatically. The button EditButtons->ResolU has not effect here.

The speed along a path is determined with a curve in the IpoWindow. To see it, the Header button with the 'arrow' icon must be pressed in. The complete path runs in the IpoWindow between the vertical values 0.0 and 1.0. Drawing a curve between these values links the time to the position on the path. Backward and pulsing movements are possible with this. For most paths, an IpoCurve must run precisely between the Y-values 0.0 and 1.0. To achieve this, use the Number menu (NKEY) in the IpoWindow. If the IpoCurve is deleted, the value of AnimButtons->PathLen determines the duration of the path. A linear movement is defined in this case.

Using the option AnimButtons->CurveFollow, a rotation is also given to the Child Objects of the path, so that they permanently point in the direction of the path. Use the "tracking" buttons in the AnimButtons to specify the effect of the rotation:

[point]TrackX, Y, Z, -X, -Y, -Z (RowBut)

  [images/TrackButtons.tga]

This specifies the direction axis, i.e. the axis that is placed on the path.

[point]UpX, UpY, UpZ (RowBut)

Specifies which axis must point 'upwards', in the direction of the (local) positive Z axis. If the "Track" is the "Up" axis, it is deactivated.

Curve paths cannot be given uniform rotations that are perpendicular to the local Z axis. That would make it impossible to determine the 'up' axis.

To visualise these rotations precisely, we must make it possible for a Child to have its own roations. Erase the Child's rotation with ALT+R. Also erase the "Parent Inverse": ALT+P. The best method is to 'parent' an unrotated Child to the path with the command SHIFT-CTRL+P: "Make parent without inverse". Now the Child jumps directly to the path and the Child points in the right direction.

3D paths also get an extra value for each vertex: the 'tilt'. This can be used to specify an axis rotation. Use TKEY in EditMode to change the tilt of selected vertices in EditMode, e.g. to have a Child move around as if it were on a rollercoaster.

[subsection]Object Tracking

In Blender, Objects can be given a rotation constraint so that they always refer to a "Track" Object. Activate the option in the 3DWindow with CTRL+T: "Make Track". All selected Objects now refer to the active Object. Since Objects can also have their own rotation, this rotation van better be erased first: ALT+R. If the Object is a Child, erase the "Parent Inverse" also: ALT+P. Then use the tracking buttons again to specify the desired tracking effect.

The tracking constraint is the 'odd man out' in the hierarchy. Parent rotations and the rotation of the Object itself can affect tracking. The option EditButtons->PowerTrack can be used to ignore the Object and Parent rotations. Tracking is often used with Cameras to make sure that the main subject is always visible. The disadvantage of tracking is that it occurs perfectly. The object being followed always appears in the centre of the picture, making it appear to stand almost completely still. Use of manually inserted Object Ipos in Cameras gives a more natural effect. Carefully chosen camera positions and subtle camera movements can have a significant impact on the power of an animation.

[subsection]Duplicators

Blender can automatically generate Objects without actually duplicating them. This places a 'virtual' copy of the Object on each specified frame of an animation system. It is also possible to have a virtual copy placed on each vertex (or particle). These options can be specified in the AnimButtons.

The first option is called "DupliFrames". Whatever type of movement the Object has, i.e. with its own Object Ipos or along a Curve path, a temporary copy of the Object is created for each frame, from "DupSta" to "DupEnd". During the specified frame interval, the "DupliFrames" system is created. The automatically generated Objects are displayed in a light grey wireframe.

The second option is "DupliVerts". This option works only for Mesh Objects, but such a system can duplicate all other Object types. A copy of the Child Object is placed on each vertex of the Mesh. The option also works for Meshes that emit Particles. A copy is placed on each Particle. With the option DupliVerts Rot, the duplicated Objects also can obtain the rotation of the Particles.

The command CTRL-SHIFT+A ("Make Dupli's Real") makes the generated Objects real. This tool is very useful when modeling.

[subsection]Ika and Skeletons

  [images/IKASpider.tga]

The methods that can be used to build stable Ikas and Skeletons were handled in the previous section.

Ikas can be put in motion with hierarchies. By parenting the 'Effectors' to another Object, hand movements and foot steps can be defined quite easily. In the illustration above, Effectors on the legs have been parented to the Emptys.

An alternative is to 'key frame' the Effector itself. Three channels are available in the standard Object Ipo for this: EffX, EffY, EffZ. The IKEY ("Insert Key") menu also offers this option.

The way in which the Ika is currently implemented makes it possible to effectively control individual movements and timing, but it is very important that the global animation system is clear in advance in terms of precisely where it is located and how the rotation will be.

[subsection]Particles

Particles are halos (or Objects if the option "DupliVerts" is ON) that are generated based on the laws of nature. Particles can be used to create smoke, fire, explosions, a fountain, fireworks or a school of fish. A Particle system is precalculated as a pre-process (it can sometimes take a while), after which it can be viewed in the 3Dwindow in real-time. Particles are drawn as small black pixels. Blender does not separately calculate and remember the locations of all of the particles in each frame for the particle system. Instead, interpolation occurs between a fixed number of key positions. A larger number of keys gives a more fluid, detailed movement, but also significantly increases the amount of memory used and the time required to calculate the system.

Particles are a full-fledged part of Blender's animation system. They can also be deflected and controlled by Lattices. Only Meshes can have Particles. Use the AnimButtons to add an "Effect" of the type "Particle". Then specify the desired settings:

Next, a Halo Material must be added to the Mesh. Any of the possible halos can be Particles. See also the description of the Halo MaterialButtons.

Material Ipos can be used to completely change the colour, intensity or size of Particles during their life span. By default, the Ipo time interval of 0-100 visualises the entire life of a Particle.

Blender does not offer presets for 'smoke', 'fire' or 'explosions'. The Particle system is flexible and interactive enough to master the fine points with a little practice. A number of tips are given below:

(Static Particles-cw-)

-cw- Last modified: Wed Aug 16 11:10:08 CEST 2000 /* */