Creating the finger joints
To create the finger joints, pop into the Top view and activate the Skeleton > Joint Tool. Starting with the index finger, draw a 5-joint chain going from the root of where the metacarpal bone would originate, then at each knuckle and finally at the tip of the finger. Don't worry too much about their position, as we will be correcting this next. If the joints are drawn extremely large, use the Radius in the Channel Box to make them smaller.
Now select the root joint for the chain and translate it up into the hand geometry. With the root joint still selected, go Skeleton > Orient Joint Tool (Options). Set the Primary Axis to Y, the Secondary Axis to X and the Secondary Axis World Orientation to X (+). Flexion should be created with positive X rotation. Now use a combination of the Joint orient in the Attribute Editor and the translate Y attribute (the length of the joint) to position the joints into place. Remember to check that all the rotation channels have zero values as do the translate X and Z channel for all the child joints. The root joint can have values in all the translate channels. Repeat this step for the remainder of the fingers and the thumb. Do note that the thumb is a 4-joint chain as it has one less bone than the fingers. Try and orient the joints so that when they are rotated using the rotate X attribute, they create a nice fist with the fingers coming together neatly. Analyze your own hand going from a default pose to a fist as you do this to inform how you orient the joints.
Using the Joint Orient and the translate Y to orient and position the finger joints into place
Creating the low-res mesh
To chop up the geometry, select the relevant faces and then go Mesh > Extract in the Polygons menu. A useful way to select polygons is to grow and shrink the current selection using the < and > keys. Once you have chopped up the geometry, select all of it and go Edit > Delete By Type > History and also un-parent it from its current hierarchy.
Using the Mesh > Extract tool to create the low-res geometry
Renaming the mesh and the joints
Now comes the boring part. We need to go through and rename the joints and the geometry appropriately. A script would come in handy at times like this and there are plenty that you can grab from creativecrash
that do just that. For now, I'm just going to do it manually. Here is a breakdown of the naming for the index finger joints and the mesh.
For the index finger joint chain from root to tip:
l_indexA_jnt, l_indexB_jnt, l_indexC_jnt, l_indexD_jnt and l_indexEnd_jnt
For the index finger geometry from root to tip:
l_indexA_proxy_geo, l_indexB_ proxy_geo, l_indexC_ proxy_geo, l_indexD_ proxy_geo, and l_indexEnd_ proxy_geo
Simply repeat this for the rest of the fingers replacing the index with the finger name: middle, ring, pinky and thumb. Once everything has been labeled, parent the relevant piece of geometry under the relevant joint.
Renaming the finger joints and the low-res geometry
Create the finger controls
We are going to use the createControls.py script to create the controls for the fingers, but first we need to delete the extra line we added to the script during step 3 as we are only interested in constraining the orientations. Once the line has been deleted, select all the finger joints (minus the end joints) and execute the script. If the controls are rather large when created, undo what you just did and reduce the radius on line 16 of the script (r=1.25). Re-execute the script and hopefully you will have something more manageable. Hit F8 to go into component mode and re-work the control shapes to make them more easily selectable.
Modifying the createControls.py script slightly to alter the size of the control curves
Now we need to create the parent child hierarchy with our controls to mimic the FK behavior of our joints. I'll describe the process for the index finger but you can simply repeat the process for the remainder of the fingers. So, first parent l_indexD_ctrl_offset under l_indexC_ctrl. Then parent l_indexC_ctrl_offset under l_indexB_ctrl. Parent l_indexB_ctrl_offset under l_indexA_ctrl_offset. Once all the finger control hierarchies have been set up, select all the l_”finger”A_ctrl_offset nodes and parent them all under l_palm_ctrl. The last thing to then do is parent all the finger joint chains under l_palm_jnt and everything should be pretty much good to go.
The hierarchy for the index finger control
Cleaning up the hand rig
Start by color coding all the finger controls using the Drawing Override attributes. Then add a shader (green Lambert) to the left hand geometry so it is clear that it is the left-hand side. After this, select all the finger controls and the palm control and in the Channel Box, highlight all the translate and scale attributes. Hold down the RMB and go Lock and Hide selected.
In the Outliner now, select l_arm_IK_ctrk_grp, l_arm_rig_grp, l_shoulder_ctrl_offset, l_palm_jnt, l_palm_ctrl_offset and l_palm_con_grp and hit Ctrl+G. Rename the group l_arm_rig_grp and do the same for the right arm.
Repeat the steps for the right arm and you should have 2 working hands. We'll come back to the hands later on to allow for the animator to create the large movements for the fingers. Next time, we'll hit the legs.
The controls colored and the Outliner cleaned up
Maya rigging - the hands
Top tip: Get hands-on experience
I would always recommend analyzing the real thing before hitting the computer. However, the hand in particular demands some close attention, as it is such an important communicator of feelings and emotions. By looking beneath the skin, your knowledge of how the joints articulate will be far better informed, leading to more believable CG work.
Jahirul's previous rigging tutorials can be found here:
Maya rigging: Introduction to rigging
Maya rigging: Introduction to rigging a human torso
Maya rigging: Introduction to rigging the neck and the head
Maya rigging: Introduction to rigging the shoulder and the arms
Check out Jahirul's site for more