Retargeting Animation Trajectories

Some animation engines track trajectory information for character animations, expressed as the translation and rotation delta between successive frames of the animation. This information allows the engine to blend multiple different animations regardless of their starting positions. Blending the translation, rotation and scaling deltas of the animations together at each frame ensures that the result of the blend will end up at with appropriate translation, rotation and scaling relative to the previous frame.

However, this trajectory blending can be problematic when you retarget an animation to a character with different proportions—for example, when retargeting a walking animation from a large character to a much smaller character:

To solve this problem, HumanIK can convert translation and rotation deltas you specify for your source character’s animation into the character space of your target character. These adjusted delta values provide your animation engine with the actual trajectory being followed by the target character, allowing you to blend other animations on top of the retargeted animation.

Setting up trajectory retargeting

The instructions below build upon the basic instructions for setting up and carrying out a retargeting, presented under Using HumanIK.

  1. When you set up your target character’s HIKPropertySetState:

  2. At each frame, when you set up your source character’s HIKCharacterState, store the delta translation, rotation and scaling values since the previous frame of the animation into the values maintained by the source character’s HipsTranslationId Node.
  3. At each frame, when you retrieve the results of the retargeting from your target character’s HIKCharacterState, retrieve the adjusted delta translation and delta rotation from the target character’s HipsTranslationId Node. Values are expressed in global space.

    If the source character does not have a HipsTranslationId Node, the HipsTranslationId Node of the target character will contain values retargeted from the source character’s HipsNodeId Node.