icon picker
Roblox Requirements

Process

All assets must pass a set of minimum requirements:
Biped humanoid body plans.
Production quality skinning based character rigs.
No large, non-removable accessories or loose clothing without body meshes underneath, see below.
A-pose only - To start, we would like to filter to only A-pose models (not T-pose, not I-pose). We understand that different people have different interpretations of what angle is an A-pose. We do not have strict requirements on the angle.
Assets that meet these basic requirements will need further modifications before they can be used by Roblox.

Steps

Clean
Update materials with local, relative texture paths, and simplified as needed to be portable. Eg basic Phong materials, no proprietary DCC shaders.
Remove curves and vertex without polygon, rig controls and etc. ​
Untitled.png
Untitled.png
Update skin influences to be normal joints as needed.
Select rig and export selected to FBX format. Geometry, materials, skeleton and skinning only, with locked normals, no animation, see below.
Re-import FBX, test skinning and materials.
Record tags in Info.json, see below
Record characterType, rigOrientation, meshBounds, meshCount, vertexCount, faceCount in Info.json, see below.
Rename
Bones names should be standardized to match HumanIK.
Multiples of the same joint can be numbered sequentially, eg LeftShoulderExtra2
Bones that don’t fit into the standard should be named descriptively with an added “Other” suffix, eg BellyButtonOther
Untitled.png
Record boneCount, shoulderBindAngle, wristBindAngle in Info.json, see below.

Reduce
Delete removable accessories and small parts.
Reduce mesh to 10k max total face count.
Transferred skinning to reduced meshes. ​
Untitled.png
Untitled.png
Record reducedMeshCount, reducedVertCount, reducedFaceCount in Info.json, see below.
Normalize
All meshes merged into a single mesh.
Orient the rig facing forward +Z and up +Y, right-hand coordinates.
Position feet at the origin and normalize the scale of the rig to 1 unit tall.
Move all skinning weights to the 15, R15 equivalent, HumanIK bones:
Hips
Spine (joint closest to middle of back)
Head
Left/RightArm
Left/RightForeArm
Left/RightHand
Left/RightUpLeg
Left/RightLeg
Left/RightFoot
Weight from other bones should be moved up the DAG(hierarchy) to the first parent from the above list.
Twist bone weights may need to be moved to their driving bone first, if they are not parented.
Rename and regroup DAG(hierarchy) to Roblox standard. ​
image.png
Roblox preparation
Position bellybutton at the origin. ​
Untitled.png
Textures should be merged into one 1024x1024 jpg image file, with UVs merged and normalized (1-0) ​
Untitled.png
Untitled.png
Untitled.png
Cages creation
Cages should be exported as separate FBX files.
image.png

Deliverables

Files:
An avatar prepared for Roblox and its cage should be exported as separate FBX files:
Character.fbx (main model)
Outer.fbx (cage)
Avatar textures should be in JPG file format, and placed in textures Folder.
Screenshots of the avatar front and back view (with wireframe and without wireframe) should be placed in Screenshots folder. For Outer.fbx file screenshot should contain an avatar + cage, so intersections between avatar and cage will be visible (if those exist).
Json file should be placed in Roblox folder. Json file should contain metadata presented below.
Folder Structure:
.
└── CharacterName/
├── Roblox/
│ ├── Character.fbx //Final FBX file
│ ├── Textures/
│ │ ├── texture_1.jpg
│ │ ├── texture_2.jpg
│ │ └── Etc
│ ├── Screenshots/
│ │ ├── FrontTexture.png
│ │ ├── FrontWire.png
│ │ └── Etc
│ └── Info.json
└── Cages/
├── Outer.fbx //Cage file
└── Screenshots/
├── FrontTexture.png
├── FrontWire.png
└── Etc

Info.json Metadata File:
tags // List of categories or tags from the original asset.
string[]
characterType // Best guess.
string
human
creature
robot
toon
anime
other
sourceDCC // The DCC used to create the asset.
string
maya
blender
3dsmax
mixamo
...
unknown
rigOrientation // Recorded as the character’s Front, Left, Up directions with sign.
char[6] // Eg, “+Z+X+Y” is facing forward in +Z with +Y up.
meshBounds // Cumulative bounds of all visible meshes.
float[3] minXYZ
float[3] maxXYZ
meshCount // Number of meshes.
int
vertexCount // Total number of mesh vertices.
int
faceCount // Total number of mesh faces.
int
boneCount // Total number of skinned bones.
int
shoulderBindAngle // Angle between upper arm and Y axis. 0 is arms straight down, 90 is arms parallel to the ground.
Float
wristBindAngle // Angle between thumb direction and Z axis. O is palms pointed down or in, 90 is palms pointed forward.
Float
reducedMeshCount // Total number of meshes after reduction.
int
reducedVertCount // Total number of mesh vertices after reduction.
int
reducedFaceCount // Total number of mesh faces after reduction.
int
Json Example:
{
"tags" : [
"human", "low_poly", "character"
],
"characterType" : "human",
"sourceDCC" : "blender",
"rigOrientation" : "+Z+X+Y",
"meshBounds" : {
"minXYZ": [
-10.0, -10.0, -10.0
],
"maxXYZ" : [
10.0, 10.0, 10.0
]
},
"meshCount": 1,
"vertexCount": 9000,
"faceCount" : 8000,
"boneCount" : 15,
"shoulderBindAngle" : 20.5,
"wristBindAngle" : 10.5,
"reducedMeshCount" : 1,
"reducedVertCount" : 6000,
"reducedFaceCount" : 5000
}

Additional information

Not Acceptable: Large, non-removable accessories

Untitled.jpg
If the wings and body are from a single mesh, then it is a large, non-removable accessory and should be rejected. If the wings are separated mesh that can be easily removed from the body, then it can be accepted. The same applies to the tails, weapons in the hands, etc.

Untitled.jpg
Untitled.jpg

If there is no body mesh beneath the dress and the dress cannot be removed, then it should be rejected




Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.