Volume Deformation Techniques


I have been wondering about the limitations of the Free Form Deformation technique for a while. I eventually came to the conclusion that there is no way around the problem except to give the mesh object some skeleton and some sense of consistent volume.

Well, the true motivation is that I needed to graduate from my Master's program, so I had to pick a topic. But I picked volume deformation because it's something that fascinates me. I think of most real-time computer characters as a combination of "logs of wood." In other words, if you watch carefully of all video game characters, each body part of a character is disjoint from the others. From far away, this looks fine. However, when viewed up close, the seams between (for example) the upper arm and the torso makes the character look horrible. Furthermore, it seemed to me that when a particular body part is "affected," the effects should propegate to the others. For example, if a character lands hard on the floor, instead of bouncing off like a rock (or a log of wood), it should exhibit dynamic motion such as movement in the muscles due to the force.

What I Did

Essentially, I created a continuous mesh character using Lee Markosian's 99 Siggraph paper titled Skin based on a basic skeletal model. Then I borrowed some motion-captured data files from a friend. The idea is that if I move the skeletons based on the motion-captured data, I should see dynamic motion in the character's skin mesh...

To accomplish that, first I need to give the character a sense of "volume." The volume of the character is represented by a bunch of sample points. When I connected these sample points to the skeleton and the surface mesh, I created a mass spring model... Now, by moving the skeleton around, the springs will get pulled or shrunk, creating forces that I can calculate to play with... In the end, these forces will affect the positions of the skin mesh points, effectively deforming the character.

Playing with the forces is the bulk of the thesis. I tried three different types of volume deformation techniques, basic mass-spring model, a 2nd order constraint model, and an approximate finite element method...

Mass Spring Model

The cube is just a test bed to try out my basic algorithmic concepts... A character is difficult to debug, while a cube's "behaviors" should be much simpler...

In the picture above, the left is a picture of a 3D cube, and the right is the internal structure of the cube itself. The blue stick is the actual "skeleton," the spheres are sample points/mass points, and the dark purple lines are the springs.

Human Model

As unbelievable as it is, I can no longer find the animation sequences that I have rendered... I think the files were destroyed after I graduated from Brown University's CS Department. So, pictures will have to do... sigh.

The traditional Mass Spring Models are intuitive to create, but difficult to control correctly. Tweaking the time step, spring constant, and damping constant can be a very tedious process on top of finding the correct connectivity between mass points. I have implemented two approaches that would stablize the models to a certain degree. One is using a 2nd order deformation constraint, and the other using an approximate finite element method with implicit integration. For more information or the specifics about this project, feel free to read my thesis! (And if you ever do, PLEASE do email me. It's an amazing feeling to know that someone actually cares enough to read that baby of mine... And it proves my advior Nancy right about actually putting in the time to write it up after the project was complete)

In the left pictures, the blue sample points are surface points, green are volume, and red are skeletal.

Final Rendering