Building A Complete Human Facial Rig In Maya, Part 1

Today we’re kicking off a new two part tutorial that will teach you how to construct a complex, complete human facial rig in Maya. This tutorial is a companion piece to author Soni Kumari's previous premium series covering the creation of a complete human character rig.
Building a face rig suitable for animation is one of the more challenging aspects of character creation, this series will walk you through the entire process from start to finish and give you a detailed, in-depth lesson on what it takes to build a intuitive and animation friendly facial rig from scratch!
Also available in this series:
- Building A Complete Human Facial Rig In Maya, Part 1
- Building A Complete Human Facial Rig In Maya, Part 2
- Building A Complete Human Facial Rig In Maya, Part 3
Step 1
In the first part of the tutorial, we will learn how to setup a basic interface for facial rigging and also learn how to create joints and controls for a natural face deformation. Let’s start Maya and open the Face Rig Start.mb file which has been provided with the tutorial. When you open the file, you will notice this is a pre-built face model with temporary skin textures applied and looks more like a cartoon. Now before starting facial rigging, we first have to set up the interface so we can quickly reach the required tools.



Step 2
Now we will start making a custom shelf for easy access to the tools needed for rigging. Click on the ‘Shelf Modify’ arrow button at the sheer left side of the screen and then click on the ‘New Shelf’ command.



Step 3
This opens the ‘Create New Shelf’ dialog box. Enter the new shelf name as FaceRigTools, and then click on the OK button to close the dialog box.



Step 4
You will notice a new blank Shelf has been created in the menu with the name ‘FaceRigTools’. Now we will add commands to this menu for the face rig.



Step 5
If you are not already in Animation mode, then switch to Animation mode by clicking on mode menu command.



Step 6
To add commands into the Shelf menu, always hold down the Shift + Ctrl keys and click on the desired menu command which you want to add. So hold down Shift + Ctrl and click on the Edit menu, click on ‘Delete by Type’ and then click on the History command. Now you can see the result in the Shelf menu.



You can now see the History command in the shelf.



Step 7
Just like this, to insert the Freeze Transformation command, hold down Shift + Ctrl and click on the Modify menu and then click on the Freeze Transformations command.



Step 8
So this is how you create a custom shelf. We can add more commands as per requirement.



Step 9
Now let’s start making the face rig. So go to the Side view and click on Template mode (T) in the layer editor. This displays the face model as shown in the image below.



Step 10
Now, we have to create joints for the face mesh. So click on the Skeleton menu in the main menu bar, and then select the Joint Tool command.



Step 11
Start by creating three joints from the neck to the tip of the head. Also rename these as Neck_joint, Head_joint and HeadTip_joint using the Outliner.






Step 12
Again draw two more joints for the Jaw as shown in the figure below, and also rename them as Jaw_joint and JawTip_joint.



Step 13
Now, first select the Jaw_joint then select the Head_joint and press the P key. This makes the Jaw joint a the child of the Head joint (It should look like the image below.)



Step 14
To create controls, we have to use the IK Handle Tool. So click on the Skeleton menu and then click on the IK Handle Tool command.



Step 15
With the IK Handle Tool selected, first click on the Neck_joint and then click on the Head_joint. You will see the IK handle is now created. Also rename it as Head_IK.



Step 16
Now let’s create the Head control. For that go to the Create menu, NURBS Primitives and select Circle. And then drag to create a Circle on the grid.



Step 17
To align the Head control, zoom in and focus on the Head_joint. Select the Circle with the Move tool on (press the W key), press and hold the V key and drag the Middle Mouse button onto the Head_joint.



Step 18
Now let’s arrange the circle control properly. Rotate the circle a bit according to the image, and press the F8 key to convert it into component mode. Select all vertices and scale them accordingly (if needed.) Press F8 key again to return to Object mode.



Step 19
After positioning the circle curve, rename it as Head_Control.



Step 20
With the Head_Control selected, click on both the Delete History and Freeze Transformation commands one by one in the newly created FaceRigTool shelf.



Step 21
Now we will apply a Constraint. Select the Head_Control first and then Head_IK, and click on the Constrain menu and then select the Point command to apply a Point Constraint.



Step 22
Point constraints work with move transform only, not rotation. Here we need a constraint for rotation also. So again first select the Head_Control and then select the Head_joint, and click on the Constrain menu and select the Orient constraint options box.



Step 23
In the Orient Constraint Options box, check on the Maintain offset option and then click on the Add button to apply and close the Orient Constrain Options box.



