During my fall semester of junior year in college, I took a course called CIS563: Physics-based Simulations. This course is taught
by Dr. Chenfanfu Jiang, whose research focuses on realistic physics-based simulations.
He is well known in the computer graphics community for utilizing the material point method in his research and projects.
Prior to taking CIS563, I had zero experience with computer graphics simulations, let alone physics-based. I have always wanted to
learn how those millions of leaves in the bridge to the Land of the Dead interact with each other in Coco, or how the snow in Frozen seems to have
a personality of its own.
For the final project in the course, I created two different types of simulations using a method called Material Point Method (MPM).
There are lots of ways in which simulations can be done. Some methods represent objects as individual particles connected by spring like
edges and directly applies forces onto those particles. Other methods model objects with particle-voxel hybrid
(see Robert Bridson's book
on fluid simulations).
MPM is gaining popularity in the CG simulations community because it is fast, relatively easy to implement, and is pretty stable
for most material.
This method has two main components: a grid and a system of particles. First each particle's position, velogity, mass, density, volume, and the deformation
gradient are stored. We also initialize grid node data which include mass, velocity, and other helper data structures. The deformation gradient is derived from a body's deformation, a mapping from its undeformed configuration X to
its deformed configuration x. This particle information is then transferred to the grid. Next, forces such as gravity, elasticity, and self collision are calculated and applied to the grid.
The grid nodes themselves have velocity of their own, computed from the particles within them. We use the forces to update the new velocity of each grid node. Using either
implicit or explicit integration, we solve the system of linear equations to get new particle states from the updated grid velocities. These steps
get repeated via small time steps until the simulation is completed.
Using MPM, I created two different simulations - jelly-like material (elastic) and snow.
First I outputed particle data for each frame, then transfer this particle information to
Houdini using various Houdini nodes. In order to speed up the simulation output generation, I used
Ubuntu (dual-booted on my 8GB RAM Macbook Pro 2017).
The jelly material was more straight forward to implement than its snow counterpart. Snow simulation can be achieved by modifying
the jelly simulation code by removing elasticity and adding some new variables, including critical compression, criticle stretch,
hardening coefficient, Young's modulus, and Posson's ratio. These parameters together determines how the snow behaves.
I had more difficulty understanding the concepts behind snow simulations because there were so many different derivatives and
variables. Making the snow look visually appealing was also a challenge for me since I was new to Houdini and the tools I used works better for
jelly-like material than snow.
For more details on the termonology as well as the method described, please visit Dr. Chenfanfu Jiang's
thesis on MPM.