Generated by GPT-5-mini| OBJ (file format) | |
|---|---|
| Name | OBJ |
| Extension | .obj |
| Owner | Wavefront Technologies |
| Genre | 3D geometry interchange |
| Released | 1990s |
| Containerfor | 3D mesh data, texture coordinates, normals |
| Extendedby | MTL |
OBJ (file format) OBJ is a plain text geometry definition file format originally developed by Wavefront Technologies for use with the Advanced Visualizer system. It stores vertex positions, texture coordinates, normals, and face definitions for polygonal geometry and is widely supported across Autodesk, Blender Foundation, Pixar, Epic Games, and Unity Technologies ecosystems. Its simplicity makes it common in pipelines involving Maya (software), 3ds Max, Cinema 4D, Modo (software), ZBrush, and Houdini.
The format emerged during the rise of commercial 3D graphics in the early 1990s with vendors such as Wavefront Technologies pushing dedicated tools like Advanced Visualizer and competing with companies like Alias Research and Silicon Graphics. Adoption expanded as studios like Industrial Light & Magic, Weta Digital, Pixar Animation Studios, and DreamWorks Animation exchanged assets between systems including Maya (software), Softimage, and proprietary renderers. Over decades it became a de facto interchange standard alongside formats like FBX, Collada, and glTF used by Apple, Google, Microsoft, and Amazon Web Services in cloud rendering and content pipelines. Academic projects at institutions like MIT, Stanford University, California Institute of Technology, Carnegie Mellon University, and University of Utah also utilized the format for research in computer graphics and computational geometry.
An OBJ file is ASCII with one statement per line; tokens include keywords such as vertex (v), texture coordinate (vt), normal (vn), and face (f). Implementations in OpenGL and DirectX-based engines parse lists produced by modeling tools like Maya (software), Blender, and 3ds Max. Parsing libraries exist across ecosystems: Assimp, Open Asset Import Library, Three.js, Babylon.js, Irrlicht Engine, OGRE (engine), and Godot Engine provide loaders. The format’s lack of a formal international specification led to vendor documentation, SDK notes from Wavefront Technologies, and community-driven descriptions maintained by groups around GitHub, SourceForge, and developer forums affiliated with NVIDIA, AMD, and Intel.
OBJ encodes geometric primitives as lists of vertices, texture vertices, normals, parameter space vertices, and polygonal faces referenced by indices. It supports triangular and n-gon faces and per-vertex attributes comparable to data stored in Alembic (computer graphics), PLY (file format), and STL (file format). Normals and texture coordinates mirror conventions used by renderers at Pixar Animation Studios, Walt Disney Animation Studios, Sony Pictures Imageworks, and realtime engines like Unreal Engine and Unity Technologies. Indexing is 1-based (not 0-based), following historical conventions similar to early numerical libraries from Numerical Recipes-era codebases and formats used in visualization packages from Mathematica and MATLAB.
Material properties are typically stored in companion MTL files referenced with the mtllib keyword; materials define Ka, Kd, Ks, Ns, d, illum and map_Kd entries. The MTL convention interacts with texture assets in formats such as PNG, JPEG, TIFF, EXR and with shader systems in Open Shading Language, GLSL, HLSL, and node-based editors in Blender and Houdini. Production pipelines at studios like Industrial Light & Magic, Weta Digital, Framestore, and Blue Sky Studios often augment MTL semantics with custom metadata stored in sidecar files or asset databases managed by ShotGrid and Perforce.
Support for OBJ is broad: modeling suites including Maya (software), 3ds Max, Blender, Cinema 4D, Modo (software), and ZBrush import/export OBJ. Game engines such as Unity Technologies and Epic Games’s Unreal Engine accept OBJ for quick mesh import, while viewers like Meshlab, MeshLab, View3dscene, and web libraries like Three.js and Babylon.js render OBJ in browsers. Asset pipelines in VFX houses integrate OBJ with renderers including RenderMan, Arnold (renderer), V-Ray, Redshift, and OctaneRender.
OBJ lacks built-in support for skeletal animation, morph targets, per-vertex color (beyond extensions), and scene hierarchy; formats like FBX, glTF, and Alembic (computer graphics) address those needs. Precision and file size can be problematic compared to binary formats used by USD (file format), Alembic (computer graphics), and compressed glTF. Various community-driven extensions add vertex colors, per-face materials, and UV seams; exporters from Autodesk, Blender, and third parties create nonstandard tokens. Interoperability issues can arise between tools like Maya (software), 3ds Max, and ZBrush when exporting n-gons or smoothing groups.
A minimal OBJ example lists vertex positions (v), texture coordinates (vt), normals (vn), and faces (f). Many tutorials from SIGGRAPH courses, ACM, and university graphics curricula at Stanford University and University of Utah present sample files for teaching rendering and mesh processing. Community repositories on GitHub and datasets curated by Kaggle and Zenodo include OBJ assets used in benchmarks by Papers With Code, OpenAI, and DeepMind for 3D learning tasks.
Common resources include documentation by Wavefront Technologies, loader projects such as Assimp, community threads on Stack Overflow, and educational material from SIGGRAPH and university courses at MIT and Stanford University. Tool-specific guides from Autodesk and tutorials hosted by Blender and Three.js communities supplement the canonical descriptions.
Category:3D graphics file formats