Sansar Skeleton Skinning Details

Sansar skeleton and skinning details

This article provides detailed information on the joints of the standard Sansar skeletons and provides tips on how to best skin the skeletons when creating custom avatars and rigged clothing.

Note that exporting an avatar from Blender requires non-default export settings. See Exporting custom avatars from Blender for full details.

Avatar skeleton files

Sansar's avatar skeleton files can be found in the article: Avatar reference files.

Joint details

The following joint information is for all the joints in the full resolution skeleton. The mid and low resolution skeletons have minimal face joints and do not contain some of the listed joints below. But for those joints that do exist in the mid and low resolution skeletons, the information is still the same.

Body joints

The core animation joints. All avatar meshes should be hooked up to these joints in order for them to deform correctly when animating. Depending on the location of the mesh, only a certain subset of joints may be needed. For example, pants should only need to be skinned to all the lower body joints.

Bone Names
Bone Names

Central body joints

  • pelvis

  • spine1

  • spine2

  • spine3

  • neck

  • head

  • L_clavicle

  • R_clavicle

Left arm joints

  • L_shoulder

  • L_elbow

  • L_wrist

  • L_shoulder_twist1

  • L_shoulder_twist2

  • L_wrist_twist1

  • L_wrist_twist2

  • L_olecranon_twist1

Right arm joints

  • R_shoulder

  • R_elbow

  • R_wrist

  • R_shoulder_twist1

  • R_shoulder_twist2

  • R_wrist_twist1

  • R_wrist_twist2

  • R_olecranon_twist1

Left leg joints

  • L_hip

  • L_knee

  • L_ankle

  • L_ball

  • L_hip_twist1

  • L_glute_twist1

  • L_kneecap_twist1

Right leg joints

  • R_hip

  • R_knee

  • R_ankle

  • R_ball

  • R_hip_twist1

  • R_glute_twist1

  • R_kneecap_twist1

Left finger joints

  • L_index_01

  • L_index_02

  • L_index_03

  • L_middle_01

  • L_middle_02

  • L_middle_03

  • L_pinky_00

  • L_pinky_01

  • L_pinky_02

  • L_pinky_03

  • L_ring_01

  • L_ring_02

  • L_ring_03

  • L_thumb_01

  • L_thumb_02

  • L_thumb_03

Right finger joints

  • R_index_01

  • R_index_02

  • R_index_03

  • R_middle_01

  • R_middle_02

  • R_middle_03

  • R_pinky_00

  • R_pinky_01

  • R_pinky_02

  • R_pinky_03

  • R_ring_01

  • R_ring_02

  • R_ring_03

  • R_thumb_01

  • R_thumb_02

  • R_thumb_03

Face joints

Skinning to the face joints is only a requirement if you want to have animated faces. If your avatar has a mask or helmet, all these joints can be ignored and only the only the "head" joint needs to be used.

With the limit of only 4 joint influence per vertex, it becomes very complicated to do a smooth skinning spread between all the face joints. It is easiest to only skin to a subset of all the face joints.

For example, if you want a more simplified animated face such as just a flapping mouth and darting eyes, then only the "L_eye", "R_eye", and "jaw" joints need to be used.

If you want to apply facial animations, we highly recommend using the high resolution skeleton as it contains all face joints. If you are not interested in applying facial animations, the mid and low resolutions are some alternatives with less face joints.

Bone Names
Bone Names

Jaw Area Joints

  • jaw

For a simple flappy jaw look, only the "jaw" joint working in conjunction with the "L_lip_corner" and "R_lip_corner" joints listed below are needed.

  • L_jawline01

  • L_jawline02

  • R_jawline01

  • R_jawline02

Chin Area Joints

  • chin

  • chin_under

Only fine detail meshes would need to be skinned to the chin joints.

Mouth Area Joints

  • lip_upper_center

  • lip_lower_center

  • lip_under

The mouth area has the most complex setup on the face. There are fewer ways to only using a few select joints because they all depend on each other to work. If you want to forego explicit lip animation and keep to a simple flappy jaw setup, then using the "jaw" joint in conjunction with "L_lip_corner" and "R_lip_corner" should be enough.

  • L_lip_upper_mid01

  • L_lip_upper_mid02

  • L_lip_lower_mid01

  • L_lip_lower_mid02

  • L_lip_corner

  • R_lip_upper_mid01

  • R_lip_upper_mid02

  • R_lip_lower_mid01

  • R_lip_lower_mid02

  • R_lip_corner

Nose Area Joints

  • nose_base

  • nose_bridge

All these joints can be skipped if there is no need for small details such as nostril flares.

  • L_nasalis

  • L_nostril

  • R_nasalis

  • R_nostril

