Advanced IK Arms and Clavicular Triangle
In the next exercise, you will see how I chose to rig The Jerk's shoulders
and arms. The technique used enables the arms to stretch and the shoulder
to rotate as if it were an FK arm. Separate controls exist for posing
the arm using IK from the scapula, the clavicle, and the shoulder, as
well as the traditional IK handle at the wrist. Two locators both have
the wrist's IK handle constrained to them, adding the capability to plant
the character's hand any place we choose. Two extra joints were inserted
as children of the shoulder and elbow but were not connected (not made
parents) with the rest of the hierarchy of the arm. These unparented children
joints were used for better deformations on the twisting of the shoulder
and the wrist, to avoid the painful washboard effect.
Exercise 17.6 Advanced Stretchy IK Arms and the Clavicular Triangle
Begin by opening the file Jerk_ArmSetup_Begin.mb, which you'll find on
the accompanying CD. Take a look at how the arm joints are laid out to
create the hierarchy.
Examine this file closely: It contains the joint placement for the entire
skeletal hierarchy that will create the final arm for The Jerk. The only
thing missing is the controls, which you will add to the rig now. You
begin with the shoulder area of the character, which I refer to as "the
clavicular triangle." Then you tackle the advanced stretchy IK arm controls
that will allow the character's arms to stretch to any length. You'll
also transition the hand to be stuck on any object and stay there while
the rest of the body is animated. So, let's get started with the clavicular
Beginning with the file Jerk_ArmSetup_Begin.mb from the CD, create
an IK handle from the clavicularTriangle joint node to the scapulaJoint
node. Do this by clicking Skeleton, IK Handle Tool Options; first
hit the Reset Tool button and then select the nodes in order from
the 3D view port window. Rename the newly created IK handle scapulaClavicle_IkControl.
Next, select the scapulaJoint and use the Ctrl+h key combination
to temporarily hide it so that you can select the correct node in
the view port window. Now, using the same settings in the IK Handle
tool from above, create another IK handle from the clavicleJoint node
to the clavToShoulder joint node. Rename the newly created IK handle
Next, use the Ctrl+Shift+h keyboard combination to unhide the last
hidden node (the scapulaJoint node). Then select the clavicleJoint
node and use Ctrl+h to temporarily hide it.
Using the same settings, create an IK handle from the scapulaJoint
node to the shoulderJoint node. Rename this newly created IK handle
Create one last IK handle from the shoulderJoint node all the way
down to the bottom of the arm to the wristJoint node. Rename the newly
created IK handle armWrist_IkControl. Now Ctrl+Shift+h to unhide the
previously hidden clavicleJoint.
Next, parent the clavicleShoulder_IkControl under the scapulaClavicle_IkControl
node. Then parent the clavicleStretch_IkHandle and the armWrist_IkControl
nodes to the clavicleShoulder_IkControl. Finally, parent the entire
group of the scapulaClavicle_IkControl node to the connectToSpine
joint node. Your hierarchy so far should look like Figure 17.45.
Hierarchy for the clavicle shoulder setup.
Now that you've parented all your IK appropriately, select all four
IK handles and perform the Modify, Freeze Transformations menu command.
Next, with all the IK still selected, highlight the poleVectorX, poleVectorY,
and poleVectorZ attributes in the Channel box and set them all to
Next, click Create, Measure Tools, Distance Tool. While holding down
the v key on your keyboard (Snap mode), snap a distance locator from
the clavicleJoint to the clavToShoulder joint. Rename each locator
appropriately: clavicleJointPoint and clavToShoulderPoint. Also rename
the distanceDimension node that was created to clavToShoulder_distanceDimension.
Select the shoulderJoint and the clavToShoulderPoint and perform
the Constrain, Point menu command. Next, select clavicleJoint and
then clavicleJointPoint, and again perform the Constrain, Point menu
command. Now select the two locators and the distance dimension, and
hit the Ctrl+g keyboard combination to group them. Rename the group
clavicleDistanceGroup and make it a child of the connectToSpine joint
node. Your hierarchy so far should look like Figure 17.46.
IK handles for the clavicle shoulder setup.
Next, execute this command:
Be sure to hold down the Shift key, and Shift+click, selecting the
clavToShoulder_distanceDimension node. Open the Hypergraph window
and click Graph, Input and Output Connections.
Your screen should look like Figure 17.47.
Connecting the distanceDimension node.
Next, using Shift plus the middle mouse button, drag and drop the
clavToShoulder_distanceDimensionShape onto the multiplyDivide1 node.
This should bring up the Connection Editor window. Inside the Connection
Editor, connect the distance attribute from the clavToShoulder_distanceDimensionShape
into the Input1X attribute of the multiplyDivide node.
Next, select the multiplyDivide node and open the Attribute Editor.
Change Operation to Divide, and copy the yellow input1X attribute
(using the Ctrl+c keyboard combination) and paste it into the input2X
field so that you are dividing the current distance by the initial
distance. This creates a ratio that you can use to scale the clavicle
joint down its axis. Your hierarchy so far should look like Figure
Select the multiplyDivide node and Shift+select the clavicleJoint.
Open the Hypergraph window and click Graph, Input and Output Connections.
Using Shift and the middle mouse button, drag and drop the multiplyDivide
node onto the clavicleJoint node. Again, this opens the Connection
Editor for you to connect the appropriate attributes.
In the Connection Editor, highlight the OutputX attribute from the
multiplyDivide node, and connect it with the scaleX attribute of the
clavicleJoint node. This should appear to do nothing because the outputX
attribute should be currently equal to 1.
Connecting the multiplyDivide node.
Finally, select the shoulderJoint, Shift+select the clavicleStretch_IkHandle,
and perform Constrain, Point.
That is about it for the clavicle setup. If you move or rotate the
clavicleShoulder_IkControl IK handle, you will see that the clavicleJoint
actually scales to keep its length between the shoulder and its point
of origin at the clavicle. Although this is not anatomically correct,
it can prove very helpful for achieving appealing deformations in
this area when the character points his arm forward in front of his
body, reaches his hand across his chest, or lifts his arm above his
head. The key is to spread the weighting of this joint smoothly and
sparingly across certain portions of the frontal geometry.
In the next exercise, you will set up some of the controls for the entire