Reach

The concept of Reach is slightly different for inverse kinematics and retargeting.

Inverse kinematics

When using the inverse kinematics solver, Reach controls the blending between the original FK stance of your character and the target points you define in the HIKEffectorSetState.

Each Effector has two Reach values: one that controls translation, and one that controls rotation.

Reach Translation

Reach Translation controls whether the position of a joint generated by the inverse kinematics solver is at the original FK position, the position of the Effector, or a position in between those extremes.

 

For example, in the image on the left, the green locator represents the Effector corresponding to the left wrist joint.

With a Reach Translation value of zero, the position calculated for the left wrist by the inverse kinematics solver is kept at the FK position (shown by the yellow skeleton).

 

With the maximum Reach Translation value, the inverse kinematics solver places the joint at the position of the Effector, discarding the original FK position entirely.

Values in between these extremes blend the position of the FK pose and the IK target.

Reach Rotation

Reach Rotation is exactly analogous to Reach Translation, but it controls whether the rotation of a joint generated by the inverse kinematics solver uses the orientation of the joint from the original FK pose, the orientation of the Effector, or an orientation in between those extremes.

 

For example, in the image on the left, the green locator is rotated, giving a desired orientation for the left wrist joint.

With a Reach Rotation value of zero, the rotation calculated for the left wrist by the inverse kinematics solver is kept at the original FK value (shown by the yellow skeleton).

 

With the maximum Reach Rotation value, the inverse kinematics solver rotates the joint to the same matrix as the Effector, discarding the original FK rotation entirely.

Values in between these extremes blend the rotation of the FK pose and the IK target.

Combining Reach Translation and Reach Rotation

By combining Reach Translation and Reach Rotation, you can pin your character’s joints either to their original FK positions or to specific locations or item in your scene.

If you set both the Reach Translation and Reach Rotation values for an Effector to their maximum values, the inverse kinematics solver will not take the original position and rotation of the joint into account at all when calculating the new stance for the character. You can use this setting to effectively pin the joint to the position and rotation of an item or location in your game.

If you leave both the Reach Translation and Reach Rotation values for an Effector at zero, the inverse kinematics solver will not attempt to move the corresponding joint toward its Effector at all, no matter what the position and rotation of that Effector may be. You can use this setting to effectively pin the joint its original position and rotation.

Note however that in both cases the joint may be moved due to the pull of other joints. See Pull.

Animating Reach

Many typical uses of HumanIK involve adjusting an animation over time in order to have a character’s limb reach a certain point or interact with a certain item at a specific time—for instance, the character reaching out its hand to grasp a doorknob.

A typical approach to this situation is to set the translation and rotation of the appropriate Effector—in this case, the right hand—to the final desired position, and to animate the Reach settings, increasing them at each frame. At the first frame, the Reach values should start out at zero, leaving the original forward-kinematics animation unchanged. At the final frame of the character’s movement, the Reach controls should reach their maximum values, drawing the character’s hands to the final goal. At each frame in between, the Reach controls should be set to values interpolated between zero and maximum, producing a smooth movement towards the goal.

Retargeting

When using the retargeting solver, Reach determines the most important points of contact between the source animation and the target character—i.e., the joints that should be synchronized between the two characters in three-dimensional space. These points of contact are sometimes at the hips, or, when retargeting an animation to a character of a different size or scale, the feet. By default, the HumanIK retargeting solver uses the feet as the point of contact between source and target.

 

For example, in the image on the left, the original animation is shown by the red skeleton. When retargeted to a shorter character, the Reach settings should make the feet the important point of contact.

 

However, if the animation involves grasping a trapeze, it is not appropriate to use the feet as the points of contact. Because the target character is shorter, it will appear to hang in mid-air when its feet are pinned to the translation of the feet in the original taller animation.

 

In this case, setting the hands as the point of contact between the source and target allows the character to appear to grasp the trapeze.

Animating Reach

You can set Reach settings for the position and orientation of multiple different Nodes in your character. The retargeting solver balances the competing requirements of all these Reach settings to determine how it aligns the final generated pose to the placement of the original animation. This balancing between different Reach settings allows you to blend the points of contact over time. For example, if the character in the example above starts out in a standing pose and jumps up to grasp the trapeze, the Reach settings must start out by prioritizing foot contact, and must gradually shift to prioritizing hand contact at the time that the animation is supposed to grasp the trapeze.