Character Specifications

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

Body Types

Roblox supports 3 standards of body types: 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 type is the same, each body type 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 type.


Minimum (in studs)
PartX (width)Y (height)Z (depth)
Head.5.5.5
Arm.251.5.25
Torso12.7
Leg.252.5
Total1.54.5.7
Maximum (in studs)
PartX (width)Y (height)Z (depth)
Head322
Arm24.52
Torso432.25
Leg1.532
Total882.25

Slender

In the 3D Importer, use Rig Type > Rthro Narrow to import your model as a Slender body type.


Minimum (in studs)
PartX (width)Y (height)Z (depth)
Head.5.5.5
Arm.251.5.25
Torso12.7
Leg.252.5
Total1.54.5.7
Maximum (in studs)
PartX (width)Y (height)Z (depth)
Head222
Arm1.542
Torso2.532
Leg1.532
Total5.582

Classic

In the 3D Importer, use Rig Type > Default to import your model as a Classic body type.


Minimum (in studs)
PartX (width)Y (height)Z (depth)
Head.5.5.5
Arm.251.5.25
Torso12.7
Leg.252.5
Total1.54.5.7
Maximum (in studs)
PartX (width)Y (height)Z (depth)
Head1.51.752
Arm232
Torso3.53.252
Leg1.52.752
Total7.57.752

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 TypeIncluded Mesh ObjectsMaximum Triangles
DynamicHeadHead4000
TorsoUpperTorso, LowerTorso1750
LeftArm LeftUpperArm, LeftLowerArm, LeftHand1248
Right ArmRightUpperArm, RightLowerArm, RightHand1248
LeftLeg LeftUpperLeg, LeftLowerLeg, LeftFoot1248
Right LegRightUpperLeg, RightLowerLeg, RightFoot1248
TotalHead, UpperTorso, LowerTorso, LeftUpperArm, LeftLowerArm, LeftHand, RightUpperArm, RightLowerArm, RightHand, LeftUpperLeg, LeftLowerLeg, LeftFoot, RightUpperLeg, RightLowerLeg, RightFoot10,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.

Attachments

Attachments are points on the humanoid model where various accessories can be attached or equipped. In general, attachment points should halfway overlap the character model's mesh part.

Incorrect placement of collar attachments
Correct placement of collar attachments

Each attachments must also follow a specific naming convention and positional consistency:

Mesh PartAttachment NameDetails
HeadFaceCenter_AttFront of mesh
FaceFront_AttTop of mesh
Hat_AttTop of mesh, can overlap with Hair_Att
Hair_AttTop of mesh, can overlap with Hat_Att
UpperTorsoLeftCollar_AttLeft top of mesh
RightCollar_AttRight top of mesh
Neck_AttUpper front of mesh
BodyBack_AttBack of mesh
BodyFront_AttFront of mesh
LowerTorsoRoot_AttMust set to 0, 0, 0 position
WaistFront_AttFront of mesh, can overlap with WaistCenter_Att
WaistBack_AttBack of mesh
WaistCenter_AttFront of mesh, can overlap with WaistFront_Att
RightUpperArmRightShoulder_AttTop of mesh
RightHandRightGrip_AttMust set the rotation of the RightGrip_Att to 90, 0, 0
LeftUpperArmLeftShoulder_AttTop of mesh
LeftHandLeftGrip_AttMust set the rotation of the LeftGrip_Att to 90, 0, 0
RightFootRightFoot_AttAnywhere in mesh
LeftFootLeftFoot_AttAnywhere in mesh

Rigging

Unlike generic rigs, humanoid models require a specific hierarchy and naming conventions for the internal bone or joint structure.

Humanoid rig model
Humanoid rig bone structure (Blender)

See the following requirements for humanoid rigging:

  • Rig Hierarchy - Humanoid rigs require a specific bone hierarchy and naming convention:

    • Root
    • HumanoidRootPart
    • LowerTorso
    • UpperTorso
    • Head (representing the base of the neck)
    • LeftUpperArm
    • LeftLowerArm
    • LeftHand
    • RightUpperArm
    • RightLowerArm
    • RightHand
    • LeftUpperLeg
    • LeftLowerLeg
    • LeftFoot
    • RightUpperLeg
    • RightLowerLeg
    • RightFoot
    Blender rig hierarchy
    Maya rig hierarchy
  • 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 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.

Textures

Basic textures can be imported with a .fbx file in Studio or imported separately as an image and applied to a mesh as a Texture ID.

You can also use SurfaceAppearance for advanced textures. SurfaceAppearance will override a mesh's existing TextureID and can be used for additional texturing options, such as Physically Based Rendering (PBR).

