Game Development Reference
In-Depth Information
Figure 14.11. A tube, supported by three joints.
In our variable names, the calculation looks like this:
preFactor = (distanceVectorAbs0 / distanceVectorAbs
1)
/(timeStep timeStep);
scale(distanceVector, preFactor);
14.4.4 Skeleton-Driven Mesh
We now have a detailed force model consisting of several forces that can be added:
+ α neigh
i
f neigh
i
f total
i
= α rest
i
f rest
i
+ α detail
i
f detail
i
+ α bone
i
f bone
i
·
·
·
·
.
We can apply this model to a geometry with two bones connected by a joint,
with a cylindrical mesh around each bone (see Figure 14.11 ). The joints can be
moved freely by selecting them with the mouse and moving them around—this
causes kinematic deformation of the goal positions. The surface geometry fol-
lows the positions of the joints while experiencing secondary deformation. (See
Figure 14.1 (middle and right).)
14.4.5 Application to Smooth Skinning
This basic bone model works very badly, especially in joint regions where each
vertex should feel the influence of more than one bone. This is addressed by
smooth skinning (as opposed to rigid skinning, used before) techniques such as
skeleton-subspace deformation (SSD), which has been around in computer graph-
ics for quite a while [Magnenat-Thalmann et al. 88]. This is used, for example,
in the MD5 model format that comes from id Software's Doom 3 first-person
shooter. Vertex positions are not given explicitly but must be calculated by the
contributions of multiple weights that are assigned to joints. Here, the weights
have relative positions to the bones, not the vertices, so these weight positions