What is the OBJ 3D file format? The Wavefront OBJ format is the most widely adopted 3D model storage format. The file format name, OBJ, is in reference to its purpose of storing 3D OBJects. The OBJ format was originally the native file format for the 1980s era Advanced Visualizer 3D modeling package. Advanced Visualizer 3D is now obsolete, but some of its code was incorporated into its successor, the Maya 3D editing suite. In addition to just the OBJ geometry format, it has a sister format called MAT, which is used for material definitions.
Alternative popular 3D model and scene file formats are the Autodesk FBX 3D format and the Khronos Group glTF 3D format.
Should you use the OBJ 3D file format? It depends on what you are using it for.
Here are the pros and cons of the OBJ 3D file format:
Pros of using .obj 3D file format
OBJ files are easy to read and write
The biggest strength of the OBJ file format (and its sister MAT material definition file format) is that it is text-based and very simple to understand. As a result of its simplicity, it is usually the first format that any 3D tool imports and exports. It is generally the only format that is supported by nearly every 3D software package.
Separate Position, UV and Normal Topologies
A strength of the OBJ file format is that it enables the storage of both position, UV and normal data that has different topology. This is great for high quality modeling tools, and enables complex features like accuare subdivision surfaces.
Slow and Inefficient
Text-based file formats, such as the OBJ, are easy to write, but do have two very large downsides if there is a need to work with a lot of data. First, these file formats are not space efficient. When writing out large amounts of numbers, which is the core of 3D model data, it takes more disk space to write out the numbers as human readable text rather than as computer readable raw bytes. Second, the conversion between a human readable number and a computer readable raw byte requires processor time both to write the file and to read the file. This means that text-based formats are slower to process, especially as they get large, compared to binary file formats.
The separate position, UV and normal topologies, while they are valuable if there is a need to edit the model again, make it slower to load OBJ file data into a game engine for rendering. There is a need for post processing operation to unify the topologies prior to uploading it into the GPU.
Orphaned 1980s Era Technology
Another downside of OBJ is that it was designed in the 1980s and it hasn’t been updated since. As mentioned earlier, the OBJ file format was created as the native file format for the Advanced Visualizer 3D software, but this software was discontinued in the mid 1990s. Since then, the OBJ file format hasn’t really had direction to keep up with the times. There have been a few attempts to improve the OBJ format to address some of its shortcomings, but these have been implemented, at best, sporadically or not at all by the various tools that read and write OBJ files. This means that OBJ files should generally be viewed as an orphaned 1980s technology with no significant future ahead of it.
3D Model Data Only
Lastly, OBJ file formats, because they were designed as the storage format for a modeling tool, focus just on storing a single model, possibly with rudimentary grouping, without any scene hierarchy, lighting, animation, bones, or skinning. This means that if you want to store a 3D scene or an animated character, OBJ format cannot be used at all.
OBJ file format should be used when there is a need to easily exchange 3D model data with other pre-existing tools. It is not the most efficient format, but for 3D object data, it is sufficient. The OBJ file format is widely supported by a large variety of tools.
If there is a need to transfer more complex scene data including animations, and lighting, it is recommended to use either FBX or glTF. However, if there is a need to transfer data between popular 3D editors, like Maya, Clara.io, and 3DS Max, and 3D experience engines like Unity, Unreal Engine, it is recommended to use the FBX file format. However, if the destination platform supports a more modern format like glTF, using glTF instead of FBX will save time because glTF better transfers material properties.