How to prevent your character’s finger tips from sliding when walking
Author: David, created in: 31 May 2002, last updated in March 2010.
Here are the results of my tests after the help I got from the forum at Cg-char.com.
Note: this article is for the defunct Softimage XSI but constrains could work the same in your 3d package of choice.
I’m animating a character who has 4 hands walking on a large branch, kind of like a lemur.
I built my rig so that all 4 hands are moving independently from the body, in order to have the hands stick on the branch. See the pic above.
One note about the above picture:
these 5 control objects are not really parented under the scene’s root.
They are parented under a null that I usually call "GlobalSRT".
This null is a child of the modell-null and the parent of every chains and control object (the rig).
This way all the rig objects will have their values in reference with this top null.
It will never be keyframed, thus, it acts like a scene root dedicated to the rig.
So I’m animating this 4 legged character walking on the branch, each hand have motions that are independant from the body’s center of gravity, so the hands do not slide on the branch. The problem is that the finger tips are still sliding when the character is walking!
Check how I first rigged this hand : watch the picture above.
The hand control (red circle) moves the hand during the animation, and the finger tip’s effectors (blue circles) are parented under the hand control.
Now if you look at this video above (maybe frame by frame playback is necessary), you’ll see that the finger tips are too dependant from the hand control.
When the hand is touching down the branch, the fingers do not move as they are parented to the hand’s control.
But then, when the hand starts to take off, I want to simulate the hand leaning on the fingers in order for it to rise up. At this moment, the fingers must not move. But whatever I will try, they will slide, as they are dependant from the motions of the hand control.
Ross Milne from the Cg-char forum posted this video (above) that shows what would be the right animation for those fingers.
Should I cut out the finger’s effectors from the hierarchy and parent them to the world (GlobalSRT) to prevent them from sliding? Nope. Doing this would have been a big mess. Still on Cg-char, Eric Kunzendorf gave me ideas to rig the hand in a different method. In some way, we will create a "local" GlobalSRT.
This new method is illustrated in the image above. The yellow circle is a new control object. It will hold the motion of the hand from one location of the branch to another, instead of the red control object. It will be the parent of the hand’s control object (red circle) and of the finger tip’s effectors (blue circles).
Now when the hand is pushing on the fingers in order to take off, the fingers do not slide anymore. How is this animation managed? Watch the picture above.
When the hand is ready to take off, the main control object (yellow circle) won’t move yet. It’s the wrist that takes off first, following the red arrow’s trajectory. During this motion, as the finger tips are parented to the yellow control object, they won’t move.
When the wrist is above the fingers (giving the feeling that it has leant on the fingers), the yellow control object starts its motion to reach another location on the branch.
In Xsi 2 (and above), you must set some options in order to prevent the finger tip’s effector from following the red control object :
First, as we saw before, you should make each finger’s effectors son of the main yellow control object. But this stage is not enough, because those effectors are still liable for the rest of the finger chains.
To cut them from the rest of the chain, you must select the first bone from the chain then press enter. A dialog box appears. Watch the image above. Select the "kinematic chain" tab, check "force IK" then uncheck "inherits rotation".
This is the same as constraining the effectors to a control object. Another alternative would be to select all your effectors and save a translation key for them. This activates the ik. But for rigging purposes, it is better to set the chain’s properties or to constrain the effector to a control object.
This setup has worked well for my animation in which a frog is walking on a branch, and could serve many other purposes. Thanks to Ross, Eric and Geoath for the advices.