Character models require a specific set of components and configuration standards to ensure all avatar features work as expected. Check that your model meets the following modeling specifications and guidelines before exporting to ensure Studio compatibility.
When ready to export, see Export Requirements for mesh export settings for Blender and Maya.
Geometry
Avatar character models are made up of 15 separate mesh objects and require additional geometry requirements to import into Studio and publish successfully. In addition to the body types, parts, and budget specifications, ensure that your models also fulfill the following general requirements when modeling:
- Watertight - All geometry must be watertight without exposed holes or backfaces. Meshes used as outer cages do not need to be watertight.
- No N-gons - Model your assets in quads where possible.
- Transformations - All translation, rotation, and scale values must be frozen and pivots set to 0, 0, 0.
- Orientation - Characters must face positive Z and stand up in positive Y.
- Pose - Before exporting, set your character to an I-Pose, A-Pose, or T-Pose when possible.
Body Scale
Roblox supports 3 standards of body scales: Normal, Slender, and Classic. These standards allow developers to create experiences and spaces with consistent body sizes for standardizing movement and interaction. While the minimum sizes for each body scale is the same, each body scale has a unique maximum total body size, as well as a range for each body asset.
Normal
In the 3D Importer, use Rig Type > Rthro to import your model as a Normal body scale.
Part | X (width) | Y (height) | Z (depth) |
---|---|---|---|
Head | .5 | .5 | .5 |
Arm | .25 | 1.5 | .25 |
Torso | 1 | 2 | .7 |
Leg | .25 | 2 | .5 |
Total | 1.5 | 4.5 | .7 |
Part | X (width) | Y (height) | Z (depth) |
---|---|---|---|
Head | 3 | 2 | 2 |
Arm | 2 | 4.5 | 2 |
Torso | 4 | 3 | 2.25 |
Leg | 1.5 | 3 | 2 |
Total | 8 | 8 | 2.25 |
Slender
In the 3D Importer, use Rig Type > Rthro Narrow to import your model as a Slender body scale.
Part | X (width) | Y (height) | Z (depth) |
---|---|---|---|
Head | .5 | .5 | .5 |
Arm | .25 | 1.5 | .25 |
Torso | 1 | 2 | .7 |
Leg | .25 | 2 | .5 |
Total | 1.5 | 4.5 | .7 |
Part | X (width) | Y (height) | Z (depth) |
---|---|---|---|
Head | 2 | 2 | 2 |
Arm | 1.5 | 4 | 2 |
Torso | 2.5 | 3 | 2 |
Leg | 1.5 | 3 | 2 |
Total | 5.5 | 8 | 2 |
Classic
In the 3D Importer, use Rig Type > Default to import your model as a Classic body scale.
Part | X (width) | Y (height) | Z (depth) |
---|---|---|---|
Head | .5 | .5 | .5 |
Arm | .25 | 1.5 | .25 |
Torso | 1 | 2 | .7 |
Leg | .25 | 2 | .5 |
Total | 1.5 | 4.5 | .7 |
Part | X (width) | Y (height) | Z (depth) |
---|---|---|---|
Head | 1.5 | 1.75 | 2 |
Arm | 2 | 3 | 2 |
Torso | 3.5 | 3.25 | 2 |
Leg | 1.5 | 2.75 | 2 |
Total | 7.5 | 7.75 | 2 |
Triangle Budgets
Although model geometries are typically created using quads, the Roblox engine converts imported assets into tris. Each asset of your character model must not exceed our maximum tri budget. To quickly get the number of expected tris in your third-party modeling application, you can double the number of quads in your model.
Asset Type | Included Mesh Objects | Maximum Triangles |
---|---|---|
DynamicHead | Head | 4000 |
Torso | UpperTorso, LowerTorso | 1750 |
LeftArm | LeftUpperArm, LeftLowerArm, LeftHand | 1248 |
Right Arm | RightUpperArm, RightLowerArm, RightHand | 1248 |
LeftLeg | LeftUpperLeg, LeftLowerLeg, LeftFoot | 1248 |
Right Leg | RightUpperLeg, RightLowerLeg, RightFoot | 1248 |
Total | Head, UpperTorso, LowerTorso, LeftUpperArm, LeftLowerArm, LeftHand, RightUpperArm, RightLowerArm, RightHand, LeftUpperLeg, LeftLowerLeg, LeftFoot, RightUpperLeg, RightLowerLeg, RightFoot | 10,742 |
Body Parts
See the following specifications for the individual mesh objects that make up a character model:
Naming Convention - Limbs must all be specifically named:
- UpperTorso_Geo
- LowerTorso_Geo
- LeftUpperArm_Geo
- LeftLowerArm_Geo
- LeftHand_Geo
- RightUpperArm_Geo
- RightLowerArm_Geo
- RightHand_Geo
- LeftUpperLeg_Geo
- LeftLowerLeg_Geo
- LeftFoot_Geo
- RightUpperLeg_Geo
- RightLowerLeg_Geo
- RightFoot_Geo
- Head_Geo
Caps - Limbs must be capped, so that they form a full watertight mesh when separated from the body. Caps can be rounded or flat depending on design.
Face Accessories
Face accessories, such as hair, eyebrows, and eyelashes are unique accessories that you can bundle with an avatar body upload. At this time, eyebrows and eyelashes can not be uploaded as standalone accessories and must be bundled with an avatar body. See Accessory Specifications for additional information on face accessories.
Visibility
To ensure that avatar sizes are visually consistent, you must standardize body part visibility with the following requirements:
- Opacity - Body parts must be fully opaque.
- Bounding Boxes - Body part assets must take up a significant visible portion of their bounding box in a front, side, and back view.
- Body parts, such as Torso, Left Arm, Right Leg, must take up at least 50% of body part's bounding box.
- The head part must take up at least 35% of the mesh's bounding box.
Attachments
Attachments are points on the humanoid model where rigid accessories attach. Like many character components, attachment points are set up in third-party modeling software and imported as Attachment objects.
The 3D Importer automatically recognizes and converts mesh objects as attachment points if the objects include the affix \_Att and follow the naming conventions below. This only applies when importing meshes with caging data, such as bodies (accessory attachment points are created using the Accessory Fitting Tool). Check out examples of this implementation in any of the downloadable reference models.
Generally, when placing attachment points, position them so they overlap halfway with the character model's mesh part.
Attachments must follow a specific naming convention and positional consistency:
Mesh Part | Attachment Name | Details |
---|---|---|
Head | FaceCenter_Att | Anywhere within mesh bounding box |
FaceFront_Att | Front half of mesh bounding box | |
Hat_Att | Top half of mesh bounding box, can overlap with Hair_Att | |
Hair_Att | Top half of mesh bounding box, can overlap with Hat_Att | |
UpperTorso | LeftCollar_Att | Left top half of mesh bounding box |
RightCollar_Att | Right top half of mesh bounding box | |
Neck_Att | Top half of mesh bounding box | |
BodyBack_Att | Back half of mesh bounding box | |
BodyFront_Att | Front half of mesh bounding box | |
LowerTorso | Root_Att | Must set to 0, 0, 0 position |
WaistFront_Att | Front half of mesh bounding box, can overlap with WaistCenter_Att | |
WaistBack_Att | Back half of mesh bounding box | |
WaistCenter_Att | Anywhere in mesh bounding box, can overlap with WaistFront_Att | |
RightUpperArm | RightShoulder_Att | Top half of mesh bounding box |
RightHand | RightGrip_Att | Anywhere in mesh bounding box. Orient grip attachments perpendicular to the lower arm bone. For example, for I-Pose (arms pointing down), set the grip attachment to 90, 0, 0 (grip attachment pointing forward). |
LeftUpperArm | LeftShoulder_Att | Top half of mesh bounding box |
LeftHand | LeftGrip_Att | Anywhere in mesh bounding box. Orient grip attachments perpendicular to the lower arm bone. For example, for I-Pose (arms pointing down), set the grip attachment to 90, 0, 0 (grip attachment pointing forward). |
RightFoot | RightFoot_Att | Anywhere in mesh bounding box |
LeftFoot | LeftFoot_Att | Anywhere in mesh bounding box |
Rigging
Unlike generic rigs, humanoid models require a specific hierarchy and naming conventions for the internal bone or joint structure.
See the following requirements for humanoid rigging:
Rig Hierarchy - Humanoid rigs require a specific bone hierarchy and naming convention:
- Root
- HumanoidRootNode
- LowerTorso
- UpperTorso
- Head (representing the base of the neck)
- LeftUpperArm
- LeftLowerArm
- LeftHand
- RightUpperArm
- RightLowerArm
- RightHand
- LeftUpperLeg
- LeftLowerLeg
- LeftFoot
- RightUpperLeg
- RightLowerLeg
- RightFoot
LowerTorso and Root - The LowerTorso and Root bone or joint position must be set to 0, 0, 0.
Pose - Export your character model in an I-Pose, A-Pose, or T-Pose for the best Studio compatibility. The LeftUpperArm and RightUpperArm bones can be exported with rotation values to meet this requirement.
Skinning
Roblox supports skinning for rigged meshes. See Rigging and Skinning for more details on implementing skinned meshes in your experience.
See the following requirements for skinning:
- Max Influences - A vertex can not be influenced by more than 4 bones or joints.
- No Root Influences - Do not apply influences to the Root bone or joint.
- Symmetry - When possible, maintain symmetry when applying influences to a rig.
Facial Animations
Roblox supports facial animation on character heads and can support more than 50 base poses. If you are creating an avatar character, it must, at minimum, include the following 17 FACS reference poses to support avatar chat:
- EyesLookDown
- EyesLookLeft
- EyesLookRight
- EyesLookUp
- JawDrop
- LeftEyeClosed
- LeftLipCornerPuller
- LeftLipStretcher
- LeftLowerLipDepressor
- LeftUpperLipRaiser
- LipsTogether
- Pucker
- RightEyeClosed
- RightLipCornerPuller
- RightLipStretcher
- RightLowerLipDepressor
- RightUpperLipRaiser
While the 17 poses are a minimum requirement, it's recommended to include as many facial poses as possible in your asset to improve expressiveness and facial animation fidelity for facial animation and avatar chat.
Textures
Avatar characters must follow Roblox's texture specifications. Characters created for the Marketplace can take advantage of custom skin tones which use alpha layers allow users to select their own base color.
Custom Skin Tone
When texturing an avatar character model where the user can set their own skin tone, set the exposed skin areas as transparent so a default color or texture is not baked into the texture. When rendering, the Studio engine applies the transparent layer on top without any layer effects. This step applies mostly to human-like characters with exposed skin that you intend users to customize.
The following are examples of skin tone shading for the face, and you can apply this process with any part of an avatar with exposed skin:
Outer Cages
Outer cages on your character model allow your character to wear layerable accessories, such as clothing. Models, such as an avatar character, that are the target of meshes that will stretch over it, only require an outer cage, but meshes that deform, like layered clothing, require an inner and outer cage.
For general use, see the following requirements for adding outer cage meshes to your model:
- Use Roblox's Body Cage templates to ensure naming convention and other configurations are correct.
- Naming Conventions - The outer cage of a body part must be named after the primary mesh object with _OuterCage affixed, for example LeftUpperArm_OuterCage.
- Vertices and UV Map - Don't delete vertices or alter the UVs on the Outer Cages as this can cause errors when importing in Studio or when equipping onto a character. Use the Roblox provided templates for the cage meshes to ensure compatibility with other layered assets.
- Symmetry and consistency - Keep each face (the space between vertices) consistently sized and retain symmetry wherever possible. Use symmetry tools in your modeling software whenever possible.
Marketplace Requirements
Along with the other technical requirements listed, your items must meet the following additional specifications before uploading them to the Marketplace to sell:
- Ensure that your items adhere to the Marketplace Program Guidelines.
- Whenever possible, ensure that your items adhere to the following modeling requirements:
- Any applicable avatar specifications
- Object Material is set to Plastic.
- Object Transparency is set to 0.
- Object VertexColor is the default 1, 1, 1.
- If your head includes separate eyelash and eyebrow assets, you must add them to your character model as Accessory objects.
- See accessory specifications for additional technical requirements.