Thursday, November 18, 2010

How to merge animations?

There are two basic problems with copying animations from one figure to another:
  1. The skeletons do not match. First, the body proportions are off, especially if converting between male/female or realistic/stylized characters. And secondly, the non-obvious bones are often arranged completely differently. By obvious bones I mean the ones like armbones, shins and so on, that connect two visible joints. Non-obvious bones are hidden and their joints are not immediately visible - like backbone or shoulders. Thus the exact number and placement of such bones may vary, depending on how realistic and fluid motion is needed and how it is achieved.
  2. The bone orientations do not match. Even for bones that are perfectly aligned, like arms, the local coordinate systems can be very different and thus the transformations from one skeleton cannot be immediately carried over to another.
 How to deal with it?

In Khayyam I am currently doing the following procedure:
  1. Create one-to-one links between the well-defined bones of each skeleton - i.e. legs, shins, arms, forearms and heads. These function as anchors for matching body movements via IK solver.
  2. Pick rootmost joints of matched bones, i.e. hips and shoulders as anchor point pairs.
  3. Find the bone chain leading to last common ancestor of such pairs (starting from the point where previous chain ended). I.e. we get chains like these:
    3.1. Center_of_Mass -> Skeleton_Root -> Pelvis
    3.2. Lower_Backbone -> Upper_Backbone -> Chest
  4. Adjust chains, starting from rootmost, as closely as possible to anchor points using IK solver.
  5. Point all well-defined bones to the same direction as the originals, using IK solver

As you can see, it basically works, although some constraints on joint movement would be nice.

A demo video showing how dancing moves for DAZ skeleton can be imported to Esk Anderson figure

No comments:

Post a Comment