
Download demos (zip, 1.1 Mb)
( controls: WASD + mouse [camera], F/G [apply force], Q [start simulation] )
This demos illustrates our research on deformable body dynamics.
We (me and FD) developed a method of simulating elastic and plastic deformation of bodies that can be easily integrated into a typical modern game rigid body dynamics pipeline.
The soft bodies are represented by particles and joints between them that can be solved together with rigid-body constraints.
This makes it possible to create constraints not only between the soft bodies, but also between soft and rigid bodies that will be solved simultaneously as any other constraint in the rigid body dynamics simulation.
As soon as your impulse-based dynamics engine is capable of handling points (that are totally the same as bodies, but without a rotational part in velocities, positions, forces and accelerations), and custom joints are supported, you can easily employ our method.
This approach finally makes it possible to generate contact points between soft and rigid bodies the same way they are generated for rigid bodies, making the interactions between soft and rigid bodies smooth, with the soft body being an integral part of the simulation.
The algorithm behind the soft body simulation is not a spring-mass simplification, but a true linear Finite Elements Method. The method uses tetrahedral finite elements, the infinitesmall strain theory with stiffness warping used to eliminate the artifacts of linearization, and the matrix form of the Hooke's law that enables the user to provide material properties in the form of the Poisson's ration and Young's modulus.
The algorithm is designed for real-time simulations; almost everything is precomputed and the code that is run every frame is as small as possible and easily parallelized per joint (per tetrahedron). Specifically there's no integration of a stiffness matrix or global matrix reassembling in this code.
For stiff systems, the accuracy of the typical Projected Gauss-Seidel solver is insufficient, so we propose a new method for solving LCPs that is based on conjugate gradients and has never been used in the game industry before; in fact the method was adapted by us so that with our modifications it is possible to substitute the most popular Projected Gauss-Seidel for this method in a typical impulse-based dynamics engine.
The new solver is also fit easily for GPU parallelization (as well as our FEM implementation), so we present you a version that runs on the GPU using CUDA technology.
Please try out the demos; if you are interested in the technology, feel free to contact us.