OBJ (or .OBJ) is a geometry definition file format first developed by Wavefront Technologies for The Advanced Visualizer animation package.
It is an open file format and has been adopted by other 3D computer graphics application vendors.
Vertices are stored in a counter-clockwise order by default, making explicit declaration of face normals unnecessary.
Some applications support vertex colors, by putting red, green and blue values after x y and z (this precludes specifying w).
[2] A free-form geometry statement can be specified in a line starting with the string vp.
If an index is positive then it refers to the offset in that vertex list, starting at 1.
Records starting with the letter "l" (lowercase L) specify the order of the vertices which build a polyline.
Materials that describe the visual aspects of the polygons are stored in external .mtl files.
OBJ files, due to their list structure, are able to reference vertices, normals, etc.
The standard has widespread support among different computer software packages, making it a useful format for interchange of materials.
However, due to the open and intuitive nature of the format, these can easily be added with a custom MTL file generator.
Unlike real transparency, the result does not depend upon the thickness of the object.
Transparent materials can additionally have a Transmission Filter Color, specified with "Tf".
Texture map statements may also have option parameters (see full spec).
The creators of the online 3D editing and modeling tool, Clara.io, proposed extending the MTL format to enable specifying physically-based rendering (PBR) maps and parameters.
The extension PBR maps and parameters are:[9] Further proposed extensions come from the DirectXMesh toolkit for Microsoft's DirectX engine, allowing the ability to define a model's pre-compiled RMA material.