Now, create a NURBS curve in the top view to be Foot_Control_L, parent the Reverse_heel joint to the Foot_Control_L, and create attributes on Foot_Control_L to manage foot animation. These can include Foot Roll, Twisting on the Foot Ball, etc. We will just look at the Foot Roll:
FootRoll ATTRIBUTES: Select the FootControl and menu Modify/Add Attribute Name=FootRoll.
Set min = -5, max = 10, default = 0.
-5 will be the heel touch, 0 will be flat on the ground, 5 will be the foot bend, and 10 will be up on the toe tip.
- With Foot_Control selected, open menu Animate/Set Driven Key/Set.
- Select the FootRoll attribute, hit [Load Driver].
- In Outliner, select Reverse Foot joints (Heel, Ball, and Toe) hit [Load Driven].
- Take note of Reverse Foot joint axis (example Reverse_Heel=x, Reverse_Ball=y, Reverse_Toe=z).
- At FootRoll = 0 (in Channel box), select in Set Driven Key: Foot Control/FootRoll (above) and Reverse_Heel/Rotate[Z] (below) and hit [Key] for default down pose.
- At FootRoll = -5, rotate Reverse_Heel (as if heel just hitting ground) and hit [Key].
- At FootRoll = 0, select Reverse_Ball/Rotate[Z] and hit [Key] for default down pose.
- At FootRoll = 5, rotate Reverse_Ball up (for partial foot lift) and hit [Key].
Also, select Reverse_Toe/Rotate[Z] and hit [Key] for default down pose.
- At FootRoll = 10, rotate Reverse_Toe up (for full foot lift) and hit [key].
- You can now change the value of the FootRoll attribute as normal in the Channel Box to roll the foot.
[B] KNEE (and ELBOW) CONTROLS: Simple Pole Vector Constraint:
(1) Setup Knee (Elbow) Controls and Pole Vector Constrain the IK Handle:
a. Be sure leg/arm IK use Plane Rotation (PR, select IK handle shows triangle)
b. Create/NURBS Circles to be your Knee (or Elbow) Pole Vector (PV) Controls and position them right in front of the knee (or behind the elbow), keeping pretty close to the joints. Modify/Reset Transforms.
c. Select a knee (or elbow) Control, [shift]+select the IK Handle on the ankle (or wrist) and apply menu Constrain/Pole Vector with default option box setting (1.0).
(2) Connect the Knee (or Elbow) Pole Vector Control to the hierarchy by parenting under a Locator. We can't just link it to the joints or risk a messy feedback loop. Instead:
a. menu Create/Locator, set name in the Outliner, for example: Locater_Hip_L.
b. Position and Constraint the Locator:
c. Parent the Knee (or Elbow) Pole Vector Control to the Locator (middle mouse drag under locator in Outliner).
- Snap [v] to position directly at the Hip (or Shoulder) Joint.
- Point Constraint to the Hip (or Shoulder) Joint: select first the Joint then [shift]+select the Locator, go to menu Constrain/Point option box and hit Apply to constrain (Maintain Offset + default settings).
- Aim Constraint to the Foot (or Hand) Control: select the Control then [shift]+select the Locator, then go to menu Constrain/Aim option box (choose settings: Apply Offset =0/0/0, Aim Vector=0/-1/0, Up Vector=0/-1/0, World Up Type=Vector, 0/1/0, constrain to ALL axis) to constrain.
Now moving the Pole Vector Control rotates the Knee (or Elbow) joint, and moving the Foot Control (or Hand) Control brings the Pole Vector Control along.
NOTE: adjust Constraint properties in the Attribute Editor, just like any other attribute. To remove a Constraint, select it under the constrained item in the Outliner and hit the Delete key.
[C] HAND CONTROLS: Controller, Attribute Creation, and Set Driven Key
- Detach skin weights so you can re-orient joints. NOTE: If you have non-overlapping UVs (or if you apply a simple planar map to the entire front) and all joints are present and named, you can export the skin weights before detaching the Skin and re-import them after the hand is complete: Skin > Edit Smooth Skin > Export Skin Weight Maps.
- Create a circle curve to go above the Wrist1 Joint: Hand_Control_L. Duplicate for the other side: Hand_Control_R.
Hold [v] to snap each to their respective wrist1 joint, and select both to move an equal amount above the hands. Modify/Freeze Transforms.
- Point Constrain (Maintain Offset!) the arm IK handle to this Curve: select the Curve, [shift]+select the IK handle, and choose menu Constrain/Point.
This curve now controls the hand/arm position.
- Orient Constrain the Wrist2 Joint to this Curve: select the Curve, [shift]+select the joint, and choose menu Constrain/Orient.
This curve now controls the hand rotation.
- Add Attributes to this Hand Control Curve: In the Channel Box, choose Edit/Add Attribute. Create a cosmetic "Displayable" attribute (for a category head) called ___fingers___ (Override Nice Name)and then add 7 "Keyable" attributes for a 5-fingered hand, each DataType=Float, DefaultValue=0, Min = -5, Max = 10:
"Spread Fingers," "Curl Point," "Curl Mid," "Curl Ring," "Curl Pinky," "Curl Thumb," "Rotate Thumb."
- OPTIONAL: Reorient (menu Skeleton/Reorient) joints for each finger to identically line up their rotation axis. You may choose to Freeze Transforms.
Also, fix bad orientations in the joints: use Modify/Freeze Transforms and Skeleton/Orient Joint option box, and remove parenting and duplicate joints so that all joints in a chain have the same orientation. REMEMBER: fingers need end joint to Joint Orient.
SET DRIVEN KEY:
NOTE 1: All finger attributes can use Set Driven Key. Any Set Driven Key Attribute should have a min and a max. If you forgot to set them when creating the attribute, simply select the attribute in the Channel Box and choose Edit/Edit Attribute to set values after creation.
NOTE 2: Use Set Driven Key for all motions. Finger Curling could use the Connection Editor, but Finger Spreading should use Set Driven Key because rotation is likely to be reversed in some fingers. If Y is curl, Z is likely spread, but some joints will be -Z. With Set Driven Key, the direction is irrelevant, because the result is based on the animation you set.
- SPREAD FINGERS: Open menu Animate/Set Driven Key/Set. Select Hand Control and hit [Load Driver]. Select base finger joints, hit [Load Driven]. Select "Spread Fingers" attribute above. In Viewport, note all base joint axis. Here I assume axis [Z].
Change the value of the "Spread Fingers" attribute in the Channel Box to spread the fingers.
- At Spread Fingers=0 (in Channel Box), select in Set Driven Key: Hand Control/Spread Fingers(above) and all fingers rotate[z] (below) and hit [key] for default rest pose.
- At Spread Fingers=-5, rotate each fingers together and hit [key] on all.
- At Spread Fingers=10, rotate each fingers apart to maximum extension and hit [key] on all.
- CURL FINGERS: Select the three joints in the Pointer finger in the viewport, hit [Load Driven] in Set Driven Key. Select the "Curl Point" attribute above. In Viewport, note all base joint axis. Here I assume axis [y].
Repeat this process for each finger and the thumb, both in the "Curl Thumb" [y] and the "Rotate Thumb" [z] until all finger cotnrols are complete. You can also add more complex poses, such as a "relax" (in which each finger is rotated differently, pinky the most, pointer the least) or a "scrunch" (finger pulled back in a claw).
- At Curl Point=0 (in Channel Box), select in Set Driven Key: Hand Control/Curl Point (above) and all 3 joints rotate[y] (below) and hit [key] for default rest pose.
- At Curl Point=-5, rotate all three joints up slightly and hit [key] on all.
- At Curl Point=10, rotate all three joints down to a full curl and hit [key] on all.