Left Eye Area Joints

  • L_eye

  • L_eyelid_upper01

  • L_eyelid_upper02

  • L_eyelid_lower01

  • L_eyelid_lower02

  • L_eyelid_corner_inner

  • L_eyelid_corner_outer

  • L_eye_upper

  • L_eye_lower

  • L_eye_lateral

If only eyeball rotation is needed, then only skin to the "L_eye" and "R_eye" joints.

Right Eye Area Joints

  • R_eye

  • R_eyelid_upper01

  • R_eyelid_upper02

  • R_eyelid_lower01

  • R_eyelid_lower02

  • R_eyelid_corner_inner

  • R_eyelid_corner_outer

  • R_eye_upper

  • R_eye_lower

  • R_eye_latera

Forehead Area Joints

  • forehead_center

  • L_forehead

  • R_forehead

Between Eyebrow Area Joints

  • procerus

Left Eyebrow Area Joints

  • L_brow_inner

  • L_brow_mid

  • L_brow_outer

Right Eyebrow Area Joints

  • R_brow_inner

  • R_brow_mid

  • R_brow_outer

The forehead and eyebrow joints cover the areas above the eyes. These joints are used when the character does expressive eyebrow motions.

Left Cheek Area Joints

  • L_cheek

  • L_levatorLabii

  • L_risorius02

For proper smiling animations, the cheek area joints are needed.

Right Cheek Area Joints

  • R_cheek

  • R_levatorLabii

  • R_risorius02

Ears

  • L_ear

  • R_ear

Tongue

  • tongue01

  • tongue02

  • tongue03

There are very few ear animations, so skipping the ear joints isn't a big deal. The tongue joints are only needed if there is a tongue in the character.

Extra joints

These joints are not used in the default animation set that exists in Sansar's avatars, so skinning to them will not yield any results. But they can be animated for custom emotes. Example: Skinning wing meshes to the "L_wing_ATTACH" and "R_wing_ATTACH", and then flapping them in a custom emote animation.

Bone Names

Chest Joints

  • L_chest

  • R_chest

Not used in the default animation set, but would allow for secondary chest motion in custom emote animations.

Toe Joints

  • L_bigToe_01

  • L_indexToe_01

  • L_middleToe_01

  • L_ringToe_01

  • L_pinkyToe_01

  • R_bigToe_01

  • R_indexToe_01

  • R_middleToe_01

  • R_ringToe_01

  • R_pinkyToe_01

The toe joints aren't animated in the default animation set because it is expected that the avatars would be wearing shoes. But a custom character can be barefooted and have custom animations that makes the toes wiggle.

Attach Joints

  • world_ATTACH

  • locomotion_ATTACH

  • pelvis_ATTACH

  • L_thigh_ATTACH

  • R_thigh_ATTACH

  • head_ATTACH

  • L_forearm_ATTACH

  • R_forearm_ATTACH

  • L_shoulder_ATTACH

  • R_shoulder_ATTACH

  • spine3_ATTACH

  • L_wing_ATTACH

  • R_wing_ATTACH

Accessories would be a good use of ATTACH joints. Example: Hook up a halo to the "head_ATTACH" joint. Then during a custom emote animation, spin the halo around.

In the future these ATTACH joints will be even more useful when all animations for the characters can be overwritten.

Support joints

These support joints are only used to support the animation of the body and face joints. They do not need to be hooked up to any meshes since it is their child or related joints that should be getting all the skinning data.

Face Support Joints

  • L_eyelid_top

  • L_eyelid_bottom

  • R_eyelid_top

  • R_eyelid_bottom

Other joints

These joints are for other purposes outside of core animation and shouldn't need to have any meshes skinned to them.

  • Locomotion_Vector

  • root

  • L_grip

  • R_grip

  • camera_ATTACH

Skinning details

Skin bind settings

  • 4 Max Influence

  • Linear Skinning Method

Skinning examples

Auto-twist Arms:

One thing to keep in mind is that when the skeleton gets imported or referenced into a 3D app, the auto-twist joints are not hooked up in a way that will look correct. But if the skinning on those joints looks similar to the examples, then they will import into the engine and look good during in-game animations.


Pelvis/Thigh Area:

What makes the pelvis and thigh area a little more complex is the glute_twist1 bone that helps with maintaining volume as the legs are rotating back and forth. That particular bone should only cover a small specific area.

Like the arms, the thighs also have an auto-twist that will help maintain a smoother look as the legs are twisting. Unlike, the arms, the thighs only require 1 twist bone.

Also like the arms, the thigh auto-twist and glute_twist1 is not hooked up during import into a 3D app. So they will not look correct until imported into the engine.


Elbow and Knee:

These support joints are solely for the purpose of helping the knee and elbow maintain better volume as the lower legs and forearms are bending.

These are also not hooked up during import into a 3D app and will require import into the engine before results can be seen.


Have more questions? Join our Discord!

Last updated