A few years ago, I was challenged during a production to create a new digitigrade inverse leg animation rig that would be a full IK chain from the hip down to the point of ground contact, would require no additional overhead management of the limb’s behavior by the animator, and not have hyper extension pops.
An inverse leg would be the kind found on a Digitigrade; a dog or cat like animal that walks on its digits, or toes.
There’s two inverse leg type rigs I had seen so far at different studios.
A standard human Plantigrade leg, where the foot role manages the third span’s angle (c) and the ankle is the point of ground contact. The setup requires constant management from the animator to keep the leg planar during posing, the point of ground contact is high and unintuitive, and posing extensions requires two sets of controls.
A second more complicated setup was more focused on the ball of the foot ground contact point via a layered multiple Ik leg, it required no management for planar posing, and extension poses were more intuitive, but adjusting the angles of the knee or ankle could cause hyper extension pops during inbetweens from the sub Ik layers, and aim constraints when the solution was pulled further than the natural distance of the limb.
A senior technical animator on the production mentioned that back in his day they would animated the preferred angle of a joint in the chain with a full IK chain down all three spans.
This showed promise however in Maya the chain would single frame flip the IK’s relation to the Pole Vector. And there can sometimes be a pop in the end of the chain when the solvers about to flip that can manifest only during playback.
To prevent the flip I started with a solver chain, and an output chain. Both have their preferred angle being driven from a rotation control. Then I had to find a way to detect when the flip happens in the solver chain, and then set a 180 degree value back into the IK twist of the output chain.
Multiple ways to detect the flip were used over evolutions of the limb, and I finally found an elegant solution that made it easy to teach and very simple to construct. Originally, I used an ‘if’ expression that watched the twist axis of the solver chain (rotateX for me) and it set the ik.twist value when it crossed a certain value.
This rotateX axis value wasn’t very clean to monitor all the time and could cause instability in certain poses. To solve this a third standard two joint chain was added as a parent space for the other two. This cleaned up the twist value so much, that it was often a clean 180 on X and I could connect it directly to the IK.twist value and no longer needed an Expression.
A video walk through of me setting it up. (Apologies, no captions or audio)
Example Maya Scene Zip Download
If you’d like to make the leg be able to break planar, one can take the rotateY out of the tweak control, multiply the output by .5 and put it into the preferred angle Y of the 3rd joint in both Output and Solver chains, then the output of rotateY multiplied by -.5 to the preferred angle Y of the 2nd joint of both the Output and Solver chains. This keeps the knee in the plan, but kicks the ankle out or in.
To eliminate the pop manifesting at the end of the chain, I use the output of the foot goal for the output of the ball joint. ( not done in the file above )
Next Topic Morgue Setups: How to modify rigging solutions for quickly adapting setups to different shaped characters (In progress)