I K   (Inverse Kinematics)

IK, or "Inverse Kinematics" is one of the more popular ways to move the legs (and sometimes arms) of a character.  It has more uses than that, but moving legs is by far the most common.  With IK you create a chain of items (bones, objects, etc.) and tell the item on the end to move to wherever the "goal" item is.  So rather than individually adjust and position the items in the IK chain, you just move the goal around.

messiah has two types of IK:

  1. 2D IK: To control rotations, such as for arms and legs.  

  2. Telescopic IK: Used for things like pistons or old fashioned telescopes.

Both types of IK can be applied from the Animate tab, on the Inverse Kinematics block.  They can also be applied using expressions-- specifically, with the IK2D and IKTel functions (on the Functions pulldown list that's on the Command tab).

Things get very interesting when you have characters that combine the two; characters like robots, for example.

The basics of IK:

  • Once the character is setup (bones and objects loaded and placed), IK is set up on the Inverse Kinamatics block, which is on the Animate tab.

  • IK chains need to have three or more items in order to work; for example, three bones or two bones and a null at the end.  

  • One of the items (for example, the shoulder bone or null) is designated as the "anchor" by turning on the Anchor button on the Inverse Kinematics block.

  • The last item in the chain (for example, the wrist bone or null) needs to have the Calculate IK button turned on in the Inverse Kinematics block.

  • The last item (the End Effecter) needs to have an IK Goal designated.  To do this, use the Goal pulldown list on the Inverse Kinematics block.

  • It is not uncommon to use four items even for what you'd think would be a two bone setup.  For example, on an arm you would think that all you need is an upper arm and a lower arm; but most people start with a null object (Anchor) up at the shoulder, then put the upper and lower arm, then position a null object at the tip of the lower arm (the wrist) and make that the End Effecter.

The language of IK:

The Anchor is the root of the IK chain.  Any items that are above it in the hierarchy will not be affected by the IK (but the Anchor itself will be).  As stated in the list above, it is usually best to make the anchor a null object.

End Effecter:
It is recommended that you use null objects as end effecters instead of bones.  The reason for this is that having those extra bones there could have an undesired effect on the skeleton or interfere with the calculations of the other bones.

IK Goals:
An IK goal is the item (usually a null object) that the End Effecter tries to move to.  The IK goal is what you move around when animating with IK.

Rotational Limits:
It is often desirable to have limits placed on the joints of a character.  For example, your shoulder has a limited range of rotation.  In messiah there are several ways to accomplish this.  One way is to use the limit settings on the IK block, but the best way is to use the Clamp function.  With Clamp, you create an expression for each axis you want to limit, so if you want to limit the rotation for heading, pitch and bank, you'll need to make 3 expressions.  This is not difficult though, as you only really need to make one, then copy it twice and make slight changes to the copies (changing the channel and limits).  For more information about Clamp, click here.

Which is better, using the IK tab or using expressions?
It depends on what you are doing.  If it's just a simple character for a quickie animation, the IK tab may be the way to go.  If it's a bigger, more complex project, expressions are probably better.  Using the buttons on the IK tab to do your setup will be slightly quicker and somewhat more foolproof, but using expressions will ultimately give you more freedom and power.  For example, using the expressions version of IK, you have control over when the IK gets solved in relation to other expressions.

Converted from CHM to HTML with chm2web Pro 2.82 (unicode)