1. 3D & Motion Graphics

Building A Complete Human Facial Rig In Maya, Part 1

Scroll to top
13 min read

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:

  1. Building A Complete Human Facial Rig In Maya, Part 1
  2. Building A Complete Human Facial Rig In Maya, Part 2
  3. 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!

Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new 3D & Motion Graphics tutorials. Never miss out on learning about the next big thing.
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.