Page 1 of 1

Roblox Character Body Specifications and Export Checklist (October 2026): 15 Meshes, 3 Scales, 10,742 Triangles

Posted: Fri Oct 23, 2026 12:49 am
by ice
Quick Summary
  • A Roblox character body is 15 separately named mesh objects that the platform splits into 6 assets, and it ships with a rig, cage meshes, attachments, and face data
  • The three body scales are Normal, Slender (Narrow), and Classic, and they all share the same bounding box limits, so the total body size matters more than the sum of the parts
  • Triangle budgets are enforced per published asset: 4,000 for the head, 1,750 for the torso, 1,248 per arm and per leg, for a 10,742 triangle body
  • Attachments are the hidden half of the build: fixed names, fixed positions inside each part's bounding box, and cage meshes that let layered clothing wrap the body
  • Blender and Maya need different export settings, and getting the scale and axis conversion wrong is the most common reason a body arrives in Studio the wrong size
What Actually Goes Into a Body

A body is not one mesh. Roblox splits every character body into 15 mesh objects, each with its own name ending in _Geo, and it validates the model as a package rather than as a single file.[1]
  • Head_Geo
  • UpperTorso_Geo and LowerTorso_Geo
  • LeftUpperArm_Geo, LeftLowerArm_Geo, and LeftHand_Geo
  • RightUpperArm_Geo, RightLowerArm_Geo, and RightHand_Geo
  • LeftUpperLeg_Geo, LeftLowerLeg_Geo, and LeftFoot_Geo
  • RightUpperLeg_Geo, RightLowerLeg_Geo, and RightFoot_Geo
When the body is uploaded and turned into Marketplace assets, those 15 meshes become 6 assets: DynamicHead, Torso, LeftArm, RightArm, LeftLeg, and RightLeg.[1]

The rig is the part most people skip. A standard R15 rig needs the root chain Root, then HumanoidRootNode, LowerTorso, UpperTorso, and then the head and both arms branching off UpperTorso and both legs branching off LowerTorso. Both the Root bone and the LowerTorso bone have to sit at 0, 0, 0.[1]

The Three Body Scales

Roblox supports Normal, Slender, and Classic body scales. All three share the same bounding box limits, and you pick one when you import by choosing a Rig Scale option in the Importer, or you can set the body scale manually afterwards.[1]
  • Normal: the Rthro body scale. Import with Rig Type set to Rthro.
  • Slender (Narrow): the Rthro Narrow body scale. Import with Rig Type set to Rthro Narrow.
  • Classic: the Default body scale, the older blockier proportions.
The important thing to understand is that the 15 parts overlap each other. The total body dimensions are not the sum of the part dimensions, and Roblox says the total dimension is the number that actually decides whether your avatar is a standard size.[1] During validation Roblox rotates each limb into a standard orientation, measures the length of the rotated part, and works out the width and depth from the cross section.[1]

Bounding Box Limits, All Three Scales
  • Head minimum: 0.05 width, 0.5 length, 0.05 depth
  • Arm minimum: 0.05 width, 0.5 length, 0.05 depth
  • Torso minimum: 0.05 width, 0.65 length, 0.05 depth
  • Leg minimum: 0.05 width, 0.5 length, 0.05 depth
  • Total minimum: 1.0 width, 4.0 length, 0.5 depth
  • Head maximum: 4.0 width, 2.0 length, 4.0 depth
  • Arm maximum: 4.0 width, 4.5 length, 4.0 depth
  • Torso maximum: 4.0 width, 4.0 length, 4.0 depth
  • Leg maximum: 4.0 width, 4.5 length, 4.0 depth
  • Total maximum: 8.0 width, 10.0 length, 4.0 depth
Those limits are the current documentation values. One developer reported a Classic bundle measuring 2.2 studs on the Z axis where the page said 2.0, and Roblox staff replied that the documentation is accurate as of that date and pointed at the avatar body validation announcement instead.[1] Worth knowing before you argue with the validator over a couple of tenths of a stud.

Triangle Budgets Per Published Asset

Studio converts imported geometry to triangles on the way in, and each of the 6 published assets has its own ceiling.[1]
  • DynamicHead (Head): 4,000 triangles
  • Torso (UpperTorso, LowerTorso): 1,750 triangles
  • LeftArm (LeftUpperArm, LeftLowerArm, LeftHand): 1,248 triangles
  • RightArm (RightUpperArm, RightLowerArm, RightHand): 1,248 triangles
  • LeftLeg (LeftUpperLeg, LeftLowerLeg, LeftFoot): 1,248 triangles
  • RightLeg (RightUpperLeg, RightLowerLeg, RightFoot): 1,248 triangles
  • Whole body: 10,742 triangles
The documentation notes a shortcut for checking your own model in a third party package: the engine converts to triangles, so doubling the quad count gives you a rough estimate of the final triangle count.[1] That estimate is worth taking with a grain of salt, because quads are not always split the same way, and a model that lands just under a budget can still tip over it.

Attachments and Cages

Attachments are the anchor points where accessories and equippable objects attach to the body, and they carry fixed names with fixed rules about where they sit in the mesh bounding box.[1]
  • Head: FaceCenter_Att anywhere in the box, FaceFront_Att in the front half, Hat_Att and Hair_Att in the top half where they can overlap
  • UpperTorso: LeftCollar_Att and RightCollar_Att in the top half, Neck_Att in the top half, BodyBack_Att in the back half, BodyFront_Att in the front half
  • LowerTorso: Root_Att must be set to 0, 0, 0, WaistFront_Att in the front half, WaistBack_Att in the back half, WaistCenter_Att anywhere in the box
  • Arms: RightShoulder_Att and LeftShoulder_Att in the top half
  • Hands: RightGrip_Att and LeftGrip_Att anywhere in the box, oriented perpendicular to the lower arm bone
  • Feet: RightFoot_Att and LeftFoot_Att anywhere in the box
