ARM
IK
Ok.
First, before assigning any IK to
the arms, we need to go over a few
things. First, let me explain a bit
about the architecture behind my rig.
The arm rig uses some complex controls
and behaviours to control both IK
behaviour, and inheritances. Take
for example, a character doing pushups.
You'd like to animate the rotations
on the hips and spine, without worrying
about the hands sliding all over the
place. I've set some inheritance controls
so that the wrists can or cannot inherit
the arms movement and rotations. It
is, however, not as simple (I wish)
as setting standard inheritances.
I achieved this by using two goals
in the arm, and using weighted constraints
on the wrists, so that you could alternate
between an 'inherit' object, and a
'no-inherit' object. The constraint's
weights are controller through a custom
attribute I set on my arm control
object. This object, which is the
one you'll use to move the arm, also
has some other custom controls to
drive finger curling, IK swivel angles,
wrist rotations, etc. That way, I
can animate almost anything in my
arm rig from this object, without
having to select other objects, animate
them, re-select the arm control object,
etc. This makes animating characters
a breeze. Therefore, there are some
things we need to do prior to creating
anything here, so that the whole thing
will work perfectly. Let's get to
it.
First,
select the last bone in the arm
chain (in my case, it'd be the 'Bone_ikterminator_arm'
small bone). In the hierarchy panel,
pivot tab, turn on the 'Don't affect
children' button. Move the bone
so that it's pivot point meets exactly
the pivot points of the bones that
start the hand assembly. This is
crucial, or the hand will slide
when the torso moves. Ok.
Select
the arm bone (not the forearm one).
Now, in your perspective view, really
zoom in onto the ikterminator bone.
Switch to a wireframe view if necesary
(the hand bones are most likely
getting in the way). Now, with the
arm bone still selected, go into
the animation menu (I have a toolbar
for most of these operations), and
select IK Solvers - HI Solver. Now,
select the ikterminator bone. You'll
see a blue cross at the ikterminator's
pivot, and a line running from the
cross to the pivot of the arm bone.
The line is the IK solver. The blue
cross is the goal. Whenever you
move the goal, the IK solver will
try to rotate the bones encompassed
by it in order to meet the goal.
These rotations are dependant on
something called the rotation plane.
You can't see it, but it's there.
It's a plane that serves as a 'grond
plane' to the IK chain, and it's
originally parallel to the bones
in the chain (that's why it's very
important that the bones are aligned).
This plane is controller by something
called the swivel angle. By modifying
this angle, you rotate the plane,
thus rotating the bone chain, using
the goal as a pivot. It's very much
like moving your elbows while having
your hands placed at your waist.
Now
that we've gone over some IK basic
concepts. Let's rig our arm.
Let's
create some nodes we'll need for
our arm rig. I used one spline object
(just like the rotator, but pointy),
and two point objects. Align them
to the ikterminator bone (pos and
orientation).Ok. Here we go.
Select
the rotator (mine is colored purple).
Link it to the forearm bone (not
the ikterminator bone). In the hierarchies
panel, link info tab, turn off the
rotate inheritances in all axes.
Name it NoInherit_arm.
Select
the first point helper. Name it
HandOrient. Link it to the NoInherit_arm
spline object. Turn off the rotation
inheritances. Now, apply an orientation
constraint to it. Selec the forearm
bone as a first target, and the
NoInherit spline obj as a second
target. For now, set the forearm's
weight at 100, and the NoInherit
object's to 0.
Select
the second point object. Name it
WristControl.Link this one to the
HandOrient point object. Now, select
each root bone in the arm and link
it to the WirstControl obj. Here's
a shot of my schematic view.
 
Create
a new point helper object. Name
it Control_arm, and align it with
the IK WirstControl obj. Now, add
the following custom attributes
to it:
Name:
Thumb Curl. Type:
Float spinner. From
-15 to
70, default
0. Object's base level.
Name:
Index Curl. Same
params as before.
Name:
Mid Curl. Same
params as before.
Name:
Pinky Curl. Same
params as before.
Name:
Finger spread. Type:
Float spinner. From
-15 to
15, default
0. Object's base level.
Name:
Inherit Arm. Type:
Float slider. From
0 to
100, default
0. 4 ticks. Object's base level.
Name:
Swivel Angle. Type:
Float spinner. From
-360 to
360 default
0. Object's base level.
As
you might have guessed, most of these
are hand-related controls. You'll
see how easy is to animate both the
arm and hand with these controls.
Link the IK chain you created to it.
First,
we'll wire the Swivel Angle parameter
to the chain's swivel angle. Just
select the point object (A_Control_arm),
go to Animation/Wire Paramters/Wire
Parameter, and select the IK chain
(my point object has the cross option
turned off so the IK chain underneath
can be selected. I used instead
the Axis Tripod option). The wire
parameters dialogue will appear.
Wire the point's object Swivel Angle
Parameter to the IK chain's swivel
angle parameter. Set the direction
from the point object (driver) to
the IK chain (driven). In the expression
textbox, enclose the current expression
in parenthesis, and add the following
to the beggining of it... 'degtorad'.
This tells the expression to convert
the value from degrees to radians.
This is necessary to have the results
you expect.

Proceed
to the next page for more on the
arms.
|