Skeletal animation: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(reverted vandalism - please do not delete things you obviously do not understand)
No edit summary
Line 1: Line 1:
[[Image:Breen skeleton ref.jpg|150px|right|Skeleton in reference posture]]
[[Image:Breen skeleton ref.jpg|150px|right|Skeleton in reference posture]]
[[Image:Breen skeleton posed.jpg|150px|right|Skeleton during an animation]]
[[Image:Breen skeleton posed.jpg|150px|right|Skeleton during an animation]]
'''[http://en.wikipedia.org/wiki/Skeletal_animation Skeletal animation]''' is a processor-efficient and relatively easy [http://en.wikipedia.org/wiki/3D_animation 3D animation] system applicable to any ''jointed'' model: from humans to insects to mechanical machinery.


A [[Skeleton]] is a system of rigid [[bone]]s which determines the rendered model's (changing) pose. The model's [[Mesh]] vertices are [[envelope]]d to the bones so they follow their [[parentbone]]s' movements. Because the mesh is ''deformable'', mesh polygons that are [[weightmap]]ped across skeletal joints may stretch and compress as the joints are flexed.
'''[[Wikipedia:Skeletal animation|Skeletal animation]]''' is a processor-efficient and relatively simple animation system that can simulate any jointed object — from people to insects to machinery.


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 titular [[skeleton]] is a hierarchy of jointed but individually rigid [[bone]]s that are manipulated in the same way as a real skeleton. [[Vertex]]es are '[[envelope]]d' to the appropriate bone and move with it; the bone in turn moves with the bones [[parentbone|above it]] (e.g. the hand follows the forearm). [[Polygon]]s that cover joints between bones [[weightmap|stretch and compress]] as the skeleton moves.


The bones of a flexible skeleton may be re-positioned by either Movement-system [[$sequence]]s or by Vphysics-system forces via the [[$collisionjoints]] rig. Currently Vphysics can only do Skeletal Animation; it cannot do Vertex, Particle or Texel animation.  
Bones can be controlled with [[$sequence|canned animation]], [[$collisionjoints|real-time physics]], and/or [[$ikchain|inverse kinematics]].
== Limitations ==


<!--
; A bone is rigid
Ragdoll system = Vphys motion applied to each $collisionmodel/physbone, constrained by vphys $jointconstraints, $mass ... deforms skeleton & moves entity.
: The vertices enveloped to any given bone move as one unit; a skeletal animation cannot move them relative to each other ([http://www.brightcove.tv/title.jsp?title=900704395 though other options exist])
Movement system = canned/ keyframed/ forward kinematic animation with limited IK collision detection.
; A bone has only one parent
-->
: A skeletons are organised into trees, branching out from a root. Meshes (think chainmail) are not possible.
; Skeletons require hierarchy
== Limitations and workarounds ==
: While it is theoretically possible to animate gasses or liquids with bones, it's an inefficient and overwrought solution ([[Cinematic physics|usually]]). See [[:Category:Particle System]] to create such effects.
* ''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 [[info_particle_system|Particle animation]] system can be used to animate a ''point cloud'' of (overlapping) particle sprites, and liquids can be simulated with either [[Texel animation]]s (eg puddle or splash sprites) or a complex set of very carefully designed animated models (eg 3D waves).


== See also ==
== See also ==
* [[Vertex animation]] is used to ''morph'' mesh vertices directly, eg animating faces.
* [[Vertex animation]] morphs [[Vertex|vertices]] directly. In Source, it is used for faces.
* [[Particle animation]] is used to animate a ''point cloud'' of particle sprites (see [[info_particle_system]]).
* [[:Category:Particle System|Particles]] are used to animate clouds or streams of objects.
* [[Texel animation]] is used to have the appearance of a 2D surface change over time (see [[Animated textures]]).
* [[Animated textures]] change the appearance of 2D surfaces.
* [[$sequence]]s cannot re-scale bones dynamically ([http://www.brightcove.tv/title.jsp?title=900704395 though this can be achieved through other means])
* [[$bonemerge]] allows sub-models to be included in the main model's sequences.


__NOEDITSECTION__
__NOEDITSECTION__
[[Category:Glossary]]
[[Category:Glossary]]
[[Category:Modeling]]
[[Category:Modeling]]

Revision as of 16:43, 3 January 2009

Skeleton in reference posture
Skeleton during an animation

Skeletal animation is a processor-efficient and relatively simple animation system that can simulate any jointed object — from people to insects to machinery.

The titular skeleton is a hierarchy of jointed but individually rigid bones that are manipulated in the same way as a real skeleton. Vertexes are 'enveloped' to the appropriate bone and move with it; the bone in turn moves with the bones above it (e.g. the hand follows the forearm). Polygons that cover joints between bones stretch and compress as the skeleton moves.

Bones can be controlled with canned animation, real-time physics, and/or inverse kinematics.

Limitations

A bone is rigid
The vertices enveloped to any given bone move as one unit; a skeletal animation cannot move them relative to each other (though other options exist)
A bone has only one parent
A skeletons are organised into trees, branching out from a root. Meshes (think chainmail) are not possible.
Skeletons require hierarchy
While it is theoretically possible to animate gasses or liquids with bones, it's an inefficient and overwrought solution (usually). See Category:Particle System to create such effects.

See also