557
controlled by one or more blend weights. There are two primary meth-
ods of describing the set of clips that should be blended together: a fl at
weighted average approach and a tree of blend nodes. When the tree ap-
proach is used, the structure of the blend tree is usually treated as a
shared resource, while the blend weights are stored as part of the per-
instance state information.
- Partial-skeleton joint weights. If a partial-skeleton blend is to be per-
formed, the degrees to which each joint should contribute to the fi nal
pose are specifi ed via a set of joint weights. In some animation engines,
the joint weights are binary: either a joint contributes or it does not. In
other engines, the weights can lie anywhere from zero (no contribution)
to one (full contribution). - Local pose. This is typically an array of SQT data structures, one per joint,
holding the fi nal pose of the skeleton in parent-relative format. This ar-
ray might also be reused to store an intermediate pose that serves both
as the input to and the output of the post-processing stage of the pipe-
line. - Global pose. This is an array of SQTs, or 4 × 4 or 4 × 3 matrices, one per
joint, that holds the fi nal pose of the skeleton in model-space or world-
space format. The global pose may serve as an input to the post-pro-
cessing stage. - Matrix palett e. This is an array of 4 × 4 or 4 × 3 matrices, one per joint,
containing skinning matrices for input to the rendering engine.
11.10.2. The Flat Weighted Average Blend Representation
All but the most rudimentary game engines support animation blending in
some form. This means that at any given time, multiple animation clips may
be contributing to the fi nal pose of a character’s skeleton. One simple way to
describe how the currently active clips should be blended together is via a
weighted a verage.
In this approach, every animation clip is associated with a blend weight
indicating how much it should contribute to the fi nal pose of the charac-
ter. A fl at list of all active animation clips (i.e., clips whose blend weights
are non-zero) is maintained. To calculate the fi nal pose of the skeleton, we
extract a pose at the appropriate time index for each of the N active clips.
Then, for each joint of the skeleton, we calculate a simple N-point weighted
average of the translation vectors, rotation quaternions, and scale factors
extracted from the N active animations. This yields the fi nal pose of the
skeleton.
11.10. The Animation Pipeline