Sunday, August 22, 2010

iTaSC Pole Vector Free Rigging

Blender now has a very powerful set of IK solvers: Spline IK, and simulation based IK (iTaSC). When iTaSC is used in `Simulation` mode it becomes very difficult to make an IK chain flip. This could greatly simplify the rigging and animation process if we can remove the need for a pole-vector object to control knee/elbow tilt. One of the problems in using a pole-vector is that it imposes a non-ideal flipping point, an arm or leg will have a large range of possible motion, flipping then becomes unavoidable past 180 degrees. Animators may have to resort to scripting to control the pole-vector or bone roll directly, but these hacks complicate animation blending in NLA or are cumbersome to use and setup.

Using iTaSC no hacks are required to reach almost 360 degrees of rotation. Simply by using two IK constraints, one for position and the other for rotation, is all that is needed for full elbow or knee tilt while keeping the optimal flipping point at 360 degrees. The interface may not lead us directly to this simple solution, the old pole-vector option remains available even though its not very useful combined with iTaSC. The correct steps are as follows:
1. From the Armature panel -> iTaSC options -> select `Simulation` mode (keep all the default options)
2. Go into pose-mode, create a position IK for the ankle, do not assign a pole-vector target
3. Pick the thigh bone, create another IK constraint, pick the ankle IK handle as the target
4. Set the constraint to use rotation, and only in the Y, and turn off position.
5. If your model faces -Y (the default in Blender) your leg will have flipped, rotate the IK handle 180 on the Y.
6. Test the leg by moving the handle, you should see it flip when moving forward and back,
this is because the X rotation of the handle will define where the monopole is located that iTaSC will flip around,
by relocating the monopole to 180 degrees from the leg's natural rest position,
we gain almost 360 degrees of flip-free movement.
7. Adjust the rotation of the handle in X to minimize the flipping,
some where between 45 to 90 degrees should give the best results.
8. After you have found the optimal rotation in X of the handle, go back to the constraint options and set the weight to 0.5,
this helps keep the response of the IK chain smooth when nearing 360 degrees.

Torso and Shoulder Setup:
Shoulder rigging and weighting is another area where many techniques have been tried, but most of these hacks are hard to setup, so it becomes a serious bottleneck for creating digital characters. The interaction of all the ribs, muscles, clavicle and shoulder-blades is far too complex to be modeled by a simple single chain spine with arms branching directly from it. The following approach instead uses IK to model the shoulder blades and stretch-to constraints to model the shoulders and chest. This setup can only work with bone-to-bone constraints because of the way Blender computes its DAG node graph, in other words you will get cyclic dependency errors trying to use bone-to-empty constraints.

. Even if bone tips are perfectly snapped to the heads of their stretch-to targets, they will still move slightly when the constraint is applied.
. IK bone stretch scales opposite of stretch-to constraint. IK stretch gets larger as distance grows, while stretch-to maintains volume and thins.
. Stretch-to constraint when using a bone target allows for slider control between head and tail. IK lacks this option.
. iTaSC treats bone stiffness slightly different from legacy IK, stiffness of 0.99 is considered absolute and locked.
. iTaSC bone stretch is disabled if two IK constraints have overlapping bone influence.
. iTaSC not as compatible with other constraints as the legacy IK was. (locked-track was compatible with legacy IK)
. iTaSC has its own set of internal IK types: copy-pose and limit distance, with more comming in the future!
. Too many bones in an IK chain with stiffness of 0.99 can lead to jerking and unstable response.
. Bone shake due to overlapping IK is usally solved by lowering the constraint weights, good ranges are from 0.5 - 1.0

No comments:

Post a Comment