Rigid body simulation for 3D character animation

Martin Kleppmann

Implementation notes for Alfred falling down stairs

The simulation on straight stairs and on the sprial staircase are set up in a very similar way. Each scene consists of two bodies, a polygon model of the staircase and Alfred himself. In each case, the staircase is held in place by three 'nail' constraints. (It seems intuitively bizarre that one might make a whole staircase immobile by only three nails, but in the simulation the magnitude of the forces is, of course, almost irrelevant!) Alfred is an articulated body as described in the dissertation, with the mesh bound to a skeleton of 25 bones.

All meshes and skeleta are defined in an XML input file. All joints' rotation is restricted in a way which approximates the anatomical reality. Nonetheless the body can enter poses which, although they are not impossible, look rather uncomfortable. This is because a pose does not gradually become more uncomfortable as the limit is approached, but action takes place only at the limit.

For purposes of collision detection, the shape of the Alfred mesh is approximated by 252 little spheres. The staircase is not approximated. Thus this simulation does not make use of the usual vertex/face and edge/edge collisions; instead, sphere/face and sphere/edge collisions occur (on contact with the staircase), and sphere/sphere collisions (on contact of different parts of the articulated body, e.g. the hand against the chest). I found the use of spheres to be the most reliable technique with such a complicated mesh. Constraint functions for these types of collision can be derived fairly easily and handled using the usual algorithms for resting and colliding contact as described in the dissertation.

The camera movement and lighting was set up in Blender. After importing the simulation results, the animation was rendered using Blender's internal renderer/raytracer.

[Home | www.kleppmann.de]