Support for Blender materials in USD
Currently, when importing in a USD file into Blender, it will try to translate any UsdPreviewSurface materials into Blender materials, but it would be very useful to have an option where you can have the Blender materials defined directly in the USD file and the importer will recreate that material as-is.
I'm developing an application that exports out scenes from a game into USD, for importing into animation software like Blender. The application also sets up the materials. Right now, because of the limited material support, the application has to write out the materials into a separate JSON file and then in Blender we have a custom addon that people need to install which will import in the USD file and then import in the materials from the JSON file. If Blender could directly import in Blender materials from USD files, then this all wouldn't be needed and users could just directly use the USD importer rather than the custom addon.
Another workflow that would benefit from this, would be productions that work pretty much entirely in Blender, but does a few things in another DCC like Houdini. They could export out their scene to USD, make changes in Houdini, and then import the USD file again. Right now, that wouldn't work well due to the materials not being supported. But, if we could export out the materials as-is into a "blender" render context, then later on when importing it back into Blender, then it would be able to properly recreate the materials.
The best approach would be for this to be an option that's off by default. When turned on and exporting, it would still create a UsdPreviewSurface material in the default render context, but then also export out the Blender material as-is in a "blender" render context. On import, if the option is on, if a material has a "blender" render context, then it'll import in the Blender material as-is.
This way, the USD files will still remain fully universal, since all other applications will just read in the UsdPreviewSurface materials from the default render context. In fact, if every DCC would add in something like this, then that would make USD files even more universal, since they could be imported into any DCC and they would show up accurately, including materials, because we can then author the materials for the different DCCs. This is the whole point of the "render context" in USD, to be able to have different material graphs based on the context, so that materials always show up correctly.
3 Comments
There is an open standard in the making to improve these workflows called OpenPBR. The internal material structure in Blender is to tailored to Blender. A widely accepted industry standard like OpenPBR is more likely to work in the longer run when mixnig with other DCCs.
See academysoftwarefoundation.github.io/OpenPBR/
To add on, there is a design task for adding OpenPBR support for importing (and maybe exporting?).
P.S. if you scroll down, you can find a user made (notice who made it ;-) ) node group that should match other implementations of OpenPBR, if you want to test it out.
Furthermore, OpenPBR is now planned as a target for 2026