Grip attachments have a specific orientation rule. In an I-Pose, where the arms point down, the grip attachment is set to 90, 0, 0 so the grip faces forward.[1] Attachment points for head accessories have to sit on the visible surface of the head mesh, and floating points violate Marketplace policy.[1]

Cage meshes are the other half. The outer cage on a body lets layered accessories like shirts and jackets stretch and wrap around the character, and each body part's cage has to be named after its primary mesh with _OuterCage appended, for example LeftUpperArm_OuterCage.[1] The documentation is blunt about what happens if you edit them: do not delete vertices or alter the UVs on outer cages, because that causes errors on import and when the cage is equipped onto a character.[1]

One detail that trips people up: a character body only needs an outer cage, while layered accessories need both an inner and an outer cage to deform properly.[1]

Exporting From Blender
  1. Open File, then Export, then FBX (.fbx)
  2. Set Path Mode to Copy, then enable Embed Textures
  3. In Include, enable Custom Properties
  4. In Transform, set Apply Scalings to FBX Unit Scale
  5. In Armature, uncheck Add Leaf Bones
  6. Enable Animation, then uncheck NLA Strips, All Actions, and Force Start/End Keyframes
  7. Set Simplify to 0.0
  8. Export the file
The animation range matters more than people expect. The documentation says to make sure the project timeline's Start and End values cover the entire range of your keyframes before you export.[2] If you are exporting animation or FACS face animation, the timeline has to include every keyframe, and the importer's Simplify value has to be 0.0 so nothing gets dropped.

If your model arrives at the wrong scale, the documentation points at Blender FBX scaling as the first thing to check.[2]

Exporting From Maya
  1. Open File, then Export All
  2. In Files of type, select FBX export
  3. Open the Options section
  4. In Geometry, enable Smooth Mesh and Referenced Asset Content
  5. In Animation, enable Animation, then Bake Animation
  6. In Embed Media, enable it if you need textures as .png
  7. In Advanced Options, set Units to Automatic
  8. In Axis Conversion, set the Up Axis to Y
  9. Export All
The axis conversion is the one that catches people. Roblox characters face positive Z and stand up in positive Y, so a Maya export with the wrong up axis gives you a character lying down or facing the wrong way on import.[1]

Dynamic Heads Add Their Own Requirements

A dynamic head needs an outer cage that does more than a body cage. The outer cage establishes facial landmarks for the eyes and mouth during validation, and the documentation expects three distinct landmarks: a left eye landmark, a right eye landmark, and a mouth landmark.[3] The mouth landmark vertices sit on the second loop of vertices from the mouth opening, which the page says helps avoid landmark validation problems.[3]

Publishing Checklist
  1. Check your triangle count against the per asset budgets before you start, not after a rejection
  2. Confirm the Root and LowerTorso bones sit at 0, 0, 0
  3. Name all 15 mesh objects with the _Geo affix
  4. Name all attachments and place them inside the right half of the bounding box
  5. Add an outer cage for every body part with the _OuterCage affix
  6. Set Material to Plastic, Transparency to 0, and VertexColor to the default 1, 1, 1
  7. Strip extraneous objects such as scripts and extra parts out of the Model instance
  8. Add eyelashes and eyebrows as Accessory objects if they are separate assets
  9. Export with the animation timeline covering every keyframe and Simplify at 0.0
  10. Test in Studio, then upload through Save to Roblox with Submit As set to Avatar Asset
The final step matters because the upload path is specific. Bodies and heads must be a Model object, and the documentation notes you can add a default skin color by adding a BodyColors object to that model.[4] Accessories and clothing, by contrast, must be an Accessory object, and each shoe has to be its own accessory named LeftShoeAccessory and RightShoeAccessory and grouped as a Model before the upload.[4]

There is no upload limit on bodies or heads, and no limit on uploads for moderation. The only cap in that table is on publishing, where free Limiteds are capped at 50 per day and paid Limiteds have no limit, and the footnote clarifies that only the first time an asset is enabled for sale counts against that cap.[4]

FAQ

How many mesh objects does a Roblox body need?
15. Head, upper and lower torso, three arm meshes on each side, and three leg meshes on each side, each named with the _Geo affix.[1]

What is the triangle budget for a whole body?
10,742 triangles, split as 4,000 for the head, 1,750 for the torso, and 1,248 for each arm and each leg.[1]

Do Normal, Slender, and Classic bodies have different size limits?
No. The same bounding box limits apply to all three scales, and you select the scale at import with the Rig Scale options.[1]

Why is my layered clothing not wrapping my custom body?
Most likely a missing or altered outer cage. Bodies need an outer cage per part named with _OuterCage, and the vertices and UVs must not be changed.[1]

Do I need both an inner and outer cage on a body?
No. A character body only requires an outer cage. Layered accessories need both an inner and an outer cage.[1]

What pose should I export in?
I-Pose, A-Pose, or T-Pose, with the character facing positive Z and standing in positive Y. The LeftUpperArm and RightUpperArm bones can carry rotation values to reach the pose.[1]

Can head accessories float above the head mesh?
They should not. Attachment points for head accessories have to sit on the visible surface of the head mesh, and points that float away from it violate Marketplace policy.[1]

How do I set a default skin color on a body?
Add a BodyColors object to the Model before uploading. Bodies and heads must be uploaded as a Model, not as an Accessory.[4]

Sources