UnigineScript
The Language
Core Library
Engine Library
Node-Related Classes
GUI-Related Classes
Plugins Library
High-Level Systems
Samples
C++ API
API Reference
Integration Samples
Usage Examples
C++ Plugins
Content Creation
Materials
Unigine Material Library
Tutorials

Animated Skinned Mesh

Animation is a powerful technique that brings life and action into a rendered scene. Real-time animation is even more intriguing, as it is usually interactive and provides feedback to the user who affects the artificial world.

Animation is a difficult part of scene implementation, and regardless the selected type of animation, there are some prerequisites that should be met. First, a model that will be animated should have a reasonable mesh complexity and vertex distribution, suitable for animation. Second, the model should be created in a neutral state, for example, if it is a face, it should neither smile, nor frown. If it is a character, it should be made up in a so-called bind pose, which keeps limbs separated and avoids creases.

See also

Bone-Based Animation

Bone-based animation (1) Bone-based animation (2) Bone-based animation (3)
Typical scope of application of skinning—animation of structures with joints

Bone-based animation, also known as skinning, rigging, and skeletal animation, associates a surface of the model (its "skin") with "bones". Each bone represents a 3D transformation (including position, scale and orientation transformations). Besides, each bone may contain an optional link to a parent bone, and therefore, a hierarchy of bones that build up the "skeleton" can be created. The hierarchy is used to calculate the final transformation corresponding to some child bone; it is calculated as the product of the parent transformation and own transformation of the child bone.

Some areas of the model surface can be influenced by several bones, when each of the involved bones has its own contribution in the final skin transformation; this often happens near joints. Therefore, bones should be weighted, and each vertex can be influenced by a number of bones with given weights. To compute the ultimate vertex position, each bone transformation is applied to the vertex and scaled by its weight.

Animation Layers

Almost always, to complete the animation of an object, one needs to blend several animation pieces together. In bone-based animation, this is done using layers. Each layer represents an animation piece. When two layers are blended, bone transformations in between the layers are interpolated, and vertex positions can be calculated using the interpolated results. Also, layers may contain animations that describe not all bones available for the model, for example, there can be separate animations of an arm and of a leg. Blending of such layers allows creating complex movements like walking and waving a hand at the same time.

Application and Implementation Peculiarities

Bone-based animation is good for animation of mechanical objects or characters (as a whole) for a long period of time. It is efficient, as it is often computed by the GPU (GPU skinning). The GPU skinning has a limitation of 4 bones per vertex and 64 unique bones per surface, which is usually sufficient.

The weakness of the bone-based animation is that it is not suitable for rendering of facial expression changes and similar cases, when there are lots of fine details and muscle movements (or other movements that cannot be simulated with bones).

Last update: 2017-07-03