Taming the IK-Solver

Hi,

A chain of bones is going from empty A to empty B in a straigth line along the x axis. The head of the last bone is at point B and is equipped with a IK-solver for the complete chain of bones.

Moving empty B towards empty a along the x axis results in the chain “bulging” in direction of -z axis (downwards).

How can I convince the IK solver to bulge the chain to the opposite direction?

Cheers!
tuxic

you have to bend the ik bone slightly for the solver to be able to automatically bend it to that direction, assuming that you want to move the ik control through the y local axis…

2 Likes

IK_pole.blend (891.2 KB)

The key is to add a Pole to the IK bone-constraint. EmptyA is at the origin, and EmptyB is to the right… Empty C is between and above these 2. Think of the Pole as the “elbow direction” of the IK modifier.

I created a chain of bones straight along the x-axis. But then to get them to bend for the IK modifier, I moved the heads/tails upwards 0.001, 0.002, & 0.003 to describe a mostly invisible upward arc. This is (i think) what MichaelBenDavid was suggesting. Sometimes this micro-adjustment will solve the problem magically, but to get full explicit control over where the elbow will bend towards, it helps to specify a Pole.

IK_boneConstraint_pole

In the IK bone-constraint, I’ve listed the Pole_Target as EmptyC. Right under that (in the IK bone-constraint panel) is the Pole_Angle. This is the Bone_Roll orientation that you want to face towards the pole (EmptyC).

To see what bone-roll you currently have, in Properties > Armature > Viewport_Display, turn on Axes. This gives you an overlay on the armature showing the bone-roll for each bone.


For bone-roll, angle zero (0°) is the bone’s x-axis, 90° is the bone’s z-axis.
In Armature Edit-mode, you can change a bone’s roll in the N panel (the right-side panel in the Viewport).

or you can use menu Armature > Bone_Roll > Recalculate_Bone_Roll > …

but if you later change the bone-roll, you may have to adjust the Pole_Angle in the IK_bone-constraint.