Game Development Reference
In-Depth Information
in reaction to this small deformation. This type of interconnected elasticity is
what a relaxation deformer attempts to replicate.
To do this, we will borrow (or steal) concepts from cloth simulation. The
mesh relaxation algorithm described here is almost identical to Thomas Jakob-
sen's constraint solver as described in his seminal paper, Advanced Character
Physics 2003 [Jakobsen 03]. See Section 11.3 for details on solving constraints
with relaxation.
As in Jakobsen's cloth simulation, distance constraints are created between
neighboring (in his case) particles (in our case, vertices). These distance con-
straints are solved by projection for a number of iterations, yielding a solution that
approximately satisfies them all. By building distance constraints (we can think
of them as springs), we are effectively constructing a linkage between neighbor-
ing vertices such that a deformation on one vertex is imparted to its neighbors
through the constraints. For a very readable introduction to position-based con-
straint solvers, please see [Muller et al. 06].
13.5.1 Building Edge Constraints
I have experimentedwith various methods of creating constraints (Euclidian prox-
imity, edge distance, across faces, etc). In my experience, the best behavior is
obtained by simply using the edges of the mesh itself. So there will be the same
number of constraints as there are edges. A constraint, therefore, contains the in-
dex to both vertices, as well as the initial distance between them (see Listing 13.3).
struct edgeConstraint
{
Ve r t ex vertexA; //Pointer to vertex
Ve r t ex
vertexB; //Pointer to vertex
float restLength;
}
Listing 13.3. A distance constraint ensures that the distance between two vetices, A and B,
remains as close as possible to the original distance (rest length).
13.5.2 Solving Constraints
Once we have a list of constraints, solving them is done by iterating over all of
them a set number of times (I've found five to ten iterations is usually plenty),
adjusting the position of each vertex accordingly. When the constraints have been
sufficiently solved, local deformation on the mesh will be distributed across the
surface, giving it a very convincing sense of elasticity.