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.
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.
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.
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