i
i
i
i
i
i
i
i
4.4. Vertex Blending 83
ing systems have this same sort of skeleton-bone modeling feature. Despite
their name, bones do not need to necessarily be rigid. For example, Mohr
and Gleicher [889] present the idea of adding additional joints to enable
effects such as muscle bulge. James and Twigg [599] discuss animation
skinning using bones that can squash and stretch.
Mathematically, this is expressed in Equation 4.56, where p is the orig-
inal vertex, and u(t) is the transformed vertex whose position depends on
the time t.Therearen bones influencing the position of p,whichisex-
pressed in world coordinates. The matrix M
i
transforms from the initial
bone’s coordinate system to world coordinates. Typically a bone has its
controlling joint at the origin of its coordinate system. For example, a
forearm bone would move its elbow joint to the origin, with an animated
rotation matrix moving this part of the arm around the joint. The B
i
(t)
matrix is the ith bone’s world transform that changes with time to ani-
mate the object, and is typically a concatenation of a number of matrices,
such as the hierarchy of previous bone transforms and the local animation
matrix. One method of maintaining and updating the B
i
(t)matrixanima-
tion functions is discussed in depth by Woodland [1376]. Finally, w
i
is the
weight of bone i for vertex p. The vertex blending equation is
u(t)=
n−1
i=0
w
i
B
i
(t)M
−1
i
p, where
n−1
i=0
w
i
=1,w
i
≥ 0.
(4.56)
Each bone transforms a vertex to a location with respect to its own frame
of reference, and the final location is interpolated from the set of com-
puted points. The matrix M
i
is not explicitly shown in some discussions
of skinning, but rather is considered as being a part of B
i
(t). We present
it here as it is a useful matrix that is almost always a part of the matrix
concatenation process.
In practice, the matrices B
i
(t)andM
−1
i
are concatenated for each
bone for each frame of animation, and each resulting matrix is used to
transform the vertices. The vertex p is transformed by the different bones’
concatenated matrices, and then blended using the weights w
i
—thus the
name vertex blending. The weights are nonnegative and sum to one, so
what is occurring is that the vertex is transformed to a few positions and
then interpolated among them. As such, the transformed point u will lie
in the convex hull of the set of points B
i
(t)M
−1
i
p, for all i =0...n− 1
(fixed t). The normals usually can also be transformed using Equation 4.56.
Depending on the transforms used (e.g., if a bone is stretched or squished
a considerable amount), the transpose of the inverse of the B
i
(t)M
−1
i
may
be needed instead, as discussed in Section 4.1.7.
Vertex blending is well suited for use on the GPU. The set of vertices in
the mesh can be placed in a static buffer that is sent to the GPU one time