Skin weighting limit

4 bones per vertex

Background

When creating an avatar, clothing or accessory product a process called “skinning” is applied to the mesh geometry whereby the mesh can be deformed by a ‘skeleton’. The skeleton is a hierarchy of connected ‘bones’. Skinning assigns the bones of the skeleton to each of the vertices of the mesh.

When bones are associated with a vertex they are given a number value between 0.0 and 1.0 of how much influence they have on the vertex. A value of 0.0 is no influence and a value 1.0 is 100% influence. This is the ‘weight’ of that bone for the vertex. When there are more than one bones assigned to a vertex the weights must be evenly distributed between the bones and add up to a total of 1.0. This is called normalization.

lfHip lfThigh lfCalf lfFoot
Vertex #1 0.55 0.3 0.1 0.5

This process of assigning bone weights to each of the vertices of a mesh is called “skinning”, the result being the “skin weighting” of the mesh.

Issue

3D modeling tools such as Blender and 3ds Max allow for skinned meshes to have a large number of bones per vertex (up to 100 bones per vertex in the case of 3ds Max). Each bone adds more data that needs to be stored and processed. Having more bones per vertex comes at a cost in performance during data upload/download and engine rendering.

Historically in game development there has been a standard of 4 bones per vertex. Both Unity and Unreal Engine also historically use 4, although now will support more than 4.

Classic (Client) Create Mode allows for more than 4 bones per vertex whereas the Next engine limits the number of bones per vertex to 4. The result is products created with skin weighting of more than 4 bones per vertex will appear fine in Classic (Client), but appear distorted in Next platforms (Desktop, Web, Mobile and Studio).

Here are is an example:

Weighting Classic
Weighting Classic
Weight distortion Next
Weight distortion Next

It can show up as intersecting of mesh geometry. Here the dress has the weighting distortion and is intersecting with the avatar skin:

Meshes intersecting
Meshes intersecting

Solution

3ds Max

Set the ‘Bone Affect Limit’  to 4 in the Skin Modifier panel before you begin weighting your mesh.

Skin modifier panel 3ds Max
3ds Max Skin Modifier panel

Blender (version 2.83)

Bone weight limits are set by running a tool. The best workflow would be to run the Limit Total tool as you work and not after you have completed all of your weighting. More information about the tool can be found here Weight Paint – Limit Total

Weight Paint Mode
Switch to Weight Paint mode

 

Limit Tool
Run the Limit Total tool

 

Limit Weights Dialog
Set the Subset to ‘All Groups’ and the Limit to 4
Updated on July 21, 2023

Was this article helpful?

Related Articles

Discuss this!
Ask questions and get answers in our Creator Discussions.
BROWSE DISCUSSIONS