Step 24
Now you can check the rotation of the Head control using the Rotate tool. It works fine. So reset the transform value with the undo command.



Step 25
Now we will create a locator for global head control. So click on the Create menu and select the Locator command to create the locator.



Step 26
Snap the locator to the Neck_joint while pressing and holding the V key. Rename the locator as Global_Head_Control. Also don’t forget to apply the Freeze Transformation and Delete History Commands on the Global_Head_Control.



Step 27
Select the Global_Head_Control and then select Neck_joint and apply a Parent Constraint.



Step 28
Again select the Head_Control first and then select the Global_Head_Control and press the P key, to make the Global_Head_Control the parent.



Step 29
Create one more Circle curve in the front view and place it as shown in the image below.



Step 30
You can change the circle curve into Component mode to deform it accordingly. Don’t forget to change it back into Object mode once you are done!



Step 31
Again jump into the Front view and duplicate the curve twice and arrange them as shown in the image below.



Step 32
Then jump into the Perspective view, and select all the newly created curves and apply both the Delete History and Freeze Transformation commands.



Step 33
Rename the curves now. Rename the bigger circle as Both_Eyes_Control, and the small curves as L_Eye_Control and R_Eye_Control.



Step 34
First select L_Eye_Control & R_Eye_Control and then select Both_Eyes_Control and press the P key. The bigger curve (Both_Eyes_Control) now becomes the parent of both the left and right eye controls.



Step 35
Now, we'll do some special parenting for the parts inside the mouth and eyes. Make sure that the Face Mesh layer is in hidden mode. The TeethTongueEye should be visible and in selective mode.



Step 36
Now, first select both eye balls and while pressing and holding the Shift key, select the Head_joint. Then press the P key to make the Head joint the parent. This means wherever the Head joint moves, the eye balls will follow.



Step 37
This time with the upper teeth and inner throat parts selected. Hold Shift and select the Head_joint again, and press the P key. Now The Head joint becomes the parent of these parts too.



Step 38
It's always good to keep the objects in wireframe mode for easy selection purposes. Now for the parenting of the Lower teeth object. First select the lower teeth object mesh, then select the JawTip_joint, finally press the P key.



Step 39
Again change back to "Smooth Shade All" mode. Now first select the L_Eye_Control, and then select the left eye ball.



Step 40
With the L_Eye_Control and left eye ball selected. Go to the Constrain menu, and click on the Aim command options box.



Step 41
In the Aim constraint options setting box, check on the Maintain offset option and then click on the Add button, to apply the Aim constraint.



Step 42
Now apply the same Aim constraint for the right side control as well. Select the R_Eye_Control, then select the right eye ball and apply the Aim constraint.



Step 43
Now first select Head_joint, and then select Both_Eyes_Controls and then apply the Patent Constraint.



Step 44
Now we have to make one custom Attribute to lock and unlock the Both_Eyes_Control. So with the Head_Control selected, go to the Modify menu and click on Add Attribute to open the Add Attribute settings box. If you want to use the Add Attribute command frequently, you can keep this command in the Shelf.



Step 45
In the Add Attribute settings box, write LockEyesControl as the attribute name in the Long name box. Put the values as follows: Minimum 0, Maximum 1 and Default 0. Finally click on the OK button.



Step 46
Now you can see the LockEyesControl attribute under the Head_Control channel. And also open the Outliner window for the selection of the constrain group which is applied.



Step 47
Open the Set Driven Key dialog by pressing the Set button in the Shelf tab. With the Head_Control selected, click on the Load Driver button in the Set Driven Key settings box.



Step 48
Now, in the Outliner window, select Both_Eyes_Control_parentConstraint1, and then click on the Load Driven button in the Set Driven Key settings box. You will notice Both_Eyes_Control_parentConstraint1 is now selected in the Driven group.



Step 49
Select LockEyesControl in the Driver group, and select Head joint W0 in the Driven group. Then click on the Key button for initial driven key.



Step 50
Now select Head_Control in the opened set driven key box, and enter a value of 1 for the LockEyesControl attribute in the channel box.



Step 51
Again select Both_Eyes_Control_parentConstraint1 in the Driven group, and then enter a value of 0 in the Head joint W0 fill box. Then click on the Key button in the Set Driven Key box.



Step 52
Now, we'll create joints for the tongue mesh object. Jump into the side view and turn on the template (T) mode of the TeathTongueEye layer.



Step 53
With the Joint tool selected, start by creating 5 joints in sequence inside the tongue mesh object, as shown in the image below.



