File formats
3D file formats
Standard ways of storing a 3D model in a file so different programs can exchange it.
- #formats
- #pipeline
- #gltf-vs-fbx
- #pbr-materials
Quick answer
What are 3D file formats?
Standard ways of storing a 3D model in a file so different programs can exchange it. Each format decides what survives the trip: geometry, UVs, materials, textures, skeletons, animation or whole scenes. The common ones are glTF and GLB for real-time and the web, FBX for game engines and animation, OBJ for simple geometry, and STL for 3D printing.
What a 3D file can contain
A 3D file can carry far more than a shape, and formats differ mainly in how much of the rest they keep:
- Geometry: vertices, faces and normals. Every format stores this.
- UVs: the 2D layout that maps textures onto the surface. See UV mapping.
- Materials and textures: anything from a single colour to a full set of PBR maps.
- Scene data: object hierarchy, pivots, transforms, cameras and lights.
- Skeletons and animation: bones, skin weights, keyframes and morph targets.
When a model "loses" something on export, it is almost always because the target format has no place to store it.
glTF and GLB
glTF is an open standard from the Khronos Group, the consortium behind OpenGL and Vulkan, designed for efficient delivery to real-time renderers. It stores geometry, UVs, PBR materials in the metallic-roughness model, scene hierarchy, skeletons, animations and morph targets. The specification fixes the conventions that cause most cross-tool problems: +Y is up, units are metres, and the coordinate system is right-handed.
It comes in two packagings with identical content. .gltf is a JSON text file that usually sits next to a .bin file of geometry and separate texture images, which suits version control. .glb is everything packed into one binary file, which suits uploading and sharing. Godot's documentation recommends glTF 2.0 as its preferred import format, and Three.js, Babylon.js, Unreal Engine and Blender all read it.
FBX
FBX is Autodesk's proprietary interchange format. It became the de facto standard for moving rigged and animated characters between modelling tools and game engines, and Unity imports it natively. Its weakness is that it is proprietary: the full specification is not public, other tools rely on the FBX SDK or on reverse-engineered readers, and materials are interpreted differently by each program. Expect to reconnect textures after import. The detail comparison is in glTF vs FBX.
OBJ
OBJ, from Wavefront Technologies, is one of the oldest formats still in daily use. It is plain text, almost every 3D program reads it, and it stores geometry, UVs and normals reliably. Materials go in a companion .mtl file with a simple pre-PBR material model. It has no skeletons, no animation and, as Godot's documentation notes, no second UV channel and no PBR materials. Use it when you need a static mesh to open anywhere.
STL and USD
STL is the 3D-printing format. It stores a surface as raw triangles with no colour, UVs or materials, which is all a slicer needs.
USD (Universal Scene Description), from Pixar, is built for assembling very large scenes from many layered files in film and visual-effects pipelines. USDZ, a packaged variant, is the format Apple's AR Quick Look uses on iPhone and iPad.
GLB vs OBJ
For a static model, both formats keep the geometry and UVs intact. The differences are everything around it:
- Textures. A GLB carries its textures inside one file. An OBJ needs its .mtl file and every image to travel alongside it, with the paths intact.
- Materials. GLB stores full PBR materials. OBJ stores a basic colour and specular model, so roughness and metalness are lost.
- Size and loading. GLB is binary and loads quickly. OBJ is text, so files are larger and slower to parse.
- Scene and motion. GLB can hold several objects with their hierarchy, plus animation. OBJ holds static meshes only.
Choose GLB for the web, AR and modern engines. Keep OBJ for older software and for the rare tool that reads nothing else.
Which format should you use?
- Web, Three.js, Godot, AR on Android: GLB.
- Unity: FBX, which it imports natively. glTF also works through Unity's glTFast package.
- Unreal Engine: FBX or glTF. Both import directly.
- Blender to another DCC tool: FBX for rigs and animation, glTF for static assets with PBR materials.
- 3D printing: STL, or 3MF if your slicer supports it.
- Apple AR Quick Look: USDZ.
If a model will carry multiple LOD levels, check that your engine's import convention matches the format: Unity's automatic LOD Group setup, for example, reads _LOD0, _LOD1 meshes from a single FBX file.
The common 3D file formats compared
| Format | Best for | Materials | Animation and rigs | Owner |
|---|---|---|---|---|
| glTF / GLB | Web, real-time engines, AR | PBR (metallic-roughness) built in | Yes | Khronos Group (open standard) |
| FBX | Unity, Unreal, DCC-to-engine transfer | Yes, but interpreted differently by each tool | Yes | Autodesk (proprietary) |
| OBJ | Simple static meshes, maximum compatibility | Basic, via a separate .mtl file; no PBR | No | Open (Wavefront) |
| STL | 3D printing | None — no colour or UVs | No | Open (3D Systems) |
| USD / USDZ | Film pipelines, large scenes, Apple AR | Yes | Yes | Open (Pixar) |
3D file formats in Vi3W
Vi3W exports glTF, GLB, FBX and OBJ. GLB is the simplest choice for the web and for Godot, FBX drops straight into Unity, and OBJ is the fallback for older tools. The text-to-3D page shows the export step in context.
Frequently asked questions
Import glb with textures?
A GLB file packs its textures inside the file, so Blender's glTF importer brings them in automatically. If the model still looks plain, switch the viewport to Material Preview or Rendered: Solid mode only shows image textures when its colour option is set to Texture. Then check the material's nodes: if no image texture nodes are present, the file itself was exported without textures or with materials the importer could not map.
Interactive part in GLB or GLTF format?
glTF can store animations but not interaction logic. Keyframed motion exports fine, but anything triggered by a key press, a click or game rules lives in code, and the file has no place for code. A viewer simply plays the animations it finds. For interactivity, load the GLB into an engine or a web framework such as Three.js and trigger the animations from your own scripts.
How do I make my glTF-files look the same in other 3D-viewers as in Blender?
Match the lighting, not the file. glTF stores the model and its PBR materials, but not your HDRI, world settings, exposure or colour management, and each viewer applies its own environment and tone mapping. Light the scene in Blender with a neutral HDRI at normal strength, avoid compensating for bright lights in the textures, and preview in the viewer your audience will actually use.
Related terms
- glTF vs FBXBoth carry 3D models with materials, skeletons and animation, but they come from different worlds.
- PBR materialsSurface descriptions built on physically based rendering, which models how real light reflects off real surfaces.
- Level of detail (LOD)A rendering optimisation that swaps a model for simpler versions as it gets smaller on screen.
Sources & further reading
From text to 3D
Create 3D models with AI in seconds.
Turn ideas into game-ready 3D models from text, a sketch or an image. No complex software — it all runs in your browser.
Last reviewed



