Building A Complete Human Facial Rig In Maya, Part 3
In the third and final part of Soni Kumari's exceptional facial rigging tutorial for Maya, we'll pick up from where we left off in part two and finish building the character's facial GUI (graphic user interface.) At the end of this chapter you'll have a fully functional facial rig capable of a robust set of expressions and a easy to use interface, allowing you to animate with ease.
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
Let’s start Maya and open the Morph Completed.mb file which was saved in the previous part of the tutorial. In this last part of the tutorial, we will create the Face GUI controls.
To create more controls for facial expressions, select the Face_GUI curve and duplicate it. Select the duplicated curve and then Scale it down and place it where the arrow indicates.
Now, again make a copy of this curve and place it on the right side. Both copied curve shapes should look like the eyes. These will be later used as controls for the eye blinks.
Now, rename these duplicated curves as Left_Eye_Curve and Right_Eye_Curve, and also Delete History and Freeze Transform.
Now jump into the Front view to see and place the curves properly. Once again, select the Face_GUI curve, duplicate it and place it in the mouth location. Rename it as Mouth_Curve and again Delete History and apply the Freeze Transform command.
You can always change the color of the controls to easily identify them, as we did in the second part of the tutorial. It looks better and makes you comfortable too.
Now we need something which will control the deformation of these curves. So we will make several small circles which will control the deformation of the curves individually. So draw a small Circle in the Front view, as shown in the image below.
Now, to align the small circle, select it (Z Axis selected), press and hold down the C key and then drag the middle mouse button onto the Face_GUI. The Small circle is now snapped to the Face_GUI.
Now jump into the Front view, duplicate the small circle (3 times) and place them all as shown in the image below. Rename the two upper two circles as L_ Eyeblink and R_Eyeblink, and the lower circles as L_Smile1 and R_Smile1.
Again duplicate the circle one more time to drive the sadness control. Keep it positioned in the center of mouth and rename it as Mouth_Updown. Now select both the L_Smile1 and R_Smile1 and then press Shift+ P for parenting.
Now let’s duplicate the small circle one more time to control the mouth's opening action, and place it in the center of the lower lip as indicated by the arrow below, and also rename it as Open_Mouth_Control. Finally select all the curves and do a Delete History and Freeze Transform.
Now, we will create controls for the frowning action. So in the Front view draw a Curve line as shown in the image below.
Now, jump into the Perspective view. You can see the new curve's pivot point is at the coordinates 0, 0, 0, so we have to place the pivot transform gizmo at the center of the curve.
To place the pivot point at the center of the curve, click on the Modify menu and then select the Center Pivot command. You will notice now the pivot point jumps to the center of the curve.
With the curve line selected in Move mode, click on the Z axis to constraint it and then press and hold down the C key and drag the middle mouse button onto the Face_GUI curve to snap it.
Now, jump into the Front view, duplicate the small circle curve twice and position them at the either side of the frown curve as shown in the image below. And rename these curves as L_Eyebrow and R_Eyebrow.
Duplicate the small circle once again. Scale it and place it in the center of the frown curve and rename it as SurpriseAnger. Select all the newly created curves and do a Delete History and Freeze Transformation.
For parenting all the control curves, select them all and then while pressing the Shift key, first select the Face_GUI curve then press the P key.
If you want to change the display color of the controllers you can do so for your comfort.
Now, we will create clusters for the internal connections of the controllers. So first select the Mouth_deformer curve and press the F8 key to jump into vertex components mode.
Select the two corner vertices and click on the Create Deformer menu and then select the Cluster options box.
This opens the Cluster Options box. Here check on the Relative mode and then click on the Create button to create the cluster.
Do same thing with left side vertices and create a cluster for them too.
A tip for making clusters:- Clusters are very useful, but always determine first which vertices need a cluster for shape deformation.
Again select the bottom three vertices of the mouth shape and create a cluster.
Now to apply constraints, we need to align the cluster pivot center of the controller.
Now, first select the L_Smile1 curve, then click on the Display main menu and select Transform Display, and click on Rotate Pivots. You will see a point icon in the center of the selected circle.
Again select the Cluster and hold down the D key followed by the V key and middle mouse button drag on the point icon of the circle.
Now first select the L_Smile1 curve, then select the cluster and click on the Constrain menu and select the Point command to apply a point constraint to the cluster.
For checking purposes, drag the control upward and see the deformation of mouth curve. Once satisfied, click on Undo to reset.
Now do the same for the opposite side. First select the R_Smile1 curve, click on the Display main menu, select Transform Display, and then click on Rotate Pivots.
For snapping, select the cluster and hold down the D key followed by the V key and then click and drag the middle mouse button onto the point icon of the circle. Also select the R_Smile1 curve, then go to and click on the Constrain menu and select the Point command to apply the point constraint to the cluster (as shown in step 30 and 31.)
For applying point constraints, apply the same treatment to all the clusters. And we are now done with the Open_Mouth_Control.
After snapping each and every cluster's pivot point, you can hide the Rotate Pivot icons. For that go to Display> Transform Display and then select Rotate Pivots. This option is used for both hiding and displaying the Pivot point icons.
Now, let’s create the cluster for the left eye blink shape. So select the three upper vertices in component mode by pressing the F8 key.
With the vertices selected, click on the Create Deformers menu and select the Cluster command. Just like this, create the cluster for the right eye too.
Now, we have created clusters for both eye deformer shapes. Now we will snap the clusters pivot points and also apply the point constraints.
After applying point constraints, drag them down to check the connections. Once satisfied, do an undo and hide the circle’s pivot points.
Now let’s create three more clusters for the three controllers on the eyebrow curve.
And also snap and align the cluster pivot points to their related control circles.
Finally apply point constraints to all the clusters.
Next, we will parent all the clusters with the Face_GUI curve so that they all can move together with It. For now if you drag and move the Face_GUI curve, you'll notice all the clusters and created curves deform wrongly here and there.
So to fix this problem, first undo the last movement and then select any one of the clusters. Then while pressing the Shift key, select the Face_GUI curve and press the P key. When you press P, you'll see a warning display in the command (// Warning: clusters were grouped to preserve position). Simply ignore it and do the same with all the clusters one by one.
After doing the parenting, drag and move the Face_GUI curve now. This time all the curves move along with the Face_GUI curve properly.
Now this is the time to connect all the Blend shapes with the respective controllers. To make it comfortable, first open the Set Driven Key settings box.
Let’s open the Blend Shape window too. Click on Window> Animation Editors and then select the Blend Shape option.
In the Blend shape control window, click on the Select button to load the blends into the channel box. It is necessary for loading in the set driven key for loading the Driven key. After loading the Blend shapes in the channel, close or minimize it.
With the FaceMorphGroup selected in the Channel Box, click on the Load Driven key button to load the FaceMorphGroup in the Driven Group.
Next, select the L_Smile1 control curve, and then click on the Load Driver button to add it in the Driver group.
First select Translate Y in the Driver group, then select L_ Smile in the Driven group and then click on Key, to add the initial key.
Again select L_Smile in the Driven group and then in the Channel Box, put the value 3 in Translate Y field.
Again select the FaceMorphGroup in the Driven group and enter a value of 1 in the L_Smile box, then click on the Key button in the Set Driven Key box.
Next, select the R_Smile1 control curve and then click on the Load Driver button to add it in the Driver group.
Now, select Translate Y in the Driver group, and R_Smile in the Driven group and then click on the Key button for the initial key.
Now select Translate Y in the Driver group, and enter a value of 3 in the Channel Box of the same.
Now, select the FaceMorphGroup in the Driven group and enter a value of 1 for R_Smile in the Channel Box. Then click on the Key button to add the final key.
For connecting the other controls, select the Mouth_Updown curve and then load it in the Driver group. Select Translate Y in the Driver group and then select both Upper_Mouth_open, and the Lower_Mouth_open in the Driven group. Then press the Key button for the initial key.
This time we are connecting both up and down with one control, so first select Mouth_Updown in the Driver group and enter a value of 1 for Translate Y in the Channel Box.
Again for the secondary key, click on FaceMorphGroup in the Driven group, then enter a value of 1 in the Channel Box for Upper_Mouth_open, and then press the Key button.
Now, select Mouth_Updown in the Driver group and then enter a value of -1 for Translate Y. A negative value (-1) is used to close the mouth.
Now, first select the FaceMorphGroup, then select Lower_Mouth_open and enter a value of 1 for Lower_Mouth_open in the Channel Box, and click on the Key button.
Next, we are going to connect the Open_Mouth_Control with the connection editor. So with the Open_Mouth_Control selected, click on Window > General Editors and open the Connection Editor.
After opening the Connection Editor, select the Head_Control and click on the Reload Right button. Then connect the Open_Mouth_Control Translate X to Head_Control JawY, and Open_Mouth_Control Translate Y to Head_Control Jaw Z. Now, close the Connection Editor window.
For checking the controls, drag them and you will see the result on the character face. Once checked, do an Undo to return to the initial positions of the controllers.
Next, maximize the Set driven key box, select L_Eyeblink and click on Load Driver, to load it in the Driver group. Then select L_Eye_Blink and click on the Key button for the initial key.
Now, click on L_Eyeblink in the Driver group and enter a value of -3 for Translate Y in the Channel Box.
Select the FaceMorphGroup in the Driven group, then select L_EyeBlink and enter a value of 1 in the box. And then click on the Key button
Now, do same with the right eye blink control. So load R_Eyeblink first as the Driver, then select Translate Y and then select R_Eye_Blink in the Driven group and click on key the button for the initial key.
Again for the secondary key, repeat Steps 64 & 65. Click on R_Eyeblink in the Driver group and enter a value of -3 for Translate Y in the Channel Box. Then select the FaceMorphGroup in the Driven group, also select R_EyeBlink and enter a value of 1 in the box. And then click on the Key button.
Next, first select the L_Eyebrow curve control, then Translate Y , then select L_Frown_Up in the FaceMorphGroup Driven group, and finally click on the Key button to add the initial key.
Now, click on L_Eyebrow in the Driver group and enter a value of 3 in the Translate Y box.
With the FaceMorphGroup selected in the Driven group, enter a value of 1 in the L_Frown_Up box and click on the Key button.
Do the same for the R_EyeBlink curve control, as we did for L_EyeBlink. This time we have to create a set driven key with the R_Frown_Up morph.
Next, select the SurpriseAnger curve control. Load it as the Driver and then select Translate Y and select both Surprise and Anger in the driven group, and then click on the Key button for the initial key.
Now first select SurpriseAnger in the Driven group and enter a value of 3 in Translate Y. Then enter a Surprise value of 1, and click on the Key button.
Like in the previous steps, first select SurpriseAnger and enter a value of -3 in Translate Y. Then select Anger and enter a value of 1 and click on the Key button. (In the image, the arrow has overlapped the value of the Anger channel. So please take care of it. The value is 1 there.)
After finishing all the connections with the controllers, close the Set Driven Key window. And also check all connected controllers for the face. Now select all the controls in the viewport and select Translate Z, Rotate (XYZ), Scale (XYZ) in the Channel Box, and Right-click and select "Lock and Hide Selected" in the list. This is done because no move, rotate or scale is needed in these controllers attributes now.
Now one important thing is to fix the movement of all controllers. So select the L_Smile1 Curve control and press Ctrl+A key to open the Attribute Editor. In the Attribute editor, click on “Limit Information”, and then select “Translate”.
Now, enter a value of 0 in the Trans Limit Y Min field, and enter a value of 3 in the Trans Limit Y Max field, and also turn them ON too.
And also fix the rest X and Z Trans Limit Min & Max values, with a 0 value as shown in the image below.
Just like this, fix the transformations (Move, Rotate, Scale) of all the controllers as per requirement.
Select all the clusters and add them into a Clusters layer to hide. Then finally check all controls and make the desired face expressions and enjoy the facial animation.
Finally save the file as "Face Rigged character.mb". I hope you have enjoyed this tutorial!