Basics: Skinning

Bones and hardware

Table of Contents

GPU Skinning

As Wikipedia puts it, "Each bone in the skeleton is associated with some portion of the character's visual representation. Skinning is the process of creating this association. In the most common case of a polygonal mesh character, the bone is associated with a group of vertices; for example, in a model of a human being, the 'thigh' bone would be associated with the vertices making up the polygons in the model's thigh.In most state-of-the-art graphical engines, the skinning process is done on the GPU", and ShiVa is no exception to that.

CPU-only skinning is always slower than GPU-accelerated skinning. A message like this ...
[+ Warning] {Rendering} Detected 75 skeleton joints for subset 0 of mesh 'character', skinning will be performed on the CPU
essentially tells you that your model has too many bones to be rendered at full speed.

Optimize Skinning

If your models exceed the joint limit, It is better to split the skinned geometry into segments to stay under the limit. It is not required to keep the total number of joints of the entire model below the limit. A Character model for instance can be split into legs - torso - arms - head. Keep the joint count under the limit per segment to get the x2/x4 speed gain.

Hardware Limits by Platform

Mobiles and Flash

Android and iOS:
- If joint count (per subset) is > 18: skinning on NEON coprocessor if available (x2 performance compared to pure CPU)
- If joint count (per subset) is
18 is also the limit for Adobe Flash.

On Windows Phone 7 and 8, the limit is 64.


On consoles (XBox 360/PS3), the joint limit for GPU-accelerated skinning is 60 instead of 18.


On desktop PCs (OpenGL and DX11), the joint limit for GPU-accelerated skinning is 64.