Extending Wavefront OBJ MTL Material Definition for Physically-Based Rendering
By Ben Houston, 2015-05-06
Originally published on the now defunct Exocortex blog. Republished here for posterity.
Updates
- 2015: TinyObjLoader adopts this proposal.
- 2019: This proposal was included in the US Library of Congress official description of the MTL material format.
- 2022: These parameters were incorporated into Blender's MTL importer/exporter, thanks to Aras Pranchevicius.
Original Proposal
Over the last couple of years, the game industry has moved from the traditional Blinn-Phong shading model towards the Physically-based or Physically-plausible Rendering method that uses new material definitions that make it easier for artists to create realistic (e.g. physical) results.
But there is a significant issue in trying to develop assets for PBR-based renderers. There is no well defined format for transmitting the underlying Physically-based Material parameters between various creation tools (e.g. Clara.io, Unreal Engine, CryEngine, Unity, Maya, 3DS Max, Modo.)
In this blog post, we propose a simple solution. We suggest simply extending the Wavefront MTL material format with a number of new parameters that capture the model proposed by Disney for Physically-Based Rendering.
To represent a PBR material, we suggest using these existing well defined Wavefront MTL material properties:
- Kd/map_Kd (base/diffuse) // reuse
- Ks/map_Ks (specular) // reuse
- d or Tr (opacity) // reuse
- map_d/map_Tr (opacitymap) // reuse
- Tf (translucency) // reuse
- bump/bm (bump map) // reuse
- disp (displacement map) // reuse
And we propose adding these additional properties, which refer to PBR-specific parameters as defined by the Disney PBR paper:
- Pr/map_Pr (roughness) // new
- Pm/map_Pm (metallic) // new
- Ps/map_Ps (sheen) // new
- Pc (clearcoat thickness) // new
- Pcr (clearcoat roughness) // new
- Ke/map_Ke (emissive) // new
- aniso (anisotropy) // new
- anisor (anisotropy rotation) // new
- norm (normal map) // new
The various parameters are to be parsed in the same manner as the original MTL parameters.