Your Blender animation lands floating in Roblox. It is scale, not a bug
You exported from Blender, imported into Studio, and the character slides 15 cm above the floor. The culprit is Blender unit scale versus Roblox studs. Rig configuration that fixes it, plus the export checklist.
AI-assisted draft, reviewed, tested and edited by a human before publishing. See our Editorial Policy. · Reviewed by Gustavo Cantino, 9/2/26 Editorial Policy
You animated a nice walk cycle in Blender, exported FBX, imported it into the Animation Editor, and the character shows up floating. Or worse: the feet clip through the floor on half the frames.
Everyone's first reaction is to assume the animation is wrong and redo it. It isn't.
The problem
Blender works in meters by default. Roblox works in studs, and 1 stud ≈ 0.28 meters. When you export without settling this, the FBX carries a unit scale that Roblox's importer applies to the whole rig — including the height of the HumanoidRootPart.
The result isn't a bigger or smaller model (that would be obvious and you'd fix it immediately). The result is the pivot in the wrong place, and then the whole animation is offset on Y by a fraction that varies per bone.
That's why it looks like a random bug: the head lands right and the foot lands wrong.
The fix, step by step
- In Blender, under Scene Properties → Units, set Unit System: None. Not "Metric with Unit Scale 0.28" —
None. With Metric, Blender still stamps unit metadata into the FBX, and Roblox's importer reads the metadata, not what you see on screen. - Armature scale: 1.0, applied. Select the armature,
Ctrl+A→ Scale. If it reads 1.0 in the N panel but you never applied it, the FBX carries the unapplied scale. - Axis. Roblox is Y-up. In the FBX export: Forward
-Z Forward, UpY Up. - On export, leave Apply Unit Scale unchecked and Apply Transform checked. That's the combination nearly every tutorial gets backwards.
- R15 has 15 parts with fixed names. A bone named off-standard is not imported, and that is what makes an arm "disappear".
This post's artifact is the JSON with the full R15 hierarchy, the exact names and the export settings. Check your rig against it before exporting.
Common mistake
The most expensive mistake is fixing it in the animation instead of in the rig: moving every keyframe 15 cm down in the Animation Editor.
It works for one animation. Then you make a second one, the offset is different (because it depends on which bone you used as root), and now you have two animations with different offsets that cannot be blended. By the time you notice, you have eight animations to redo.
Fix the scale, re-export everything, and never keep an animation with a manual offset.
The second mistake is exporting the mesh along with the animation every time. Export the rig once, import it into Studio, then export only the animation (Bake Animation on, Add Leaf Bones off — a leaf bone becomes a phantom part in R15).
What to do next
With the rig matching the JSON, build a reference .blend with R15 already configured and reuse it across projects instead of setting it up from scratch. After that, the next topic is blending: how to mix walking and running without the foot skating, which is a matter of AnimationTrack:AdjustWeight, not of Blender.
Ready-to-use artifact
{
"description": "Rig and export configuration for taking animation from Blender to Roblox R15 without pivot displacement.",
"blender": {
"tested_version": "4.2 LTS",
"scene_units": {
"unit_system": "NONE",
"why": "With METRIC, Blender stamps unit metadata into the FBX. Roblox's importer reads the metadata, not what the viewport shows — and rescales the entire rig, displacing the pivot."
},
"armature": {
"scale": [1.0, 1.0, 1.0],
"applied": true,
"how": "Select the armature > Ctrl+A > Scale",
"why": "Scale reading 1.0 in the N panel but not APPLIED goes into the FBX as a pending transform."
}
},
"fbx_export": {
"path_mode": "COPY",
"apply_scalings": "FBX_SCALE_NONE",
"forward_axis": "-Z",
"up_axis": "Y",
"apply_unit_scale": false,
"apply_transform": true,
"bake_animation": true,
"add_leaf_bones": false,
"nla_strips": false,
"force_start_end_keying": true,
"traps": {
"add_leaf_bones": "On, it creates an extra bone at the tip of every chain. In R15 that becomes a phantom part the importer either rejects or imports crooked.",
"apply_unit_scale": "The combination nearly every tutorial inverts is this one with apply_transform. Correct is unit_scale OFF and transform ON."
}
},
"r15_hierarchy": {
"HumanoidRootPart": {
"LowerTorso": {
"UpperTorso": {
"Head": {},
"LeftUpperArm": { "LeftLowerArm": { "LeftHand": {} } },
"RightUpperArm": { "RightLowerArm": { "RightHand": {} } }
},
"LeftUpperLeg": { "LeftLowerLeg": { "LeftFoot": {} } },
"RightUpperLeg": { "RightLowerLeg": { "RightFoot": {} } }
}
}
},
"r15_exact_names": [
"HumanoidRootPart", "LowerTorso", "UpperTorso", "Head",
"LeftUpperArm", "LeftLowerArm", "LeftHand",
"RightUpperArm", "RightLowerArm", "RightHand",
"LeftUpperLeg", "LeftLowerLeg", "LeftFoot",
"RightUpperLeg", "RightLowerLeg", "RightFoot"
],
"conversion": {
"stud_in_meters": 0.28,
"default_r15_height_studs": 5.0,
"default_r15_height_meters": 1.4,
"note": "Use these numbers only to sanity-check visual proportion. Do NOT apply the 0.28 factor as a manual armature scale — that trades one displacement for another."
},
"checklist_before_export": [
"Unit System = None",
"Armature scale applied (Ctrl+A > Scale)",
"All 15 names match r15_exact_names exactly",
"Add Leaf Bones off",
"Apply Unit Scale off, Apply Transform on",
"Rig exported ONCE; after that, export animation only"
]
}