Summary:
Initially, Todd Koeckeritz leveraged Provot's Cloth Model (Deformation Constraints in a Mass-Spring Model to Describe Rigid Cloth Behavior). Then, Todd Koeckeritz leveraged Mezger's Cloth Collision Model (Improved Collision Detection and Response Techniques for Cloth Animation). Additionally, Todd Koeckeritz created a parameter named "Steps"/"Quality" to deal with a time issue. Daniel Genscher released the Blender Cloth Modifier in February 2008, according to BlenderNation.com.
Research Papers:
Todd Koeckeritz (Contributor of Blender Cloth) says in April 2006:
Provot was chosen when we started the project because I had the code written already from two years ago when I was working on cloth as a python module. So, we've started with that. However, the few semi-unique characteristics of the Provot paper referenced in the wiki page are being replaced now with a similar process from another paper. So, in some ways Provot is gone, or will be in the next release. However, the nice feature described by Provot in section 5 of his paper, deals with eliminating the super-elastic/rubbery effect that some cloth simulators exhibit. That was my reason for choosing the paper two+ years ago.
The initial checkin of Blender Cloth files for "trunk/blender/source/blender/makesdna/DNA_cloth_types.h" by Daniel Genscher (Contributor of Blender Cloth) reads in September 2007:
+/**
+* This struct contains all the global data required to run a simulation.
+* At the time of this writing, this structure contains data appropriate
+* to run a simulation as described in Deformation Constraints in a
+* Mass-Spring Model to Describe Rigid Cloth Behavior by Xavier Provot.
+*
+* I've tried to keep similar, if not exact names for the variables as
+* are presented in the paper. Where I've changed the concept slightly,
+* as in stepsPerFrame comapred to the time step in the paper, I've used
+* variables with different names to minimize confusion.
+**/
Todd Koeckeritz talks about Cloth Collision Detection in March 2006:
The collision system we've implemented is described in papers by Metzger in 2002 and 2003 and is known as K-DOP BVH. From an end user standpoint, there isn't too much that needs to be understood about this implementation that is specific to the collision system. In most cases, you either want to spend CPU time computing collisions or you don't.
Todd Koeckeritz talks about Time Steps in March 2006:
There is one more important concept for an end user to understand and that is the one of how the simulation deals with time. It is impossible to model all the atoms or molecules in a piece of cloth and those objects with which it might collide as it would simply take too much time to compute the results, so we compromise by using the point masses and springs described above. There is a similar problem when it comes to dealing with time. While some parts of the cloth modifier attempt to deal with time in a continuous sense, other parts only compute the results at specific points in time. For example, think of dropping a ball on frame one and having it hit the ground on frame 21. If you only had results on frame 1 and frame 21, you'd have no idea on how the ball behaved between those frames. It might have been moving at a constant velocity or it might have been accelerated from rest by gravity or another force. On the other hand, if you had all the frames from 1 to 21, you could examine the position of the ball in each frame and then know much better how the ball moved during that time. With that new information, you can then better predict how the ball should move between frames 22 and 51. The cloth modifier has some similar problems, although we deal with them at the sub-frame level. To do this a parameter called Steps is provided. The higher the number of steps, the more time is spent computing a result, however that result should be more precise. The lowest setting for Steps is 1, meaning we'll run the simulation once per frame. This is the fastest way to get a result from the cloth modifier, however, the results might be less physically accurate than if you choose a larger number.
I've concluded that Daniel Gensher renamed "Steps" to "Quality" at some point.
Parameters:
The Blender Cloth Modifier is based on a Spring Network, according to Todd Koeckeritz in March 2006:
The spring network is built of three types of springs and the user is allowed to control the stiffness of the springs separately: (1) Structural Springs are built on the edges of the mesh. They provide the main structural integrity of the cloth. (2) Shear Springs are built on the diagonals of quad faces and provide some resistance to shearing forces in the cloth. (3) Flexion Springs are built similarly to the Structural Springs, but are built on top of two close to parallel Structural Springs. Flexion Springs provide resistance to folding, the stiffer they are, the more the cloth will attempt to retain its original shape. Think of them as starch for your collar.
The Blender Cloth Controls were more detailed in March 2006:
- Collision : This toggles whether the object is a collision object. Collision objects are not cloth objects, they only allow the cloth
objects to react to them when they collide. To collide with a cloth
object, this button should be toggled on and the object should share
a layer with the cloth objects with which it should collide.- Bake Settings : This button switches the mode of the cloth modifier panel to baking mode, allowing the user to bake the results.
Simulation Type : Presently there is only one solver implemented, the Provot solver as described in his paper above. There are however 3
forms of integration, Explicit Euler, Middle Point and Runge-Kutta.- Collision Type : This allows the user to specify what type of collisions to process for the cloth object. Presently only the None
and KDOP options are available.- Pinned Vertex Group : If a vertex group is chosen in this menu, those vertices are not affected by the cloth modifier. They are pinned in place.
- Mass Scale Vertex Group : This vertex group allows the user to multiply the point mass by the influence/weight a vertice has in the
vertex group. Thus parts of the cloth can have different weights
making part of it appear wet or heavier for other reasons.- Mass Vertex Group : This vertex group allows the user to directly specify the weight of the vertices. The Scale parameter is used to
adjust the results of this.- Scale : This allows the user to scale the results of applying a Mass Vertex Group.
- Gravity X, Y and Z : These provide an external force to the cloth.
- Spring Stiffness : These three parameters control the Structural, Shear and Flexion spring stiffness.
- Damping Springs : This is the damping factor applied to motion produced by the springs.
- Damping Viscous : This damping factor is applied to all motion of the cloth, higher values produce results like moving through water or mud.
- Damping Self Fr : This will be used as the damping factor for friction caused by self collisions of the cloth.
- Damping Friction : This damping factor is applied to the cloth vertices that collide with collisoin objects.
- Simulation Steps : This controls how many steps per frame are used in the simulation. Higher values produce better results in general, but take longer to compute.
- Simulate Adjustments : Adjustments controls whether or not attempts are made to keep the springs in the cloth from exceeding their
original length multipled by Tc. When set to -1, the Structural
springs get increasingly stiffer, up to 100 times stiffer, as the
springs's length divided by its original length aproaches Tc. At 0
(zero), not adjustments are made. At 1 (one) or greater, Provot's
algorithm of adjusting the springs is done as many times as specified by this parameter.- Simulation Mass : This specifies the base mass of a vertice in a cloth object. The final value of the mass for any given vertice can
be influenced by the Mass Scale Vertex Group and/or the Maxx Vertex
Group.- Simulation MinZ : Provides an artificial floor below which the cloth vertices will not go.
- Simulation Epsilon : This provides a buffer distance for collision detection and response. In the current implementation, small values
in the range of 0.001 to 0.005 generally work best, although in some
cases larger values may be desired.- Simulatin Tc : This specifies the critical deformation length as a ratio to the original spring length. This value has no effect if
Adjustments are 0 (zero).- Simulation Spr Len : This allows the user to specify an artificially large or small base spring length. When this value is 1.0, the simulation behaves normally. With values less than 1 (one), the springs are treated as if they were shorter than they actually are which can be useful to shrink clothing to fit tighter on a model ... think spandex. If this value is greater than 1 (one), it provides an artificial force to expand the cloth object which can be useful to give bounce to a skirt or dress.
- Simulation Pre-roll : This provides some artificial frames prior to the start of the animation to allow the cloth to find its resting
position.- Simulation Col Loop : This is the maximum number of times per step collisions will be tested. This parameter is likely to go away.
Daniel Genscher simplified the controls by May 2008:
- StructStiff: Structural Stiffness also includes shear stiffness. Both define the stiffness of the structure of the cloth. Lower values will make the cloth look like elastic rubber.
- BendStiff: Bending Stiffness describes how the cloth forms its wrinkles. Higher values result in bigger but not necessarily more
wrinkles.- Spring Damp: Specifies how much the amount of movement will be lowered. This can prevent unwanted jiggling, and can result also in
smoother animation.- Air Damp: How thick is the air? How much movement will it stop due to its thickness? Practically speaking, you receive slower movement of cloth with higher air damping. With air damping set to zero, you have moon surface conditions.
- Quality: More quality gives more stable cloth (less jiggling with high BendStiff) and additionally you receive better collision
responses.- Mass: More mass gives heavier cloth, with slightly more weight on the border like normal cloth.
- Gravity: X, Y and Z direction of the gravity you want to have working on the cloth.
- Min Distance: Defines the cloth thickness where the collision response kicks in. It helps to keep a minimum distance between the
Cloth and the colliding mesh. Just increase it if you encounter
collision penetrations (This is only one of two available options
to resolve that issue - you could also increase the Quality on the
first Cloth panel).- Friction: Friction defines how good a cloth can slide over a collision object. See this for how friction effects the cloth
collisions.- Min Distance: Defines the cloth thickness where the selfcollision response kicks in. It helps to keep a minimum distance between the
Cloth.- Selfcoll Quality: This values helps you to resolve several layers of selfcollisions. Be carefull: the Collision Quality has to be at least as high as Selfcoll Quality to have it working!
- StructStiff VGroup: Vertex Group to be used for Structural Stiffness scaling.
- BendStiff VGroup: Vertex Group to be used for Bending Stiffness scaling.
- StructStiff Max: Defines the Structural Stiffness maximum. The structural stiffness gets scaled between this maximum (the red
painted values on the vertex group) and the minimum StructStiff on
the first Cloth panel (blue painted vertices on the vertex group). A
linear interpolation function is used inbetween.- BendStiff Max: Defines the Bending Stiffness maximum. The bending stiffness gets scaled between this maximum (the red painted values on the vertex group) and the minimum BendStiff on the first Cloth panel
(blue painted vertices on the vertex group). A linear interpolation
function is used inbetween.