Facial rigging is an art of its own. For every character there’s a different set of requirements, thus the approach can be different from character to character.
Analyzing the character
A few things I had to consider when making the facial rig for Ben:
his eyes are non spherical, oval shaped. Eyes will need to rotate and look around on that oval shape.
he has no chin. Mouth will need to open appropriately.
no neck. Considerations will be needed for head rotations and deformations.
There are many ways to approach the facial rigging, but most fall into three categories: bone based, blend shape based or a combination of both. I have used bone based a lot in the past but it has a lot of limitations when making the fine detail deformations of the face. In Houdini there can be a lot of control with custom made deformers which is why I used blend shape based system. It allowed me to split the face rig into smaller manageable systems and get the desired shapes faster and easier.
Simplicity vs Complexity
Before I began I decided which shapes I will need for the character. Certain micro detail controls were omitted because the character will not need them in the film and I try to avoid creating controls just for the sake of having them all.
But a typical set of controls are there:
lids, eyes, squints
Most of these have broad and detail controls. For instance the broad brow control manipulates the whole brow but the detail controls will deform the inner, center and outer brow separately.
The controls also work in unison or as combination shapes. This means when the left and right brow come together they create a different shape between them (wrinkle for instance) or when the lips compress they create volume. So the way the rig is setup is that the final blend shape is set by taking in account multiple controls and their values together instead of each one individually.
The whole system is also setup so that it can be scaled and corrected easily. If a new control or shape is required it is easy to add to the rig. Editing existing shapes should also be easy. This is especially nice in Houdini with procedural approach, so going back and correct a shape here and there is simple.
Using Houdini VEX for custom deformers
In part I I have already written about using custom VEX deformers in Houdini (dropoff deformer) but when it comes to facial rigging I use them more and more. For instance I used dropoff deformer for cheek blow shape. It’s great because with just one deformer it’s easy to get any desired blow shape. With blend shapes this is very hard because one blend shape gives just one shape. A deformer that can be moved around can be much more versatile.
For most shapes a simple rotation or translation deformer is enough to create a certain shape (up-down, left-right, twist), but for things like mouth corner which needs to move on a path I wrote a ‘curve path’ deformer. So when he smiles, his mouth corner moves on a path provided by a curve which is based on the curvature of his face. If doing this the traditional way of sculpting blend shapes, there would be a need for a lot of inbetween shapes to achieve a curve like motion of the geometry. With deformers it’s done in one take and there’s no need for inbetween shapes. Also it takes into account vertical and normal movement based on where on curve the current point is (so up down, in out movement are based on the current curve position instead of predefined blend shape).
I also used VEX to create mirror blend shapes. So whenever I am making or correcting shapes for left side it is instantly doing the same for the right side blend shape. This saves a lot of time and it’s easy to setup.
VEX is very fast. Complex deformers can be written to work in real time. I use VEX more and more simply because it’s easy to reuse and is quickly adapted for different scenarios.
Non spherical eyes cause some extra rigging steps to take into account. Also if the head deforms (bends, twists…), then the eyes have to take that deformation into account as well. The eye problem was solved by first rotating and aiming it into appropriate direction as a sphere. After the rotation a lattice deformation is applied to create the desired oval shape and finally any deformation made to the face is applied to the shape of the eye.
This way the eye rotates independently from the head, retains its oval shape when rotating and also deforms together with the head.
For a full tutorial how to create a stretchy eye setup check the previous blog post.
Since he has no visible chin, the jaw opens a bit differently. Instead of rotating, it mostly translates down and some rotation is applied. I found this works better for this type of character.
As I wrote in part I, to solve the neck issue I made a few different controls to have a smooth transition when rotating the head. Neck rotates the whole head, the head control rotates the head independent from the body but also has a few deformers to achieve a better shape. Bend, twist and stretch were added to his whole head. This way when the twist is added to the head his body stays the same, so his upper head is twisted while the chin still faces the same direction as body. This gives the effect of rotation while still having the feel of a nice rotational transition from the body. It has to be done in a subtle manner of course because he can easily look like a rubber puppet.
Invisible rigs & Character picker GUI
As for the body I created the invisible rig and character GUI for picking controls faster. When it comes to face there are a lot of controls, sometimes one very near another so it’s hard to pick them. Invisible rigs and GUI makes things a lot easier. Besides having to see the character’s face without control overlay makes things much easier and nicer to animate.
When working on ‘A is for Al….’ I added all bells and whistles into the facial rig. This ended up in a slower rig. For this character I took all that into account and build it a bit differently. This meant isolatation of deformations whenever possible so the calculations are fast and using VEX when possible instead of complex network of not so fast nodes. If the blend shape moved in a linear way it was cached instead of being a ‘live deformer’ which constantly re-evaluates.
A slow face rig can be as troublesome as a rig with insufficient controls so it is good to take some time to properly optimize it.
The character rig is done so I am off to props and environment modeling!