This document outlines the standards you should follow when creating your avatar. Your avatar uses bones to animate the character's limbs and define the scale variable of limbs. You can add custom bones to further adjust the avatar's shape. Customization of your avatar can be fine-tuned using blendshapes to animate the face and scripting to define advanced behaviors.
On This Page:
As we delve deeper into creating custom avatars, we may use terminology that you are unfamiliar with. Here are some terms you might come across:
For the Reference pose, use a T-Pose which complies with the specifications below. You may wish to refer to the properly configured example avatar fbx with source files.
You can download the standard High Fidelity skeleton here. This skeleton conforms to the specifications above.
The standard humanoid skeleton of your avatar should follow HumanIK Skeleton with some modifications made for Mixamo. This skeleton system will work with the input systems already in place in High Fidelity, and will allow users to use their input devices to control their avatar's arm and finger movements (if they have any).
High Fidelity avatars should match the following standard skeletal structure. Each of these joints can be animated.
Finger #1 is not the metacarpal; instead, it is the first joint between the proximal and intermediate.
sim prefix is reserved for flow bones, such as clothing, hair and tails. These bones should not be animated by an animator.
For example, consider a full cape that surrounds the avatar:
simBackCape1 - first bone of the cape, center back
simBackCape# - additional bone(s) of the cape, center back
simFrontCape1 - first bone of the cape, center front
simFrontCape# - additional bone(s) of the cape, center front
simLeftCape1 - first bone of the cape, left
simLeftCape# - additional bone(s) of the cape, left
simRightCape1 - first bone of the cape, right
simRightCape# - additional bone(s) of the cape, right
Alternatively, you can use the
flow prefix, separating the name and joint number with an underscore. The same cape as above would look like:
The look-at vectors are driven by the z-vector of the eye joints.
The +z axis of the eye joints should go through the center of the pupil, and should continue to do so as the eye joint is rotated.
The eye joints are defined in the FST.
High Fidelity uses Blendshapes to animate your avatar's face. Blendshapes allow you to specify a new state for your avatar's mesh, and facial positions are animated by moving between the different states of your avatar's expressions. Blendshape behaviors are defined in your avatar's FST file, and are added to the avatar mesh using a 3D modeling tool like Blender (Shape Keys) or Maya. Adobe's Fuse program and Mixamo pipeline allow you to export blendshapes as part of your FBX, but if you are modeling an avatar from scratch, you will likely need to specify your own facial expressions.
High Fidelity avatars support a number of blendshapes for creating different facial expressions.
EyeBlink_L: Blinking action for the left eye.
EyeBlink_R: Blicking action for the right eye.
JawOpen: Opening of the jaw.
These blendshapes are used when you speak.
Your eyebrows are blendshapes that react to a change in volume. They will move upwards when your voice gets louder. These include:
BrowsU_C: Center of the brow going up
BrowsU_L: Outside corner of the left brow going up
BrowsU_R: Outside corner of the right brow going up
Other audio blendshapes are randomly mixed when you speak. These include:
MouthSmile_L: Left side of the mouth lifting up to a smile
MouthSmile_R: Right side of the mouth lifting up to a smile
LipsFunnel: Funneling of the lips, as when you say "Oh!"
LipsUpperClose: Upper lips rolled inwards
Eyelid Offset To ensure that the top of the eyelid rests on the iris, blendshapes are used to track the current position of the eye along with your head orientation. We apply a small offset to these blendshapes to preview sleepy or crazy eye lids.
EyeBlink_L: Blinking action for the left eye
EyeBlink_R: Blicking action for the right eye
EyeOpen_L: Opening of left eye
EyeOpen_R: Opening of right eye
BrowsD_L: Outside corner of the left brow moving down
BrowsD_R: Outside corner of the right brow moving down
Tweaks to your blendshapes can be made in your 3D modeling tool, or directly in the FST file. In the FST file, blendshapes are defined with the syntax:
bs = [blendshape constant] = [your key/blendshape name] = [value between 0 and 1]
Here is an example of modifying your blendshapes in your FST file:
bs = BrowsU_L = head_BS_brow_up = 0.3
bs = BrowsU_C = head_BS_brow_up = 0.3
bs = BrowsU_R = head_BS_brow_up = 0.3
bs = BrowsD_R = head_BS_brow_down = 0.5
bs = BrowsD_L = head_BS_brow_down = 0.5
bs = EyeBlink_L = head_BS_L_eye_close = 1
bs = EyeBlink_R = head_BS_R_eye_close = 1
bs = EyeOpen_L = head_BS_L_eye_open = 1
bs = EyeOpen_R = head_BS_R_eye_open = 1
bs = JawOpen = JawOpen = 1
bs = MouthSmile_R = head_BS_L_smile = 0.6
bs = MouthSmile_L = head_BS_R_smile = 0.6
bs = LipsFunnel = head_BS_oo = 0.5
bs = LipsUpperClose = head_BS_mouth_down = 0.1
Content creators will have limited bandwidth on servers (read small print on any unlimited host plans) so optimization is important, for both the end users and content creators. The more polygons and larger textures you use, the more bandwidth you are using from your servers per load. Optimally, keep your avatar models under 20 MB.
We recommend that you try to keep total size of all the textures per avatar below 8 MB. They should be always smaller than 1024x1024, unless all the textures are in a single file. If using multiple texture files, then smaller the better, especially if you can make the textures smaller. Remember that you can get a lot more detail through roughness and normal mapping, than just textures. It is suggested that you keep Albedo at a smaller size than your roughness for best detail through light reflection instead of color variation.
When you wear different avatars, you'll notice that each avatar has a different collision shape or collision hull. The collision hull is the invisible area around your avatar that is used to used to detect when other avatars or entities collide with you.
Depending on the avatar's design, the collision hulls can be very large or small. This occurs because High Fidelity analyzes the shape of the avatar's torso (from hips to head) and tries to find the best shape that encloses the mesh. For example, if your avatar has large hips or perhaps a fully extended tail, High Fidelity thinks that the tip of the tail is part of your hips, and makes a very large collision hull. To reduce the size of the collision hull, you can add skeleton joints to your avatar's tail.