Skeletal Animation

Overview

The ODE plugin that is currently part of 0.4.2 is not usable (don't bother trying to compile it), as it was written before the Visualization Pipeline procedural workflow was introduced in K-3D. It needs to be completely overhauled, the good news is that the visualization pipeline will make for a more elegant design.

We focus on ODE library because it's released under a BSD license and is used in -lots- of applications and games, including Softimage/XSI.

The project has been split into three parts.

Skeletal / Deformation Bones

This is what most people think about when they hear "skeletal" animation. Simply put it is a way to deform a mesh. You associate one group of points in a mesh with a bone and another group with a second bone and when a bone is reoriented the associated points will do so accordingly.

However there are several takes on how to deform the mesh because the deformation at the joints is always a problem. An interesting paper on the subject is the SIGGRAPH '00 paper 'Pose Space Deformation' by Lewis, Cordner and Fong.

A bone may be associated with an entire mesh, e.g. when dealing with mechanical assemblies (think of animating a solid robotic arm).

A bone object in K-3D would have the following properties:

• input mesh
• output mesh
• input matrix
• output matrix

The main processing for the bone would be to deform the input mesh, based on the difference between the input matrix and some "resting" state.

Kinematics

Bones have to be linked together using joints to make a skeleton. In ODE's documentation, bodies connected to each other with joints are called islands.

Kinematics is the process of calculating the position in space of the end of a linked structure given the angles of all the bones at the joints. It is easy, and there is only one solution. Inverse Kinematics does the reverse. Given the end point of the structure, what angles do the joints need to be in to reach that end point? It can be difficult, and there are usually many or infinitely many solutions.

References:

• A good start into IK is Hugo Elias page on the topic. His way of doing it is a very deductive method and maybe not a very efficient one.
• Another source for IK may be the Blender code that is part of "Armatures", their take on deformation bones.
• GPL'ed software, Gepetto, for choreographers that features IK.
• LGPL'ed software, Cal3d is a skeletal based 3d character animation library.

Many deformation bones implementations are often coupled with IK since it's common to use them together. But deformation bones can be used on their own without any need for IK, think Pixar's 'Listerine' commercials.

Ultimately IK and Deformation Bones can be used in conjunction with other techniques like the one outlined by Stephen May et al.: this -is- "skeletal" animation!

Dynamics engine

Once you've created a skeletal object (deformation bones + joints), you'll really want to animate it using kinematics, inverse kinematics, and even physics!

ODE is a very nice an competent library for simulating rigid structure physics. It has advanced joint types and integrated collision detection with friction.

There are issues when it comes to ODE like K-3D's nonlinear approach to time, but time is going to be an issue with any dynamics library: it's one of the fundamental problems with dynamics.