Importing FBX files in Unity with the correct scale, rotation, and axis is fraught.
If you are just looking for a quick way to get models importing into Unity properly, take a look at the Pontoco Import/Export Settings.
The FBX Sanitizer tool can be used to validate an FBX file to verify that it will import into Unity with correct scale and rotation.
FBX is in cm by default, but can support other units. Other unit scales are achieved in FBX by by setting GlobalSettings→Properties70→UnitScaleFactor
property in the fbx. For example, a 1 meter cube in 'meters' should be stored in an fbx file like:
GlobalSettings:
Properties70:
UnitScaleFactor = (100.0) # The 'unit' is 100 * 1cm
CubeObject:
Lcl Scaling = (1,1,1)
This file will show up in Unity's importer as '1m (File)'. image
Instructions for Blender
In order to achieve the above scaling (scale of 1 on objects, UnitScaleFactor=100), in the export settings set one of the following for Transform→Apply Scaling
:
Instructions for Maya
Maya is not able to export in Meters without applying a scale to the object. This is because Maya works in a CM unit internally, even if you set it to display meters. If you want to get a unit transform when importing to Unity, you must model in cm, pretending that you're modeling in meters. Then, import into Unity with the 'Convert File Units' checkbox unchecked.
This has the unfortunate result that these FBX files will import extremely tiny in any other program (like Blender). However, it's the only way we've found to get Maya to export to Unity without a scale.
3DS Max
In the FBX file format, global axis alignment is stored in the GlobalSettings:
UpAxis: 0,0,1 (+Z)
FrontAxis: 0,1,0 (+Y)
CoordAxis: -1,0,0 (-X)
-
Unity uses these properties to determine the coordinate system for the file. On import, the asset will be rotated to convert it from the file-coordinate system, to the Unity coordinate system. As of 2020.1, when “Bake Axis Conversion” is checked, these rotations will be baked into the meshes, rather than applied in the transforms.
For Blender it's important to note the difference between the terms “Front” and “Forward”. Front refers to the direction a model faces. In Blender this is -Y, in Unity this is +Z. Forward refers to the direction you would walk when looking at a model from the front. In Blender this is +Y and in Unity this is +Z. 1)
Instructions for Blender ~2.92
Unity's 'Bake Axis Conversion' checkbox is buggy, however it seems to be the most reliable way to get the correct rotation from objects exported from Blender.
In Blender 2.92, the export behavior changed slightly, so we can simply:
Instructions for Blender ~2.90
Note! This path is buggy. Blender does not seem to apply transforms to objects deeper than 2 parents in the hierarchy. Recommended not to use this path.
Select “!Experimental! Apply Transforms”.
Axis must be set as -Z Forward, and Y Up.
In Unity, “Bake Axis Conversion” must be off.
Note: If your object does not support Apply Transforms, you should either counter-rotate the object, or upgrade to Blender >2.92.
Instructions for Maya
Maya uses the same coordinate space as Unity. Just use the default export settings!
Instructions for 3DS Max
Max uses a Z up coordinate space.
1. Make sure to always have “Z-Up” selected when exporting in the FBX Exporter.
2. Check the “Bake Axis Conversions” box in the Unity importer. Unity will correct the coordinate axis.