Character Rigging In Maya

The Head Control

Create a Nurbs Circle, and then Scale it to 4.5 in the X, Y and Z channels.  Snap it to the Head joint, then rename it to Head_Control, the freeze transformations and delete all history.  Change the wireframe colour to Green.  We'll only really be using the Rotate X, Y and Z for the Head, so lock the other channels, and then use the Channel Control to hide them.  The main reasoning behind using a Head_Control over standard joint rotation animation is this method can be used to eliminate the need to animate the counter movements of the head when moving the body. Thereby making it much faster to animate since it's something we don't need to worry about.  We're going to get a little complicated here, so make sure you follow the instructions as carefully as possible, open the Outliner, and find your Head joint, press CTRL + D to duplicate it, rename duplicated version to Head_Joint_Constraint, select the Head_Joint_Constraint and the Head_Joint, and then go to Constrain > Orient, select the Head_Joint_Constraint, and then the Head_Control, then press P to parent it and you can hide it if you wish, but not the Head_Control.  Select the Head_Control, then press CTRL + G to group it, press W to make sure your in MOVE mode, and then press the INSERT key to go into PIVOT mode, using Point Snapping, snap to the Head joint, press Insert again to come out of pivot mode, now rename the group to Head_Control_Group. Nearly there, select the Head_Control_Group, and duplicate it, then delete all the contents, so that you are only left with an empty group, rename this to Head_Control_Group_Constraint, now with Head_Control_Group_Constraint still selected, also select  Head_Control_Group and then go to Constrain > Point, now parent Head_Control_Group_Constraint to the Neck Joint.  Now, select your COG_Control and rotate it around, you'll notice that the Head joint always stays up over when moving left, right, forward and back.  And if you select the Head_Control, you'll notice that you also have seperate control of the head movements.  Select the Head_Control and add it to the Rig_Controls Layer.

Download the rig with the spine and head setup here : -

Character Rig Skeleton Setup With Spine Done - Maya 4.5 Only - Zip File (326kb)

Arms And Shoulders

We're now going to move onto the rigging for the character's arms and shoulders.  Let's start with the shoulders, but first, download the following Nurbs Control Shapes that we will use : -

Clavicle Nurbs Controllers - Maya 4.5 Only - Zip File (60kb)

Unpack them, import them into the Maya scene, and even though I have them placed, just to make sure, snap them to your Shoulder joints, and if they're not coloured, colour them accordingly : -

Select them both and add them to your Rig_Controls Layer.  Select the L_Clavicle_Control, then lock the channels for everything but Translate Y and Translate Z, and then use the Channel Control to make the locked one's non-keyable.  Do the same for the R_Clavicle_Control too.  Before we add full control of the shoulders / clavicle to the control objects, we'll set up our arms beforehand, lastly add them to the Rig_Controls Layer.  With the arms, I'm going to be using an IK Rig, a lot of people use a rig on the arms that can switch between FK and IK, in this case, I want to keep things fairly simple, so I'm just going to be using the IK setup.  Just like the knees we're going to use some elbow constraints, so download these objects first, import them into Maya, colour them as before, left and right colours, and add them to the Rig_Controls Layer, (note I've also colour coded the wireframe for the polygonal constraints too) : -

Elbow Constraint Objects - Maya 4.5 Only - Zip File (60kb)

From the menu, select Skeleton > IK Handle Tool, then select the Left_Shoulder joint and then the Left_Wrist joint, do the same on the other side, selecting Right_Shoulder and Right_Wrist joints.  Open the Outliner, select the ikHandle1 and rename it ikHandle_LWrist, and do the same for the ikHandle2 naming it ikHandle_RWrist, select them both and add them to the Skeleton_L Layer.  Then select the L_Elbow_PV_Constraint and then the ikHandle_LWrist and then go to Constrain > Pole Vector, and then do the same on the other side for R_Elbow_PV_Constraint and ikHandle_RWrist.  You'll notice that when you do this, the hands may offset themselves slightly out of sync with where they should be, so using any method you want, either by rotating the hand joint or using nurbs guide curves again, move them or snap them back into where you'd like them.  If you need to do this, don't forget to re-orient the joints using the script we used earlier too, I'd recommend starting from the clavicle joints on each side.  If your having problems doing this, you can download a scene here with this stage set up for you : -

