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.
Sansar's avatar skeleton files can be found in the article: Avatar reference files.
Note: When exporting custom avatars from Blender, note that the default settings must be changed. See Exporting custom avatars from Blender for exact settings 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.
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
|
|
Left arm joints
|
Right arm joints
|
Left leg joints
|
Right leg joints
|
Left finger joints
|
Right finger 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
|
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. |
|
|
|
|
Chin Area Joints
|
Only fine detail meshes would need to be skinned to the chin joints. |
Mouth Area Joints
|
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. |
|
|
|
|
Nose Area Joints
|
All these joints can be skipped if there is no need for small details such as nostril flares. |
|
|
|
|
Left Eye Area Joints
|
If only eyeball rotation is needed, then only skin to the "L_eye" and "R_eye" joints. |
Right Eye Area Joints
|
|
Forehead Area Joints
Between Eyebrow Area Joints
Left Eyebrow Area Joints
Right Eyebrow Area Joints
|
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
|
For proper smiling animations, the cheek area joints are needed. |
Right Cheek Area Joints
|
|
Ears
Tongue
|
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. |
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
|
Not used in the default animation set, but would allow for secondary chest motion in custom emote animations. |
Toe Joints
|
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
|
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. |
These support joints are only used to support the animation of the body and face joints. They do not need to hooked up to any meshes since it is their child or related joints that should be getting all the skinning data.
Face Support Joints
|
These joints are for other purposes outside of core animation and shouldn't have any meshes skinned to them.
|
|
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.
![]() |
![]() |
0 Comments