Game Engine Architecture

(Ben Green) #1
521

vector whose coordinates are expressed in joint j’s space into an equivalent set
of model space coordinates. Now, consider a vertex vBM whose coordinates
are expressed in model space with the skeleton in bind pose. To convert these
vertex coordinates into the space of joint j, we simply multiply it by the inverse
bind pose matrix, BBMM→→jj=()−^1 :


v vBj==MMB B1^ →→jjv BM( M).− (11.3)


Likewise, we can denote the joint’s current pose (i.e., any pose that is not
bind pose) by the matrix Cj→M. To convert vj from joint space back into mod-
el space, we simply multiply it by the current pose matrix as follows:


vCMM=vCjj (^) →.
If we expand vj using Equation (11.3), we obtain an equation that takes our
vertex directly from its position in bind pose to its position in the current
pose:
CMM
B1MM M
BM


()


.


jj

jj

j


→→−

=


=


=


v vC

vB C

vK

(11.4)


The combined matrix KB Cjj=()→→MM−^1 j is known as a skinning matrix.

11.5.2.2. Extension to Multijointed Skeletons


In the example above, we considered only a single joint. However, the math we
derived above actually applies to any joint in any skeleton imaginable, because
we formulated everything in terms of global poses (i.e., joint space to model
space transforms). To extend the above formulation to a skeleton containing
multiple joints, we therefore need to make only two minor adjustments:


xM

yM

xB

yB

xC

yC


  1. Transform into
    joint space


vMB

vMC

vj
vj


  1. Transform back
    into model space
    2. Move joint into
    current pose


Figure 11.25. By transforming a vertex’s position into joint space, it can be made to “track”
the joint’s movements.


11.5. Skinning and Matrix Palette Generation

Free download pdf