Fixed Hand Scene - Maya 4.5 Only - Zip File (331kb)

Select both the ikHandle_LWrist and ikHandle_RWrist, Create a nurbs circle, rotate it 90 on the Z Axis, and Scale it 2 in X, Y and Z, rename it to L_Arm_Control, colour it accordingly for the left side and then snap it to the Left_Wrist joint.  Duplicate it, and then do the same for the other side, this time, rename it R_Arm_Control and snap to the Right_Wrist joint, colour accordingly.  Freeze Transformations and delete all History, and add them to Rig_Controls Layer.  Select the ikHandle_LWrist and then the L_Arm_Control and then P to Parent them, do the same on the right side for ikHandle_RWrist and the R_Arm_Control.  Select the L_Arm_Control, and Lock the Scale, Rotate And Visbility Channels, and then make them non-keyable using the Channel Control.  Do the same for the R_Arm_Control.  Select the L_Arm_Control and create a new Attribute called Elbow_Twist, do the same for the R_Arm_Control, call it Elbow_Twist as well.  Now in the connection editor, load L_Arm_Control in the left column, and in the right, load the ikHandle_LWrist, then connect the Elbow_Twist attribute to the Twist of the ikHandle_LWrist, again, do the same for the right side too.

Because we've added an Attribute to control the Twist, we won't be needing the elbow constraints displayed any more, so select them both, and press CTRL + H to Hide them or alternately, it's up to you, lock all channels, and make them non-keyable, which is what I've done.  

Let's return back to the shoulders, create a Locator, rename it LClavicle_Locator and snap it to the Left_Shoulder joint, add it to the Rig_Controls Layer, select the LClavicle_Locator and then the Left_Shoulder joint and then go to Constrain > Point.  Now, parent the locator to the L_Clavicle_Control, create another locator, name it RClavicle_Locator and repeat the same process again.  Then parent both L and R Clavicle_Control's to the COG_Control, just so they follow when rotating.

The Hands now, create a Nurbs Circle,  rotate it 90 on the Z Axis, and Scale it 1.3 in X, Y and Z, rename it to L_Hand_Control, colour it accordingly for the left side and then snap it to the Left_Wrist joint. Duplicate it, rename it R_Hand_Control and snap it to the Right_Wrist joint, colour accordingly, freeze transforms on both, delete all history, add them both to the Rig_Controls Layer.  Select the L_Arm_Control and Point Constrain it to the L_Hand_Control, do the same for the R_Arm_Control and the R_Hand_Control.  Select the L_Hand_Control and lock the channels for the Translate X, Y, Z Scale X, Y, Z and Visibility and then make them non-keyable, do the same for the R_Hand_Control.  Open the Connection Editor, Reload Left for the L_Hand_Control, Reload Right for the Left_Wrist Joint, connect the rotations : -

Do the same for the R_Hand_Control and Right_Wrist joint.  Now let's move onto the finger and thumb rigging.  We'll start by doing the Left Hand and then move onto the Right Hand.  

The Fingers

We're now going to add some extra attributes to the Left and Right Hand_Control objects that will allow us to animate our fingers and thumb for the character.  Select the L_Hand_Control, and add the following new attributes : -

Add these attributes first, but with no minimum and maximum values : -

Attribute Name                  Minimum          Maximum

Inner_Spread                    -25                    10
Inner_Curl_Base              -70                     5
Iner_Curl_Middle            -90                     10
Inner_Curl_Top                -70                     10

Index_Curl_Base              -70                     5
Index_Curl_Middle          -90                     10
Index_Curl_Top                -70                    10

Pinky_Spread                     -10                    25
Pinky_Curl_Base               -70                    5
Pinky_Curl_Middle           -90                    10
Pinky_Curl_Top                -70                     10

Thumb_Twist                   -45                      45
Thumb_Curl_Base          -10                      75
Thumb_Curl_Top            -10                      80

We now need to connect all these attributes via the connection editor, so open the editor up, and then Reload Left for the L_Hand_Control, we now have a number of things to connect up, so here's the list, just remember to reload right for each item : -

