Modifying the Skeleton


    We can not add new joints to the Skeleton.
  • We must keep the hierarchical Joint structure as it is.
    We can not rearrange the joint hierarchy of the Skeleton.


Joint Offsets




For Blender users:



Defining Joint Offsets






Checking your joints in the Viewer


Develop -> Avatar -> Show Bones
  • Weighted Joints without Joint offset are displayed in Cyan
  • Weighted Joints With Joint offset are displayed in Red






A surprising behavior




This results in drastic differences how sliders influence the arm length.




And a nasty Pitfall









What about PIVOT and POS

You may have seen that Avastar supports 2 Joint Types, namely PIVOT and POS. But what is that and how do we work with this? In fact this is one other source of misunderstanding, misbehavior and its quiet badly understood by everybody, even by LindenLab them self (i believe).

In short POS and PIVOT are 2 definitions of the Secondlife Rig which are almost identical but differ a tiny bit from each other. The reason for why those 2 rig definitions exist is unclear and buried somewhere in ancient history of Secondlife. Below you find an excerpt of the Rig definitions. The values are 3 dimensional vectors. Each vector defines the distance to the parent joint:

 Pivot-Rig location offsets
-0.020927 -0.085000  0.165396
 0.000000 -0.079418 -0.000000
 0.000000 -0.248000 -0.000000
-0.000000 -0.205000 -0.00000
 Pos-Rig location offsets
-0.021 -0.085 0.165
 0.000 -0.079 -0.000
 0.000 -0.248 -0.000
 0.000 -0.205 -0.00

For example the mElbowRight joint is exactly 0.248 m (24.8 cm ) away from the mShoulderRight joint in both Rigs (see image)

But  the joints mCollarRight and mShoulderRight are placed at slightly different locations in both rigs (see the numbers in the table)

I have marked the differing numbers in orange boldface.

So what?

First of all the 2 Rigs are actually used for different purposes:

POS Rigs

Are only used by the Secondlife System character. The POS Rig is declared as the one Rig that has no Joint Offsets.

So when you import a mesh that was rigged to a clean POS Skeleton then even if you Import with Joint Positions the SL Import willl correctly see that there are no Joint offsets at all defined in the rig.


Are only used by the Custom Mesh attachments and Custom Mesh characters.

So when you import a mesh that was rigged to a clean PIVOT Skeleton then the SL Importer detects falsely that some bones have Joint offsets.

The following 2 rigs both have been created with default Rig values and imported with Joint Positions. Bones with Joint Offsets are marked in Red.  You see the POS Rig imports cleanly but the PIVOT Rig exposes Joint offsets although its a perfect clean PIVOT Rig:

A POS Rig imported with Joint Positions

A PIVOT Rig imported with Joint Positions

And here is the Double Salto Mortale

Remember what i said about when is which rigtype used? Here is it again:

  • POS Rigs are only used for the System Character
  • PIVOT Rigs are only used for the custom Mesh Characters

So as a consequence here is the first Salto:

When you use a clean POS Rig for your mesh character then an import with Joint offsets works just fine and correctly detects there are no joint offsets in the rig. But the Mesh gets bound to a PIVOT Rig and so you will see mismatches when you compare to the System Character.

When you use a clean PIVOT Rig for your mesh character then an import with Joint offsets uncorrectly detects joint offsets for some bones. But the Mesh gets bound to a PIVOT Rig and so it will match better when you compare it to the System Character. But there are still mismatches… why?

And here is the second Salto:

When a Bone has a Joint Offset then it gets treated slightly different by the Appearance system. Technically it loses the ability to follow translations.

That means for the Collar bones and Shoulder bones: When you move the  Torso Shoulders Slider then it just does not work any more. And this has major consequences and you end up with a shape that no longer matches to the System character mesh, even when the mesh itself does match perfectly on vertex level.


Second Life uses 2 slightly different Rig definitions for the System character and for your Custom meshes. Also Bones with Joint Offsets behave different from Bones without Joint Offsets. So …

  • Forget to make Mesh characters by using the POS Rig. Otherwise you lose precision in the meshes.
  • Forget to import clean PIVOT Rigs with joint offsets. Otherwise you loose precision in the meshes.
  • The only reliable way to get good results: Use clean PIVOT Rigs and avoid using Joint offsets when you try to match items to the system character