The tiny disagreements that cause giant props: every app's units, up-axis, forward convention, and handedness in one table - plus the fix for each common pairing. This page exists to be linked in Slack the next time something imports sideways.
| Application | Native unit | Up | Forward (convention) | Handedness |
|---|---|---|---|---|
| Blender | meters | Z+ | -Y (front faces -Y) | Right |
| Maya | centimeters | Y+ | Z+ | Right |
| Houdini | meters | Y+ | Z- | Right |
| 3ds Max | inches (configurable) | Z+ | Y- | Right |
| Unreal Engine | centimeters | Z+ | X+ | Left |
| Unity | meters | Y+ | Z+ | Left |
| Godot | meters | Y+ | -Z | Right |
| glTF (format) | meters | Y+ | Z+ | Right |
Read it and the whole genre of import bug explains itself: Blender->Unreal must convert meters->centimeters and re-aim forward and flip handedness; Maya->Unity only has to survive the cm->m scale. FBX carries metadata for all of this, which each importer honors slightly differently - hence the rule: fix conventions in saved export presets, never in the scene, never per-asset by hand.
| Route | The failure you'll see | The fix that sticks |
|---|---|---|
| Blender -> Unreal | 100x too small, or -90 deg X-rotation stowaway | Exporter: Apply Scale = FBX All, Bake Space Transform = on. Full walkthrough in Blender for Game Artists |
| Blender -> Unity | Scale 100 on the import, or rotated -90 deg X | Same preset as UE; Unity side: model importer "Use File Scale" on, or export glTF - Unity's glTF path skips most of the dance |
| Maya -> Unreal | Mostly painless (both cm, both Z-up-adjacent) | The easy route - main check: working units actually set to cm, world-forward agreed with the team |
| Maya -> Unity | Everything 100x too big | cm->m: let Unity's "Convert Units" do it (default on) - do NOT also scale in Maya, the classic double-conversion |
| Houdini -> engine | Fine to Unity, Y-up->Z-up confusion to UE | Houdini's UE tooling/HDA path handles it; for raw FBX, set the export's up-axis to match target |
| Anything -> anything, characters | Root bone rotated, animation twists | Skeletons multiply every axis sin - agree on ONE authoring orientation for rigs, validate at export (a pipeline script job) |
Point your right hand's fingers along +X and curl toward +Y: thumb points +Z - that's right-handed, most DCCs. Unreal and Unity's +Z (or +Y) comes out the other way: left-handed. Practical consequences, beyond "the importer deals with it": cross products flip (why hand-computed normals sometimes invert crossing apps - see the math sheet), rotation signs flip (a +30 deg yaw in Blender may be -30 deg in-engine), and winding order flips - which is why a mesh mirrored with scale -1 shows inside-out in engine: its triangles now wind backwards and get culled. If you remember one thing: negative scale is not a mirror tool for game assets. Mirror the geometry, apply it, recalculate normals.
An outsourcing partner once delivered four hundred props, every one carrying rotation X=-90 "because that's how they import right." They did import right - until someone reset a transform during a layout pass and a temple pillar lay down like it was tired. We wrote a validator that rejected non-zero import rotations at the door and re-exported the batch properly through a shared preset in an afternoon. The matrix on this page was pinned in that Slack thread for a year.