Inner_Spread                   Connected To      Left_Inner_Finger_A     ROTATE Z
Inner_Curl_Base            
Connected To     
Left_Inner_Finger_A     ROTATE X
Iner_Curl_Middle           
Connected To      Left_Inner_Finger_B    ROTATE X
Inner_Curl_Top               
Connected To      Left_Inner_Finger_C    ROTATE X

Index_Curl_Base             Connected To      Left_Index_Finger_A    ROTATE X
Index_Curl_Middle         
Connected To     
Left_Index_Finger_B    ROTATE X
Index_Curl_Top              
Connected To     
Left_Index_Finger_C    ROTATE X

Pinky_Spread                   Connected To      Left_Pinky_Finger_A    ROTATE Z
Pinky_Curl_Base            
Connected To     
Left_Pinky_Finger_A    ROTATE X
Pinky_Curl_Middle         
Connected To     
Left_Pinky_Finger_B    ROTATE X
Pinky_Curl_Top               
Connected To    
Left_Pinky_Finger_C    ROTATE X 

Thumb_Twist                    Connected To      Left_Thumb_A               ROTATE Y
Thumb_Curl_Base          
Connected To     
Left_Thumb_A               ROTATE X
Thumb_Curl_Top            
Connected To     
Left_Thumb_B               ROTATE Z

Now you're going to need to do the same for the R_Hand_Control, the values will change for the opposite side, so here's a list for the right side : -

Attribute Name                  Minimum          Maximum

Inner_Spread                    -10                    25
Inner_Curl_Base              -70                     5
Iner_Curl_Middle            -90                     10
Inner_Curl_Top                -70                     10

Index_Curl_Base              -70                     5
Index_Curl_Middle          -90                     10
Index_Curl_Top                -70                    10

Pinky_Spread                     -25                    10
Pinky_Curl_Base               -70                    5
Pinky_Curl_Middle           -90                    10
Pinky_Curl_Top                -70                     10

Thumb_Twist                   -45                      45
Thumb_Curl_Base         
-75                      10
Thumb_Curl_Top           
-80                      10

and then in the Connection Editor : -

Inner_Spread                   Connected To      Right_Inner_Finger_A     ROTATE Z
Inner_Curl_Base            
Connected To      Right_Inner_Finger_A     ROTATE X
Iner_Curl_Middle           
Connected To      Right_Inner_Finger_B    ROTATE X
Inner_Curl_Top               
Connected To      Right_Inner_Finger_C    ROTATE X

Index_Curl_Base             Connected To      Right_Index_Finger_A    ROTATE X
Index_Curl_Middle         
Connected To      Right_Index_Finger_B    ROTATE X
Index_Curl_Top              
Connected To      Right_Index_Finger_C    ROTATE X

Pinky_Spread                   Connected To      Right_Pinky_Finger_A    ROTATE Z
Pinky_Curl_Base            
Connected To      Right_Pinky_Finger_A    ROTATE X
Pinky_Curl_Middle         
Connected To      Right_Pinky_Finger_B    ROTATE X
Pinky_Curl_Top               
Connected To     Right_Pinky_Finger_C    ROTATE X 

Thumb_Twist                    Connected To      Right_Thumb_A               ROTATE Y
Thumb_Curl_Base          
Connected To      Right_Thumb_A               ROTATE X
Thumb_Curl_Top            
Connected To      Right_Thumb_B               ROTATE Z

That's it select either your L or R Hand_Control, and check everything is working ok, by selecting what you want to check in the Channel Editor, and middle mouse scrubbing backwards and forwards in the Persp view, or any other view, note you can select more than 1 item to test, for instance, try selecting Inner_Curl_Base, Inner_Curl_Middle and Inner_Curl_Top and then scrubbing you'll see the whole finger correspond hopefully.  Well, that was quite an intensive part to the tutorial, but at least we've now finished with the main body rigging, note you can use these same principles applied to a character's toes, toe spread, etc  You can download the rig, rigged up to this point here : -

Rigging Scene - With Arms And Hands Completed - Maya 4.5 Only - Zip File (331kb)

Before we move onto the actual binding process, and the creation of blendshapes and so on, we need to create the final part of our rig, and that's the rigging for the eyes, which would mean both eyes together, seperately, and for pupil dilation, continue on to the next page : -

Character Rigging Tutorial - Sixth Page

 

Steven J. Tubbrit
(c) Copyright