Mass-Spring Model
Particle Grid
Our mass-spring model consists of a square grid of particles, each
with unit mass and at (initially) unit distance away from the adjacent
particles in its row and column. The cloth is then drawn as opaque
polygons (triangles) that pass through the particle positions
(although the grid can be viewed without the cloth overlay in order to
see the inner workings of the cloth model).
Spring Connections
Holding the masses in the grid formation are three types
of springs, as seen in the diagram below. Vertices that are
adjacent along column or row lines are connected by structural springs, and springs that connect
two vertices at opposite corners
of a grid square are shear springs.
Structural springs serve to hold the cloth in its natural square
state, but translational forces on the cloth as a whole are not
adequately transmitted through
the cloth by a model that breaks oblique forces into orthogonal
components along a small number of nodes. Naturally, a model
connected only by structural springs but with a large number of
component particles would model the real forces at work in a cloth
very well, but since computational costs greatly restrict the
number of nodes we can use, shear springs are necessary to aid the
realistic appearance of force propagation. Additionally, as discussed
below, shear springs can be used to easily effect certain desired
cloth appearances.
Bend springs extend in the same
directions as structural springs but connect nodes that have one node
between them. Keeping these springs stiff restricts the cloth from
bending too much out of the original plane of the grid. Notice that
shear springs act in a similar way, since they skip over one node and
thus prevent "bending" along a different axis -- namely, they prevent
the cloth from tearing in the plane.
All of these interconnecting springs are realized as simple, damped
Hooke's Law springs -- the restoring force in each spring is directly
proportional to the displacement of the endpoints of the spring beyond
its resting distance, modified by a damping factor proportional to the
relative velocity of the cloth vertices. Thus, external forces or
perturbations against the cloth cause the cloth to react exactly as
the viewer would expect. For instance, if one corner of the cloth is
pulled, the rest of the cloth is dragged along too. As another
example, if the cloth is falling through the air, and one point is
suddenly snagged by, say, a fishhook, the cloth will drape down around
that point, and will even bounce a little at the bottom of the
downward swing before coming to rest.
A brief look into our force calculations: at each timestep we loop
over every vertex in the cloth, determining all the forces contributed
BY that vertex, through the springs, to all of the vertex's neighbors
(or two-node-away neighbors, in the case of bend springs). Forces are
calculated through an explicit Euler method solution to the Hooke's
Law differential equations that relate force, velocity, and position over
the springs. Self-intersection handling (decribed directly below)
takes place in a separate loop over the cloth.
Self-Intersection
We now have a rudimentary 3-D cloth model. Imagining this cloth
moving in three dimensions, it is easy to see that nothing in
particular about the model restricts one subset of the cloth vertices
from passing through the plane of some other section of the cloth.
That is, the springs themselves are only modeled as forces, not as
actual objects. Thus, to make the cloth look even feasible, some form
of self-collision detection and handling is required in the model.
While many previous models have resorted to standard point-plane and
edge-edge intersection tests, McDonald and Welland [4] describe a
complex model for very accurate cloth-cloth interaction that
avoids costly intersection tests and unrealistic intersection
handling. We implement only a limited version of their model, but the
key principle remains intact: since intersection testing is so
expensive, and the offending nodes/planes must still be handled in
some manner after the intersection has been detected, we simply apply
the "handling" effect to all nodes that are within a certain radius of
one another. That is, we simply apply a universal repulsive force that drops off in inverse
proportion to the square of the distance between each pair of cloth
vertices. Using a small coefficient for this repulsive force, most
nodes are not affected at all by the repulsion, but nodes that come
too close to each other are strongly restrained from coming any
closer. Depending on the other cloth parameters and how fast the
interacting components are approaching one another, this feature can
result in a highly realistic sliding, rolling, or
bouncing effect.
Environment
Around this cloth foundation, we have constructed a 3-D cage that is
controlled by a quaternion-based trackball. Inside the cage there is
a strong gravitational force which helps avert excessive cloth
floatation (and can be used for other purposes, such as to create
wind). With the trackball interaction of the mouse, the user can
apply point forces to the cloth in any direction. Additionally, the
user can effect the aforementioned "fishhooking", such that a moving
cloth can be suspended in midflight in any number of positions.
Cloth Types
By varying the springs' resting lengths, restoration constants, and damping
coefficients, along with the coefficient of global repulsion, the user
can create cloths that vary widely in appearance, response to external
forces, and interaction with itself and the 3D cage. Please view
several examples and experiment with the Windows application we have
created on the next page:
Main Page
Results and Executable
This page last updated: Tuesday, March 15, 2000.
E-mail the authors: Will Portnoy and Dan Grossman