In this assignment, you'll implement a cloth simulator and use it to suit up a moving human figure. Cloth is modeled using a spring mass damper system, with springs and dampers for stretch, shear and bend. The human figure is represented using a hierarchy of cylinders, one for each link of the body. The motion of the cylinders is obtained from optical motion capture (ASF and AMC format). We provide code to display and animate the human figure, and a basic particle system. Our particle data structure allows you to store a system of particles in 3D and add a spring between any two points. Our starter code shows you how to add a stretch spring between two points using this data structure, you'll have to implement shear and bend using this framework. We provide code to incorporate gravity forces on the particles, you'll have to implement forces due to spring forces, namely:
The starting source code for the assignment is at /afs/cs.cmu.edu/academic/class/15464-f05/asst3/src_clothSim/
You may have to do the following to get the code running:
setenv LD_LIBRARY_PATH /afs/cs/academic/class/15464-f05/lib/
Description of code:
You'll be writing various functions within the following two classes: CCloth and CPhysEnv.
CCloth implements a cloth simulation system and has functions for creating and displaying the cloth. It has the function CreateClothPatch that creates an array of particles (stored in the structure t_Visual) arranged in either a rectangular pattern or a skirt pattern. You'll have to modify this function to add springs to the array of particles. The function RunSim initializes and starts the particle simulator. This class also has functions for loading, displaying and setting the collision cylinders from the AMC files.
CPhysEnv implements the guts of the spring mass damper system. It has structures for springs, particles, collision cylinders, integrators, etc. You'll have to write the function ComputeForces that will compute all the forces acting on the particle system. The starter code shows you how to implement gravity forces, you'll have to implement all the other forces acting on the particle system (springs, dampers). Our starter code implements constraint forces (to attach a piece of cloth to the moving cylinders). You have to write functions to detect and resolve collisions between the cylindrical objects and the particle system. Fill up the necessary sections of the functions: DistPointCylinder, CheckforCollisions, ResolveCollisions and ResolvePenetrations. We recommend using penalty-based methods to handle penetrations (by using a stiff spring). Finally, you should write the function Simulate that steps the simulation forward in time by integrating the particle system that you create using your choice of integrator (we provide you with Euler, midpoint and RK-4). This function sums up all the forces on the particles (including ones due to collision) and integrates forward by one step.
Note: We have provided the function arguments with some functions (that you are supposed to fill) and not with others. Please feel free to modify them according to your style and convenience.
Steps: First Load the actor (ASF file) , then load the motion (AMC file), load Cloth and then press the Simulate button. If everything works, the rectangular piece of cloth should swing around and be attached to the hands of the cylinder man. As the human moves around (when you press the play button), the cloth should collide against the cylinders of the legs and should move in a physically correct way. We provide you with an executable from our implementation, with all forces and collisions implemented (look for the executable clothSimFinal in the src_clothSim directory). This should run on the cluster machines. Your result should look like the one in clothSimFinal when you are done with this assignment.