See the following requirements for basic textures:

  • File Formats - File formats for textures that are uploaded separately in Studio must be submitted as a .png, .jpg, .tga, or .bmp.

UV Mapping

Textures use UV mapping, a 3D modeling process to project a 3D model's surface to a 2D image, or UV Atlas. See the following requirements for UV mapping, especially if you're manually editing or optimizing your UV atlas:

  • Single UV Set - Use a single UV set for each component, such as a humanoid or accessory. Studio doesn't allow for multiple UV sets.
  • Coordinates - All UVs must be created within a 0:1 space.
  • Overlaps - Overlapping UVs are allowed.
  • Maximum Texture Resolution - Roblox supports up to 1024x1024 pixel spaces for texture maps. See Optimizations for more details on efficiently texturing your assets.

Optimizations

Studio's UV compositor allows you to pack and size your UVs to best suit your needs because it can detect and repackage UVs for performance and storage efficiency. The compositor looks to each component of the model, such as a character (arms, legs, torso, head), and repackages and loads the UVs as needed when in-experience changes occur, such as swapping body parts.

Especially with character models and other advanced models, optimizing your UV layouts can help prevent texture issues, save loading time, and improve performance. Keep in mind the following best practices for optimizing your UV islands for Roblox's UV compositor:

  • Pixel space - Studio's texture compositor repacks UVs by breaking up the following pixel spaces:

    • 1024x1024 pixel space into 64x64 16 pixel blocks.
    • 512x512 pixel space into 32x32 16 pixel blocks.
    • 256x256 pixel space into 16x16 16 pixel blocks.
    1024x1024 UV example
    512x512 UV example
    256x256 UV Example
  • Avoid Sharing 16 Pixel Blocks - To maximize your UV space and the resolution of your model, keep all UV Islands within these 16 pixel blocks when possible, and do not let two UV islands share the same 16 pixel block.

  • Use Smaller Islands - When possible, use smaller islands to simplify layout and packing. This can help prevent a UV island for one body part incorrectly applying to another as the compositor can't differentiate the islands.

By optimizing your UV layouts, you can prevent unexpected texture conflicts, save space, and improve performance. The following is an example of how Studio's compositor can process the same character body UV layouts with and without optimizations:

SurfaceAppearance

You can add a Surface Appearance to your mesh in Studio to add advanced texture options, such as PBR, for additional realism or detail. The SurfaceAppearance instance uses UV mapping, a form of texture mapping, to accurately map up to 4 2D images onto the mesh object.

See the following requirements for SurfaceAppearance assets:

  • Texture files - Ensuring your textures follow consistent conventions optimizes assets for tools like the 3D Importer and helps with organization. When possible, texture files should include the appropriate name affix and follow the appropriate image details:

    Texture TypeTexture Schema SuffixTexture image details
    Albedo_ALBRGB
    Metalness_METSingle Channel Greyscale
    Normal_NORRGB - Roblox only supports OpenGL format - Tangent Space normal maps.
    Roughness_RGHSingle Channel Greyscale
  • PBR Texture Budget - Use an appropriate texture map size based on the asset you are texturing to optimize for visual quality and performance. As a general guideline, each asset should have a texture resolution of 256x256 for every 2x2x2 unit space the asset occupies. If larger than a 2x2x2 cube, use the next highest resolution. The following are some baseline texture sizing examples:

    Recommended Map SizeApproximate Asset Size (unit cube)Example Assets
    64x64 - 128x1281x1x1Jewelry, sunglasses, eyebrows, mustaches
    1024x1024 (maximum)8x8x8Avatar characters
  • Substance Painter - If possible, create your final PBR texture using Substance Painter and ensure that the mesh maps are created without errors.

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:

  • Use 100% opacity for areas not related to a customized skin tone, such as eyes and brows.
  • When applying shading, use black at low opacity and adjust opacity when needed.
  • For areas that are partially translucent, such as shading contours or certain cosmetic features, leave some transparency for partial visibility of the skin tone.
  • You should consistently test out how various colors layers can interact with your shading.
Beige
Blue
Brown
Pink

Outer Cages

Outer cages are non-rendered meshes that Roblox uses to define the outer surfaces of a body part using a WrapTarget instance. Outer cages on your character model allow your character to wear layerable accessories, such as clothing.

For general use, see the following requirements for adding inner and outer cage meshes to your model:

  • Naming Conventions - The inner and outer cage must be named after the primary mesh object with _InnerCage and _OuterCage affixed.

  • Outer Cage - Models, such as a playable character, that aren't expected deform but are the target of meshes that will stretch over it, only require an Outer Cage.

  • 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: