Skeletal animation

From Valve Developer Community
Revision as of 08:28, 23 May 2008 by Beeswax (talk | contribs) (reverted vandalism - please do not delete things you obviously do not understand)
Jump to: navigation, search
Skeleton in reference posture
Skeleton during an animation

Skeletal animation is a processor-efficient and relatively easy 3D animation system applicable to any jointed model: from humans to insects to mechanical machinery.

A Skeleton is a system of rigid bones which determines the rendered model's (changing) pose. The model's Mesh vertices are enveloped to the bones so they follow their parentbones' movements. Because the mesh is deformable, mesh polygons that are weightmapped across skeletal joints may stretch and compress as the joints are flexed.

Each Skeleton is arranged in a bonetree hierarchy, so moving a bone high up in the hierarchy causes all of its child bones to move in response; eg. moving the "forearm" forward causes the "hand" to move forward by the same distance and in the same direction. Although a bone may have multiple children, each bone connects to only one parentbone. The orientation of a childbone relative to its parentbone is defined by the childbone's one and only joint.

The bones of a flexible skeleton may be re-positioned by either Movement-system $sequences or by Vphysics-system forces via the $collisionjoints rig. Currently Vphysics can only do Skeletal Animation; it cannot do Vertex, Particle or Texel animation.

Limitations and workarounds

  • Each bone must be rigid. A length of chain can be accurately simulated by assigning a single bone to each link, whereas a length of rope would require an almost infinite number of microscopic bones to simulate its full flexibility. Increasing the number of bones makes the skeleton more complex, which undermines the great advantage of skeletal animation: simplicity, both for editing and processing.
  • Each bone may have only one parentbone. The bones in a sheet of cloth (eg chainmail) would be interconnected in a network rather than a hierarchy. In this case we could use Vertex animation to deform the mesh directly, but note: there is currently no way to get Vphysics to apply directly to the mesh.
  • Fluid dynamics like liquid flow, flames or smoke particles are not skeleton-friendly; the bonds between particles are neither rigid nor hierarchical. The Particle animation system can be used to animate a point cloud of (overlapping) particle sprites, and liquids can be simulated with either Texel animations (eg puddle or splash sprites) or a complex set of very carefully designed animated models (eg 3D waves).

See also