Step 54
Also rename all the created joints for the tongue as: Tongue_joint1, Tongue_joint2, Tongue_joint3, Tongue_joint4 and Tongue_jointTip.



Step 55
Now, Select Tongue_joint1, then select the Jaw_joint and press the P key for parenting.



Step 56
Click on Skeleton menu and then the IK Spline Handle Tool.



Step 57
With the IK Spline Handle Tool selected, first click on Tongue_joint1, and then select Tongue_jointTip. You’ll see the Spline Ik handle is applied to the joints.



Step 58
Zoom in properly to see the Spline Ik curve inside the joints, and select it.



Step 59
With the Spline ik curve selected, jump into Surface mode and then go to Edit Curves > Selection. Finally click on the Cluster Curve command.



Step 60
Rename all Clusters as: cluster_Tongue1, cluster_Tongue2, cluster_Tongue3, and cluster_Tongue4.



Step 61
Now to apply Smooth Skin to the tongue mesh and the tongue joints, first keep the TeethTongueEye layer as normal, then switch on Wireframe mode and first select the Tongue mesh, and then select Tongue_joint1.



Step 62
With both the tongue mesh and Tongue_joint1 selected. Switch the application to Animation mode and then click on Skin > Bind Skin, and select the Smooth Bind command.



Step 63
Open the Outliner window and select cluster_Tongue1, then select the Jaw_joint and press the P key.



Step 64
Select cluster_Tongue2, and then select the Jaw joint and press the P key. Do same thing with the rest of the clusters and apply parenting to them as well.



Step 65
After parenting all the tongue clusters, switch to "smooth shade mode". With the Rotate tool selected, rotate the Head_Control to test whether all the linking has been done properly or not.



Step 66
Now, select the tongue mesh object. And in the panel menu, click on Show, then select Isolate Selection and check on the View Selected command, to view only the selected object. This way you have only the tongue mesh object visible in the viewport.



Step 67
With the tongue mesh object selected, click on Skin > Edit Smooth Skin and then select the Paint Skin Weights Tool.



Step 68
In the Paint Skin Weights Tool, select the Tongue_joint1 and click on the Add radio button. While keeping the Opacity and Value settings set to 1, drag the brush on the tongue mesh as shown in the image. You will have to paint the weights properly.



Step 69
Do same thing with the rest of the tongue joints also.



Step 70
Now let’s check the clusters. Select each cluster and move it. It should behave like a tongue. Once you've checked tem, go into "smooth shaded mode". Next we will add the attribute control for the Jaw.



Step 71
Select the Head_Control again to add Attributes. And open the Add Attribute box from the Shelf. In the Add Attribute settings box. Enter JawX for the Long name, and click on the Add button. Similarly add two more JawY and JawZ Attributes.



Step 72
You can now see these three Attributes listed under the Head_Control.



Step 73
Now, for connecting the Attributes and Jaw joint rotation. Select the Head_Control, then go to Window > General Editors and select the Connection Editor.



Step 74
Select the Jaw_joint and click on Reload Right. Slide down and fix the rotation for both sides. First select JawX (left side) then select rotateX (right side). Do same connection for both JawY to rotateY, and JawZ to rotateZ. Finally close the Connection Editor.



Step 75
Let’s connect the JawTip joint with the inside jaw mesh object. So with the inside jaw mesh object selected, press the F8 key to keep it in components mode. And select the lower vertices as shown in image below.



Step 76
With the vertices selected, go to the Create Deformers menu and select the Cluster command (to apply a cluster to the selected Vertices.) Again press the F8 key to return to object mode.



Step 77
For parenting, first select the newly created cluster and then open the Attribute Editor by pressing Ctrl+A. Under the Cluster Attributes rollout, check on the Relative option button.



Step 78
Now with the cluster selected, hold down the D and V keys and snap the pivot to the JawTip_joint.



Step 79
Again with the cluster selected, press Ctrl+G to make a group of the selected objects, and rename it as GumclusterGrp.



Step 80
Now, with the GumclusterGrp and Head_joint selected, press P to parent.



Step 81
Now first select the JawTip_joint and then select the Cluster, and go to the Constrain > Point Constrain.



Step 82
Finally check all the connectivity of the controllers we've created. So first switch the view to shaded mode, then select the Head_control and rotate and change the values of created attributes (this is for checking purposes only.) Once checked, reset all the controls to get back to the initial position. And save the file as "Complete Jaw control.mb."



And that completes part 1!