The purpose of this project was to explore real-time modeling and simulation of cloth. The main goal was to design and develop a simplified calculation model that would accurately exhibit the properties of woven cloth. A variety of modeling methods were tried, but all were based on a discrete particle representation of the cloth surface. All methods showed varying levels of success.
The particle based representation
The cloth modeled in the simulation is represented by a grid
of particles with mass-less connections between them. This allowed
for the program to perform the calculations on the cloth on a particle
basis, looping through each particle. Each particle is defined by
a mass, pointers to its neighbors, and its desired distance to any neighbor.
For every iteration in the simulation, the distance from each particle
to each of its neighbors is re-calculated, and the values for velocity
and position of the particle are re-calculated based on the distance.
Hooke’s Law
The connections between the mass-less particles were modeled
as springs, to approximate the stretch ability of woven cloth. Hooke’s
Law is the law that describes the force between two points connected by
a single spring. This force value is defined as:
F = -Kx
Where F is the force value between the two points, K is some arbitrary
constant between 0 and 1, and x is the stretched distance amount of the
particle. This means that when the two particles are at their
“optimum distance” from each other, x is zero, and therefore the force
is zero. As the distance between them increases, F, which is a vector
quantity, becomes a larger negative number, meaning that the two particles
are being pulled back together. Likewise if the distance between
the particles is less than the optimal distance, the force pushes them
apart.
Approximating the differential equation
Every particle in the cloth has a velocity and position.
Since we are simulating woven cloth, every particle’s velocity or position
is based on the velocity and position of every other particle. This
creates a very complex differential equation, which cannot be explicitly
solved. The goal in accurately simulating the cloth in real-time
is to approximate this equation for each particle over a small time step
(1 frame of movement, for example).
All the simulation techniques allowed the forces between each
particle to change instantaneously, and then calculated the change in the
other values over the time step based on the forces. This meant that
any drastic change in the force resulted in a drastic change in the velocity
and then position. Since the force is directly calculated from the
position, there were many cases where the simulation would become unstable,
sending each of the particles on extremely high velocities back and forth.
This problem also occurred when the time step was too large for
the current state of the simulation. For example, if the particles
in the system were moving very fast, a time step the length of an entire
frame may be too large, because such a coarse granularity would produce
a large movement, which would in turn produce a large force, sending the
simulation out of control.
Finally, it became apparent that all of the methods for approximating
the equation needed a time step size that could vary depending on the current
state of the simulation. To arbitrarily decrease the time step to
a constant value would unnecessarily create a large amount of calculating,
even when forces were small.
Euler’s Method
Euler’s method was one of the first approximation methods used
for modeling the cloth. Euler’s method is a simple summation of the
derivative function at each time step to approximate the integral.
For the simulation, each time step the forces between each
particle were calculated. The force was then summed into velocity
for each particle, and the velocity was summed into the position of the
particle, which modified the system so the forces were different the next
time step.
This method made the grid of points behave a lot like actual cloth, including “billowing” back and forth when perturbed. One of the problems with this method of simulation was that the cloth was extremely “stretchy”, as the bonds between the particles expanded and contracted around their equilibrium point, looking for a way to correctly balance the force of gravity with the force holding the points together.
Second Order Taylor Series
This method is quite similar to Euler’s method (which is in fact
a first order Taylor series), except that the position at each time step
is based on its second derivative, force, as well as velocity. This
essentially allows for forces that are compensating for the motion of the
cloth to modify the position much faster and therefore have a greater effect.
The result was that the “stretchiness” of the cloth was reduced somewhat.
Second Order Runge-Kutta Method
The Runge-Kutta method is a way to approximate the value of a
function by only knowing that functions first derivative. In this
simulation, I approximated the value for velocity without knowing anything
more than the first derivative of velocity, acceleration (force).
This method works by plugging in different values to the force equation
(Hooke’s Law) for a single time step, therefore providing a “look ahead”
which shows what the force will be in the next time step. The result
of using this method of simulation is that the system found an equilibrium
point faster than the other two methods of simulation, and therefore appeared
less “stretchy”.
Going Further
In addition to the above methods of simulation, I would like
to try the Fourth Order Runge-Kutta method, which is much more computationally
intensive but allows for an “error value” look ahead, whereby the amount
of error in the calculation at a time step can be predicted and the time
step can then be shortened to more accurately model the function
before the more inaccurate time step is taken.
It might also be advantageous to look at other ways of representing
the cloth surface or of simulating the cloth. Perhaps some method
which does not use springs would be more accurate, because the thread in
cloth does not behave much like a spring, and only allows a small amount
of deformation.