Digital Tutors: Joint-Based Facial Rigging in Maya
If you need a really good rig for your character’s face, you should check out this tutorial by Tim Callaway! The process consist of building the curves, joints and some blendshapes to control the deformations on the face, which can be summarized as below:
1) Start by making the surface live and drawing 3-cubic NURBS curves at the eyebrow, eyelids, upper cheek (below eyelid), side of nose (C shape), lower cheek (nearer to jaw), crease, upperlip, lowerlip. These should follow the topology/muscle anatomy.
2) Create locators at the center and ends of the curves by using the attach motion path method and changing the U value to 0, 0.5 and 1 respectively. Locators will now follow the CVs nicely. Break the rotation connections of the locators to prevent weird deformation later on.
3) Except for the mouth, create 2 joints directly under each locator, parent one under the other and name it the control joint. Parent -r -s a NURBS sphere (or whatever you fancy as the controller) under the child joint to be able to easily grab the joint. For the mouth, use 5 locators/controllers.
4) Make sure you do your neck, head and jaw joints too!
5) Make the general head controller that parent constraints the entire rig, a jaw controller with limits to control the movement of the jaw. Now the hierarchy should be neck-head-jaw/facial joints.
6) Skin the neck, head and facial child joints (which are easily selected by only making NURBS surfaces visible since we have a controller for each) to the mesh, using POST weight method. Start painting the weights.
7) The main power of the rig is the blend shapes for the curves, which will allow us to make facial expressions by shaping the curves. We do that by duplicating the curves and connecting the blend values to the controllers via expressions. An example is the jaw open controller where we can further improve the opened mouth by making it rounder with the mouth curves using blend shapes. We shape the curves simply with their CVs.
8) In our expressions for the controllers, we might have to add the clamp function in order to limit the values between 0 and 1.
9) The process of customizing the controllers involves both shaping the curves as well as painting weights, where weights are sometimes taken away from the head joint in order to give more control of the deformation to the specific joint. This is particularly important in the blink controls.
10) Major controls are jaw/mouth open, inner brow up/down/squeeze, brows up/down, upper eyelid shut, lower eyelid shut, upper/lower lip left/right smile/frown, upper/lower lip left/right pucker.
11) For the teeth, create a joint for the upper teeth as well as the lower teeth. Then parent a child joint under these joints and parent -r -s a curve controller to the child. Skin the child joint to the teeth respectively. The upper teeth control is parented to the head while the lower one, the jaw.
12) The tongue can use a 3 joint (with child) chain with controllers. Skin the jaw and these control joints to the tongue. The jaw will influence the starting edges on the very inside of the tongue. The tongue controls will be parented under jaw control.
13) The eyes firstly needs a proper pivot point which can be tested by rotating a duplicated eyeball. Parent constrain without offset a joint to this eyeball and delete the eyeball. Duplicate a child joint and move it straight out. Get a main controller, left and right eye controller (NURBS curves). Create an IKSC solver for the eye joint chain. Point constrain the ikhandle to the child controller so it moves the ik as well. Note that when we mirror the joints over, the ik gets duplicated too. Put the eye controls under the head control and skin it to the eyeballs.
14) To enhance the eye rig, we create a sculpt deformer that is parented under the eye joint so that when we move the eye controller, the eyelids get a soft deformation by the eyeball!
15) If we want to bind the rig to a high poly mesh, just select the influence joints and skin it, then copy skin weights over. If we want to add new controls like the throat control, we can add influence joints (while lock weights are turned on).