Constraints are an unavoidable part of animation. They allow us to temporarily bind one object to another through position, rotation, scale, and most any other property.

This last part isn't an example of how the system works so much as an example of a way to make it more usable. All that's been done in the image below is the order of the objects within the robot's hierarchy tree have been rearranged to move the null objects to the top. Since those are the objects we rotate during animation we have them all in one place while all the visual objects remain below, untouched, and unmodified. This makes it easier when animating because your eyes don't have to scan over the entire list of objects to find the ones you actually want to rotate.

You can even link the position and rotation of the null objects being animated to so called "controllers" which are non-renderable "handles" outside the model. These make it so you don't even have to look inside the object tree to find the null object you wish to rotate. Those, along with skeletal animations, are discussed in the oncoming sections.


Controllers can actually be thought of as a kind of constraint. But whereas a basic constraint will simply prevent a particular property, like position or roation, from changing a controller can actually force that change based on a particular input.

Solvers & Kinematics

A "solver" is any tool or modifier that not only constrains the movement of your bones but will position them automatically based on the movement of other controllers and bones. This, for instance, allows you to move a target, as you would with a controller, but instead of moving bones directly proportional to your controller movement the solver might correct an entire chain of bones to curve as needed. A visual representation will explain this better.

Notice two things about the interactive example below;

  1. The middle point(s) move on their own as you adjust the end of the bone chain.
  2. The middle point(s) always curve to the same direction, you can't get them to bend in the opposite direction.

As you can guess this is extremely useful for limbs on characters such as arms and legs. If you've tried to animate a character entirely by hand, where you have to reposition the ends of a chain link after moving the main center of mass, you'll realize what a helpful thing this is. Instead of moving the body, then moving the end of a limb to match it's former position (such as a foot), you'll just be able to move the body while the limb end stays pointed towards the position it was in before you moved the main body.

Morphs This one's for you!

A "morph" is a kind of catch all phrase for animation that utilizes two or more nearly-identical meshes as targets to change point and polygon positions by.

In other words we can model a human face in a very neutral pose without any expression, copy the model, add facial expression to the copy by moving individual points and polygons, and then use a morph effect to animate the face changing from the neutral expression to the modified expression smoothly.

In this case the neutral expression is our "reference" mesh and the second model with a more expressive face is what is known as a "target morph".

Nearly all morph objects will require that you have the same number of points / polygons in the morph targets as in the reference mesh. This is because morphs work by moving individual points

The benefits of morphs are fairly obvious.

  • Unlike bones you can create animation with finer movement over the surface since you are in control of the position of actual points and polygons themselves. This means, in the example of a face, it may be easier to add small details like multiple wrinkles and muscle movement than with a skeletal setup where you would need hundreds of skeletal bones in the face to make such changes.

But of course they have their drawbacks as well.

  • If you want to make any modification to the model that involves changing either the number of points in the model or even the *order* of the points in the model's point list then you may need to remake the target morphs as well since they will no longer match the reference mesh.