3D File Formats: OBJ, STL, glTF, FBX and USDZ Compared
The 3D world is fragmented into dozens of formats. Each was designed for a specific purpose: 3D printing, game engines, web, augmented reality, or industrial CAD.
Quick Comparison
| Format | Extension | Geometry | Materials | Animation | Best for |
|---|---|---|---|---|---|
| OBJ | .obj + .mtl | Yes | Basic | No | Classic static interchange |
| STL | .stl | Mesh only | No | No | 3D printing |
| glTF | .gltf / .glb | Yes | Full PBR | Yes | Web, AR, modern engines |
| FBX | .fbx | Yes | Yes | Yes | Maya, Unity, Unreal |
| USDZ | .usdz | Yes | Yes | Yes | AR on iOS / Apple Vision Pro |
| STEP | .step | Precise CAD | No | No | Industrial CAD |
| 3MF | .3mf | Yes | Colors | No | Modern 3D printing |
| PLY | .ply | Yes + point clouds | Vertex color | No | Research, 3D scanning |
OBJ — The Universal Classic
OBJ is plain text supported by virtually all 3D applications:
# Vertices
v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 0.5 1.0 0.0
# UV texture coordinates
vt 0.0 0.0
vt 1.0 0.0
# Normals
vn 0.0 0.0 1.0
# Face (triangle: vertex/uv/normal)
f 1/1/1 2/2/1 3/3/1
Associated .mtl material file:
newmtl red_material
Kd 1.0 0.0 0.0
map_Kd color_texture.png
STL — 3D Printing Standard
STL only stores surface geometry as triangles. No colors, materials, or animation.
Exists in ASCII (readable) and binary (more compact, preferred) versions.
glTF / GLB — The "JPEG of 3D"
glTF 2.0 is the recommended format for web and modern engines:
- .gltf: JSON + external files (.bin + images)
- .glb: binary package (everything in one file)
- Built-in PBR materials
- Skeleton animation and morph targets
- GPU-efficient loading
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
const loader = new GLTFLoader();
loader.load('/models/character.glb', (gltf) => {
scene.add(gltf.scene);
const mixer = new THREE.AnimationMixer(gltf.scene);
mixer.clipAction(gltf.animations[0]).play();
});
FBX — Entertainment Industry Standard
Created by Autodesk, preferred for production pipelines (film, games):
- Full animation, bones, blend shapes support
- Native in Maya, 3ds Max, MotionBuilder
- Direct import in Unity and Unreal Engine
- Proprietary format (not fully open specification)
USDZ — Augmented Reality on Apple
Apple's format for AR Quick Look (iOS) and Apple Vision Pro:
- Based on USD (Universal Scene Description) by Pixar
- Compatible with AR Quick Look in Safari iOS without additional app
- Native 3D preview in macOS Finder
STEP — Precision CAD
STEP (ISO 10303) stores exact parametric CAD geometry:
- Used in engineering, architecture, manufacturing
- Interchange between SolidWorks, CATIA, AutoCAD, Fusion 360
- Not suitable for real-time rendering
Convert with Blender CLI
# FBX -> GLB
blender --background --python - << 'PYEOF'
import bpy
bpy.ops.import_scene.fbx(filepath="/path/model.fbx")
bpy.ops.export_scene.gltf(filepath="/path/model.glb", export_format='GLB')
PYEOF
# OBJ -> GLB
blender --background --python - << 'PYEOF'
import bpy
bpy.ops.import_scene.obj(filepath="/path/model.obj")
bpy.ops.export_scene.gltf(filepath="/path/model.glb", export_format='GLB')
PYEOF
# STL -> OBJ
blender --background --python - << 'PYEOF'
import bpy
bpy.ops.import_mesh.stl(filepath="/path/model.stl")
bpy.ops.export_scene.obj(filepath="/path/model.obj")
PYEOF
Convert with Open3D (Python)
import open3d as o3d
# Read OBJ or PLY
mesh = o3d.io.read_triangle_mesh("model.obj")
print(f"Vertices: {len(mesh.vertices)}, Triangles: {len(mesh.triangles)}")
# Save as STL / PLY
o3d.io.write_triangle_mesh("model.stl", mesh)
o3d.io.write_triangle_mesh("model.ply", mesh)
# Simplify mesh
simplified = mesh.simplify_quadric_decimation(target_number_of_triangles=10000)
o3d.io.write_triangle_mesh("model_simple.stl", simplified)
Repair STL with Trimesh
import trimesh
mesh = trimesh.load("model.stl")
print(f"Watertight (closed): {mesh.is_watertight}")
print(f"Volume: {mesh.volume:.2f} mm3")
trimesh.repair.fix_normals(mesh)
trimesh.repair.fix_winding(mesh)
mesh.fill_holes()
mesh.apply_scale(1000) # meters to millimeters
mesh.export("model_repaired.stl")
When to Use Each Format
| Use case | Recommended format |
|---|---|
| 3D printing (FDM, SLA) | STL or 3MF |
| Game engine (Unity, Unreal) | FBX or GLB |
| Web 3D (Three.js, Babylon.js) | GLB (binary glTF) |
| AR on iOS | USDZ |
| AR on Android / web | GLB |
| Industrial CAD | STEP |
| Universal simple interchange | OBJ |
| Research / 3D scanning | PLY |
Convert Online
To convert between 3D formats without installing Blender, KaijuConverter enables direct browser-based conversion.
Related conversions
Frequent conversions across the catalogue: