What Is OBJ? Origins and History
The OBJ format was created by Wavefront Technologies in the late 1980s for their Advanced Visualizer software — a high-end 3D animation package used in film and broadcast production. Wavefront published the specification openly (no formal open-source license, but the format was freely documented and widely adopted), which allowed the format to spread rapidly across the industry.
By the early 1990s, OBJ had become the baseline interchange format for 3D content — the lowest common denominator that almost every modeling, animation, and rendering tool could read and write. Three decades later it remains ubiquitous. Its longevity comes from radical simplicity: OBJ is plain ASCII text, human-readable, and requires no special parser to understand.
Technical Specification: How OBJ Files Work
An OBJ file is a plain text file where each line begins with a keyword:
| Keyword | Meaning |
|---|---|
v |
Vertex position (X Y Z) |
vn |
Vertex normal (X Y Z) |
vt |
Texture UV coordinate (U V) |
f |
Face (polygon — usually triangles or quads) |
mtllib |
Reference to a companion MTL material file |
usemtl |
Switch to named material for subsequent faces |
o |
Object name |
g |
Group name |
# |
Comment |
A minimal OBJ for a single triangle looks like this:
# Simple triangle
v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 0.5 1.0 0.0
f 1 2 3
Face lines can reference vertices, texture coordinates, and normals together using the v/vt/vn syntax: f 1/1/1 2/2/2 3/3/3.
The MTL Companion File
The MTL (Material Template Library) file defines how surfaces look. Common MTL properties:
Ka— ambient color (RGB)Kd— diffuse color (RGB) — the main surface colorKs— specular color (RGB)Ns— shininess (0–1000)d/Tr— transparency / dissolvemap_Kd— path to the diffuse texture imagemap_Ks— path to the specular texture imagemap_bump/bump— path to the normal/bump map
When you move an OBJ file, always keep the MTL file and all referenced texture images in the same folder, or materials will appear grey/missing.
OBJ Advantages
- Universal support — virtually every 3D application can read and write OBJ
- Human-readable — open in any text editor to inspect or manually edit
- N-gon support — faces can have more than 4 vertices (quads, pentagons, etc.), unlike STL's triangles-only requirement
- MTL material system — basic but functional color and texture support
- No proprietary lock-in — open format, no licensing fees
OBJ Limitations
- No animation — OBJ is a static snapshot; no bones, rigs, or keyframes
- No PBR materials — the MTL system predates physically-based rendering; no roughness, metallic, or emission maps in the core spec
- Large file sizes — ASCII text means coordinates like
1.234567take 8+ bytes instead of 4 bytes in binary - Fragile texture references — MTL uses relative file paths; moving files separately breaks the material link
- No binary standard — a binary OBJ extension exists but is almost never used in practice
OBJ vs STL: Format Comparison
| Feature | OBJ | STL |
|---|---|---|
| Color / Texture | Yes (via MTL) | No |
| Animation | No | No |
| 3D Printing | Possible (needs conversion) | Native purpose |
| Web / Real-time | Possible (Three.js, Babylon.js) | Rarely |
| File size | Larger (ASCII) | Smaller (binary) |
| Tool support | Universal | Universal |
| Material system | Basic (MTL) | None |
OBJ vs GLTF/GLB: Modern Replacement
GLTF 2.0 (and its binary variant GLB) is the modern replacement for OBJ in web and game contexts:
- Binary (GLB) or JSON+binary (GLTF) — compact and fast to load
- Full PBR material support (roughness, metallic, emissive, occlusion maps)
- Animations, cameras, and lights in a single file
- Draco mesh compression support
- Widely supported by Three.js, Babylon.js, Unity, Unreal, and model-viewer (Google)
OBJ remains dominant for static mesh interchange between DCC tools (Blender, Maya, Cinema 4D, ZBrush) because of its universal support and simplicity.
Applications That Open and Edit OBJ
- Free: Blender, MeshLab, FreeCAD, Wings3D
- Professional: Autodesk Maya, 3ds Max, Cinema 4D, Houdini, ZBrush, Modo, Substance Painter (import)
- Viewer: Autodesk Viewer (web, free), Three.js-based viewers, glTF Viewer (convert first)
Viewing OBJ on the Web
Three.js, Babylon.js, and A-Frame can all load OBJ+MTL files. Google's <model-viewer> component does not support OBJ natively — convert to GLB first. For production web delivery, always prefer GLB: smaller, faster, better material support.
Converting OBJ to Other Formats
OBJ → STL (for 3D printing)
In Blender: File → Import → Wavefront (OBJ), then File → Export → STL. Check Apply Modifiers to bake all modifiers. In MeshLab: open OBJ → Filters → Mesh → Export Mesh As → STL. CLI: assimp export model.obj model.stl (cross-platform, free).
OBJ → FBX (for Unity / Unreal Engine)
In Blender: import OBJ, then File → Export → FBX. Set Path Mode to Copy and click the paperclip icon to embed textures. Alternatively, use Autodesk FBX Converter (free legacy tool). Unity imports OBJ directly, but FBX is preferred for materials and future compatibility.
OBJ → GLTF / GLB (for web or games)
In Blender: import OBJ → File → Export → glTF 2.0. Select GLB for a single self-contained binary file. Via npm: install obj2gltf and run:
obj2gltf -i model.obj -o model.glb
This bakes the MTL materials into the GLTF PBR material model automatically.
OBJ → DAE (Collada — for older pipelines)
In Blender: File → Export → Collada (.dae). Collada is used by some older game engines, SketchUp, and some AR frameworks.
Common OBJ Problems and Fixes
- Grey model, no textures — the MTL file or texture images are in a different folder. Keep all three (OBJ + MTL + textures) in the same directory.
- Missing normals / flat shading — in Blender, select all geometry, go to Mesh → Normals → Recalculate Outside (Shift+N). Re-export.
- N-gon errors in some tools — some renderers or game engines only accept triangles. In Blender: select all → Face → Triangulate Faces before export, or check Triangulate Faces in the OBJ export dialog.
- Double-sided faces — OBJ has no backface culling flag. In real-time engines, add a two-sided material or duplicate and flip faces.
Related conversions
Frequent conversions across the catalogue: