Setting up the Controls.

Now we will set up the controls that the animator will use to animate the characters with. So it's important that they are easy to understand and follows a set standard. For this tutorial, we will use the following standards.

Left side Controls will be Red.
Right side Controls will be Blue.
Center Controls will be Green.

Add the controls to the layers that already exist in the maya file (called Left, Right, and Center).

All the controls must also have TranslateXYZ and RotateXYZ values of 0 and you should lock and hide all channels that will not be used for the specific Control. These will be pointed out in the tutorial.



1:You will find the controls inside a group node called "controls" in the maya file. Unhide them and duplicate as needed for your rig. For the Root/Pelvis Joint we will use the Square. Snap the square to the root (by pressing v when you are moving the square, the yellow square around the local pivot should turn into a circle to indicate that you are going to snap to a point).

Freeze its transformation (Modify >> Free Transformation) and then point and orient constrain the root to the control. To Point and Orient constrain, select the square first, then the root, and then go to the Constrain>>Point and then Constrain>>Orient. If your model rotates or changes at all, UNDO and then go to the options menu for either the Point or Orient constraints and check the box labeled "Maintain Offset". YOUR MODEL SHOULD NOT MOVE WHILE APPLYING ANY OF THE CONTROLS TO IT. If it does, you need to fix it right away, so please ask for help if you are having any trouble.

To make sure this control is green, add them to the Center Display Layer by selecting the square and then right-clicking on Center>>Add Selected Objects in the Layers section of the channel box. Name your square "root_CON_CEN" in the outliner.

To check that your root_CON is working correctly, select only the square and move it (initially all of the trasnlation and rotation in the control box should be 0). Rotate the square as well. When you do this, your model should follow the box. Don't worry that the eyes don't follow the model, this will be fixed later in the tutorial.


Control for root/pelvis.
The Constraint Options control Box.

 

 

 

 

2: Spine and Neck Joints:

