OBJ, FBX, GLB or STL: which format, and when
Part of The OBJ file format, explained for game engines
Every model you download or export will be in one of four formats, and each one exists for a reason. This is what they carry, what they lose, and which engine wants which. It is the comparison from the OBJ guide; the import steps for whichever you end up with are in the Unity, Godot and Unreal articles.
The table
| OBJ | FBX | GLB (glTF) | STL | |
|---|---|---|---|---|
| kind | text | binary | binary, open spec | binary or text |
| geometry | yes | yes | yes | triangles only |
| normals | optional | yes | yes | per face |
| texture coordinates | yes | yes | yes | no |
| materials | in a second file (MTL) | embedded | embedded, PBR | no |
| textures | by file name | embedded or by name | embedded | no |
| vertex colours | non-standard | yes | yes | no |
| hierarchy | flat, named objects | full scene tree | full scene tree | none |
| rig and animation | no | yes | yes | no |
| units | none stated | stated | metres | none |
| up axis | none stated | stated | Y | none |
| Unity | native | native | via glTFast package | no |
| Godot 4 | native | native from 4.3 | native, preferred | no |
| Unreal | native | native | native | no |
| printers | rarely | no | no | yes, and 3MF |
| readable by a person | yes | no | no | text form, yes |
OBJ
The oldest and the simplest. A text file of vertices and faces with a companion .mtl for materials. It carries no unit and no up axis, so every importer assumes something; it carries no rig, no animation and no scene hierarchy. What it has is universality: everything reads it, it is easy to generate and to inspect, and for a static prop it holds everything that matters.
Use it for static environment pieces and props, for anything you might want to read or repair in a text editor, and for the widest possible compatibility. The OBJ guide is the full anatomy.
FBX
Autodesk's format, and the one Unity and Unreal pipelines assume. Binary, so compact and unreadable; it holds meshes, materials, textures embedded or referenced, the whole scene hierarchy, skeletons, skinning, animation clips, blend shapes and cameras. Every engine reads it through Autodesk's library, which is why support is universal and why nothing outside Autodesk writes it perfectly.
Its well-known trap is scale: Blender's FBX exporter and Unity's importer disagree about centimetres and metres, which is the origin of models arriving a hundred times too big or too small. Godot 4.3 and later read FBX with its own importer, ufbx; earlier versions needed a conversion to glTF.
Use it for characters, for anything rigged or animated, and when a Unity or Unreal project has a pipeline built on it.
GLB and glTF
glTF is the open format from the Khronos Group, the people behind OpenGL and Vulkan; GLB is its single-file binary form. It holds what FBX holds, meshes, hierarchy, PBR materials with textures embedded, skeletons and animation, in a specification anyone can read, with units fixed at metres and Y up so there is nothing to assume. It is the web's format and Godot's preferred one; Unreal imports it natively; Unity needs the glTFast package, which is a one-line install from the package manager.
Use it for almost anything once you have it, and ask for it first from a pack that offers a choice. Its one gap is that older tools and some marketplaces still do not write it well.
STL
Triangles and nothing else: no colour, no material, no texture coordinates, no unit, and a normal per face that most readers ignore. It is the format 3D printers and slicers want, and no engine reads it. 3MF is its modern replacement, with colours and units, and slicers read both.
Use it for printing, and for nothing else.
Which to ask a pack for
For a game: GLB if offered, FBX if not, and OBJ if it is what there is; OBJ is never wrong for a static prop. For a printer: STL or 3MF. If a pack offers OBJ and FBX only and the model is static, the OBJ is the safer file, because there is nothing in it to go wrong.
What PolyMason writes
The tree builder writes OBJ with its material library and a palette texture, STL for printing, and 3MF with the colours in it. GLB is next, for Godot and the web; FBX after that, for Unreal.
More in this guide
- The OBJ file format, explained for game enginesEverything in an OBJ file and its MTL, everything it leaves out (units, axes, colours), how it compares with FBX, GLB and STL, and how Unity, Godot and Unreal each import one without the model arriving tiny, sideways or grey.
- How to import an OBJ into Unity, at the right size, in colour, shaded flatStep by step: getting an OBJ and its materials into Unity, the Scale Factor and Convert Units settings that make a model the right size, what to do when a model arrives a hundred times too big, the Materials tab, normals for flat shading, and colliders.
- How to import an OBJ into Godot 4, as a mesh or a sceneStep by step: putting an OBJ and its MTL into a Godot 4 project, the difference between importing it as a mesh and as a scene, scale, materials, reimporting after a change, generating LODs, and adding collision.
- How to import an OBJ into Unreal Engine, at the right scaleStep by step: importing an OBJ as a Static Mesh in Unreal Engine 5, the Import Uniform Scale of 100 that a file in metres needs, Convert Scene for the up axis, Normal Import Method for flat shading, what happens to the MTL's materials, collision, LODs and Nanite.
Or build a tree and see what comes out.