Maya -> FBX -> Unity scale tests

I spent a little time examining exactly what is going on with the scale factor when exporting from Maya to Unity through FBX. (Yes, I know it has been discussed many times). I share my results here:

In Maya:

  1. Set units to cm
  2. Create unit cube (bounding box -0.5 to 0.5)
  3. Export FBX in cm (scale factor 1.0) to CubeA.fbx
  4. Export FBX in m (scale factor 0.01) to CubeB.fbx
  5. Set units to m
  6. Recreate unit cube
  7. Export FBX in m (scale factor 1.0) to CubeC.fbx
  8. Export FBX in cm (scale factor 100) to CubeD.fbx

I then examined the FBX file in a text editor, and the resulting mesh in Unity. When importing into Unity “Use File Scale” was set to true…

							CubeA	  CubeB	  CubeC	CubeD
Maya: units 				cm		 cm		 m		m
Maya: export as			 cm (1.0)   m (0.01)   m (1.0)  cm (100)
FBXfile: UnitScaleFactor	1		  100		100  	1
FBXfile: Vertices   		0.5,-0.5   0.5,-0.5   50,-50   50,-50
Unity: File Scale  		 0.01	   1		  1		0.01
Unity: Mesh.Bounds.Size 	0.01	   1		  100	  1
Unity: Scale				1		  0.01	   0.01	 1
Unity: WorldSize			0.01	   0.01	   1		1

From this, we learn:

  1. The vertex positions in the FBX file are always in cm, even if Maya is set to metres. Maya intends the final local vertex position to be found by scaling by 1 / UnitScaleFactor
  2. In Unity, the File Scale = the FBX file UnitScaleFactor / 100
  3. Unity transforms the vertices on import by the File Scale
  4. Unity sets the object transform scale to 1 / UnitScaleFactor

If we assume units in Unity are in meters, then all cubes have the correct size in Unity: A and B are 1 cm and C and D are 1 metre. However, I would prefer that the cube have, in Unity, a scale of 1, a world size of 1 (and, therefore, a mesh with unscaled size of 1). This is only achieved for cube D, when Maya was set to metres, but export as cm.

Let me know if I made any mistakes, and if not, hopefully this is helpful to someone.

I also found out the hard way that in Maya, the Advanced Options window in the Game Exporter for FBX is still broken (Maya 2023).

  • If you never press the cog icon to open the Advanced Options and Use Advanced Options is disabled, it will export with the correct Unit Scaling.

  • As soon as you open the dialog (don’t need to do anything else!), all further exporting will mistakenly multiply the scaling by 100, because it assumes it needs to convert m to cm now or something. :frowning:

  • Unity will show “1m to 1m” and the model will have an internal downscaling of 0.01 (Lcl Scaling in the FBX ASCII file). Meaning it will look right when imported into Unity, but the GameObject will actually be scaled down by 0.01. This is the part I wanted to fix.

  • You can correct it though, by disabling “Automatic” and setting the Unit to cm. It will display a scaling factor of 100, which will cause the model to export 1:1. Unity will now display “1cm to 0.01m”. The model will no longer be scaled down and will actually be the correct size! Hooray!

  • However, each time you open the Advanced Options dialog again, you have to repeat that. You even have to toggle Automatic on and off again, because it disables the selection field immediately, even if Automatic was off! Clearly that dialog window is broken.

This is stupid. But at least it works now.