Snap the Circle controls to each spine joint. You may change the shape of some of the circles to fit around the body (don't do this unless you have to, too many different shapes can confuse the animators later). To do this, right click on the circle and select "control vertex", move the vertices so that the shape resembles the picture below (most notable the spine_CEN_04 joint and neck_CEN_02 joint). Now freeze its transformation and do an orient constraint on it (NO point constraint, we only want the spine joints to rotate so that the model moves realistically). Select the Control first, then the joint, and then the orient constraint command.

Place only one neck control and connect it to neck_CEN_02. Call this control neck_CON_CEN_01.

Next, we point constraint the newly created spine and neck controls to their respective joints. So, while the Controls will determine how the joints will rotate, the joints themselves will be telling the controls where to translate. Click the joint and then the control, and then point contraint command.

Finally, we parent all the spine and neck controls to the Root Control we had set up before. The spine joints should each be parented to the joint beneath them so that the top portion of the spine rotates with the lower portion. As an example, select spine_CON_CEN_04 and then spine_CON_CEN_03 and press "p". Your outliner should look like it does below (after creating only the spine joints, the neck joints should be parented under the spine in the same fashion.

Since these are spine and neck controls, we do not want the animator to translate them. If there is something that you don't want an animator to play with, LOCK and HIDE it! Otherwise they WILL touch it and get mad at you and tell you to fix your rig. Select each spine and neck control, in the Channels box control-click on the labels called Translate X, Translate Y, Translate Z, Scale X, Scale Y, and Scale Z. Now those attributes should be highlighted. Right-click on one of the selected labels and select "Lock Selected". Now the values in these attributes should be grey. Right-click on one of the selected labels and select "Hide Selected". Now you should only see Rotate and Visibility in the Channel box. Say you mess up something and want the other attributes back: right-click in the channel box and select Editors>>Channel Control. There will be a list of Nonkeyable Hidden names, search for the name of the attribute that you want back, select it, and hit the "<<Move" button to get it back to the keyable area.

While you are at it, lock and hide the scale options for the root_CON_CEN.

Test that your rig is working by clicking on each spine control and rotating it. Your model is not weight painted yet, so it will be a bit (or a lot) choppy, but we will fix that later. When you play with your rig, always make sure to put it back in the neutral position. Also, save an iteration of your rig periodically. It is really important that you don't save over the same file for this, you will definitely want to go back at some point - you do not want to have to do this over again.


Controls for spine and neck.

Outliner for the spine.

 

Channel box and Outliner while hiding and locking attributes.

 

3:Head and Eyes:

Now to take care of the eyes. Select the eyes group in the outliner (under the rigged_OldMan group) and parent them underneath the head_CEN_01 joint. Now when you rotate the neck_CON_CEN_01 control, the eyes will move with the head.

For the head tilt motion, we will be using Set Driven Keys instead of constraints (aka the controls that we have been setting up).

Select the neck_CON_CEN_01 control, right click on it's channel box, and choose Add Attribute. Give the attribute a name (headtilt_FB) and use the settings in the image below and then press okay. This will be our forward and backwards head motion attribute. For the side to side head tilt, create a second attribute (headtilt_SS) with the same settings.

Next we pull up the Set Driven Key by going to Animate>>Set Driven Key>>Set Options. Click on the neck_CON_CEN_01 control and load that as driver. Click on the neck_CEN_03 joint and load that as Driven. For the Driver Attribute (in the right box), select the newly created Headtilt_FB attribute. For the driven, find out what rotation direction makes the head tilt forward and backwards and select that as the Driven. With both the driver and driven channel box values at 0, press Key to hook them up together. So now, when the Headtilt_FB attribute is at 0, the head joint rotation(X,Y,or Z depending on your rig) will also be 0.

Next we have to set the max forward tilt and the max backwards tilt. Select the neck_CON_CEN_01 control, and change the Headtilt_F attribute to +10. Then Select the neck_CEN_03 joint and then rotate it until it reaches the max forward tilt that a human head should have (this will most likely be around 20 degrees - this is where you may want to do some rough weight painting to make sure that the chin is controlled by the neck_CEN_03 joint). In the Set Driven Key dialogue box, with all the same selections as before, click key. Now change the Headtilt_F to -10, tilt the neck_CEN_03 joint back to a reasonable amount (about 50 degrees), and click key in the Set Driven dialogue box.

If you were to change the values of Headtilt_F from -10 through to +10, you will now see the head tilt forward and backwards. Create the side to side head tilt in the same manner but with the Headtilt_SS instead. The side to side movement should be the model bringing his ear towards his shoulder (not turning his head left and right).

Preiodically go back to the neutral pose by selecting the root joint then clicking Skeleton>>Retargeting>>Go To Neutral Pose. If you get an error trying to do this, you have created something incorrectly in a previous step which you should redo or ask a TA for help. (Another note - save in iterations! This will save you a lot of time if you mess up).


Add Attribute Dialogue Box.

Set Driven Key Dialogue Box.

New Attributes.
     

4:Leg Controls and Reverse Foot:

Select the IK handle tool, Skeleton>>IKHandle, click on the hip_LFT_01 joint, and then the ankle_LFT_01 joint. An IK handle should have been created to let you maneuver the legs. To control the knee rotation we will need a pole vector constraint for the IK Handle. Create a new square control and place it in front of the knee (use vertex snapping by holding "v" while you move the square into place. If you don't line the square up correctly, your model will be forced into strange positions). Name the control knee_CON_LFT_01, name the IK handle leg_IKH_LFT_01, name the effector (which will show up underneath the hip joint in the outliner) leg_EFF_LFT_01. Select the control first, then the IK Handle, and finally go to Constrain>>Pole Vector. Lock and hide the rotate and scale attributes in the channel box.

Go back to the neutral pose by selecting the root joint then clicking Skeleton>>Retargeting>>Go To Neutral Pose. If you get an error trying to do this (and the knee control has not been moved from its origonal position) then the knee control was not placed correctly. Undo to right before you placed the pole constraint and position the knee con very carefully over the knee joint! These need to line up! Please ask a TA if you are not able to achieve the neutral pose at this point (Do not just move on and think you will fix it later).

A reverse foot lets us keep the foot flat while still being able to move the legs. First we duplicate the whole foot chain from the ankle on down. Select the ankle joint, and then go into the Edit >> Duplicate Special Options panel. Be sure to have "World" instead of "Parent" selected. This will ensure that the new foot is not attached to the main skeleton. Move it a little bit to the side so that we can see both feet joints at the same time. Rename the joints in the joint chain with reverse at the front (e.g. reverseankle_LFT_01). Next, point constrain the IK handle to the ankle of the Reverse Foot (click on the reverseankle_LFT_01 joint and then the IK Handle). Again, if your model moves, make sure that you have the "maintain offset" check box activated in the point constraint options. The reverse foot ankle now controls the IK Handle, which in turns controls the leg. To keep the feet from rotating, we Orient constrain each foot joint to the respective joint on the Reverse foot. So, Ankle to reverseankle, Heel to reverseheel, Toe to reversetoe.

Then we put a new Square Con under the foot, freeze its transformation and Point and Orient constrain the Reverse foot ankle to the Con. Rename this square "leg_CON_LFT_01". Now when you move the con, the reverse foot (and in turn the foot) will move. Lock and Hide the scale attributes in the channel box.

To make the toes roll up and down, we will need another Set Driven Key setup. Create a new attribute on the foot con and hook it up to the toe joints just like the way we did with the head tilt setup. The attribute should be called "toeCurl". When the attribute is at 10, the toes should be up, when the attribute is at -10, the toes should curl downward. The driver will be the leg_CON_LFT_01 and the driven will be the reverseball_LFT_01 joint. When you are done hooking this up, hide the reverse foot!


Leg IKs.


Reverse Foot Setup

 

5:The Arm and Hand:

Select the IK Handle tool and click from the shoulder_LFT_01 joint to the wrist_LFT_01 joint. Put a new square con behind the elbow (use the snap to vertex option while moving), freeze it's transformation, shift select the new Ik Handle and use the Pole vector constraint. CHECK YOUR NEUTRAL POSE HERE. If you cannot acheive the neural pose, go back to before you created the pole constraint and try positioning the elbow more carefully. Name the control elbow_CON_LFT_01, name the IK handle arm_IKH_LFT_01, name the effector (which will show up underneath the shoulder joint in the outliner) arm_EFF_LFT_01. Lock and hide the rotation and scale attributes in the channl box of the elbow_CON_LFT_01 control.

Put put a circle control near on the wrist, freeze transformations, and point constrain the IK Handle to it, name the con "arm_CON_LFT_01". Now constrain the rotation of the wrist to the arm con by placing an orient constraint on the wrist joint. Lock and hide the scales attribute for the wrist con. That should do it for general movement of the arm.

Controlling the fingers require a lot more work and even more attributes (hooray!). For each finger, we will need a finger curl and a finger spread attribute. For the finger spread attribute first add an attribute titled "indexSpread". Load the arm_CON_LFT_01 as the driver, load the index_LFT_01 joint as the driven. Use set driven keys to make the finger spread control the side to side movement of the finger. The fingers should spread outward when the spread is at its maximum, and inward when the spread is at its minimum. Go through the same process for the middleSpread, ringSpread, pinkySpread, and thumbSpread. YOU MUST ADD THE ATTRIBUTES IN THIS ORDER! This will make it much easier for the animator in the long run, so it is important that the channel box looks like the one shown below. For the thumb spread, the thumb should move up (maximum) and down (minimum).

Now add an attribute for the indexCurl. You will have to hook up the all 3 joints in a finger to the same Attribute. Select the arm_CON_LFT_01 and use indexCurl as a driver. Shift-click on the index_LFT_01, index_LFT_02, and index_LFT_03 joints and load them as driven. Select all three of the joints in the driven window and the correct axis of rotation for the finger curl (correct shown below). Key at 0, 10 and -10 where 10 will curl the fingers towards the palm and -10 will flex the finger upward. Do the same for the middleCurl, ringCurl, and pinkyCurl. The thumbCurl should be hooked up so that the thumb comes towards the palm, so this may be a different axis of rotation than the fingers (double check, if you set up the skeleton correctly, then you will be able to use the same axis).


Arm Joints, IK, and Cons.

 


Finger Joint being curled.

 


Thumb Joint being curled.

 

Set Driven Key for Fingers.

 

Correct Channel Box.

 

6:Hierarchy and Grouping:

Before you move everything around in your hierarchy, go through and create all of the controls for the other side of the body (sorry, there is no mirror control option - though feel free to script one if you are so inclined)

Rigging is all about hierarchies. The skeleton itself is just one big hierarchy and all the controls and IK Handles have to be parented and grouped accurately for the rig to work. What you need to do is create a new control shape and place it underneath the model in the viewport. This will be our Top_Con, the control that will let us move and rotate all the joints, ik's, objects, and controls. Group the IK Handles into one big node, joints into a single node, and the controls into a node. Now parent them to the Top Con. The actual model itself needs to be on the same lvl as the Top Con in order for it to work.


Top CON.

Rigging Hierarchy.

A clearer view of how the hierachy is set up.
   


Now weight paint your rig!