Universal Material Mapper
Universal Material Mapper (UMM) 1.0, which shipped with prior versions of Blender, allowed for round-tripping of shaders between Blender and Omniverse Kit applications. Unfortunately, it was limited and most users were forced to bake complex shading networks to textures before export.
UMM 2.0 doesn’t require materials to be structured in a specific way to be exportable/importable; instead, UMM2 attempts to convert the entire material network to the best possible equivalents in the target shading system. For example, UMM2 will map the parameters of a Blender Principled BSDF node to the parameters of an MDL OmniSurfaceBase node or the parameters of a Blender Image Texture to the parameters of an MDL Bitmap Texture. Currently, a subset of material nodes are supported for conversion and with some limitations on specific nodes, such as exporting Blender Bump and Normal Map shader nodes. The list of currently supported nodes can be found here: List of Supported Nodes. More nodes will be supported over time, and eventually, the ability for users to define their own conversion mappings will be exposed.
Unlike UMM 1.0, there is no longer a need to use material templates, as Blender’s Principled BSDF and Glass BSDF nodes are now automatically converted into OmniPBR and OmniGlass.
Using UMM2
UMM2 in Blender can be used for exporting Blender materials to UsdShade MDL or for importing UsdShade MDL materials into Blender.
To use UMM2 in Blender, all you need is Blender 4.0.0-usd.201.0 or greater installed from the Omniverse launcher.
Exporting Materials
Materials will automatically be converted by UMM2 when exporting via the File → Export → Universal Scene Description (.usd) menu item, or when using the Import USD button in the Omniverse Panel.
Example of Exporting a Scene
The Einar hair grooming scene (available here: https://studio.blender.org/films/charge/gallery/?asset=6072) is an excellent example of a scene with complex shading that UMM2 can convert.
We can export the scene to USD using File → Export → Universal Scene Description (.usd) and then open the exported usd file in Omniverse Usd Composer (RTX - Interactive or RTX - Accurate rendering modes will need to be used to get a comparative result):
One of the most apparent differences in the converted result is the lack of normals. This is because the normals in the Blender Shader Editor are procedurally generated in a way that can’t be replicated in MDL (note the network of material nodes connected to the Bump shader node).
If we have an Image Texture Node directly connected to a Bump Node, this can be converted to an MDL equivalent - so we export the Einar scene by baking the normals and replacing the Bump section of the network with a simple Image Texture and NormalMap node combination:
Now after using File → Export → Universal Scene Description (.usd) and opening the exported usd file in Omniverse Usd Composer, we see a result with normals on the skin:
Importing Materials
Materials will automatically be converted by UMM2 on import when using the File → Import → Universal Scene Description (.usd) menu item or the Omniverse Panel → Nucleus → Import USD button.
List of Supported Nodes
Export to Usd
Node Type |
Notes |
---|---|
Add Shader |
Supported only if an Emission node is directly connected to one of the inputs |
Anisotropic BSDF |
|
Bump |
Only if an Image Texture is directly connected to the input |
Color Ramp |
|
Combine Color |
|
Combine XYZ |
|
Diffuse BSDF |
|
Emission |
|
Float Curve |
Currently does not work when exporting to Nucleus servers. This will be fixed soon. |
Glass BSDF |
|
Glossy BSDF |
|
Hair BSDF |
|
Hue/Saturation/Value |
|
Image Texture |
|
Invert |
|
Map Range |
|
Math |
|
Mix |
|
Mix Shader |
|
Musgrave Texture |
Noise models differ, so outputs will not match visually |
Noise Texture |
Noise models differ, so outputs will not match visually |
Normal Map |
Only if an Image Texture is directly connected to the input |
Material Output |
|
Principled BSDF |
Default maps to OmniSurfaceBase now rather than OmniPBR |
Principled Hair |
|
RGB Curves |
Acts as a pass-through. Will be supported soon. |
Reroute (dot node) |
Bypassed |
Seperate Color |
|
Seperate XYZ |
|
Translucent BSDF |
|
Transparent BSDF |
|
Value |
|
Vector Math |
|
Voronoi Texture |
Noise models differ, so outputs will not match visually |
Import From Usd
Node Type |
Notes |
---|---|
Bitmap texture |
|
Bitmap texture, bump |
|
Normal map texture |
|
Perlin noise texture |
Noise models differ, so outputs will not match visually |
Flow noise texture |
Noise models differ, so outputs will not match visually |
Cellular noise texture |
Noise models differ, so outputs will not match visually |
OmniPBRBase |
|
OmniSurfaceBase |
|
OmniPBR |
|
OmniSurface |
|
Simple Diffuse |
|
OmniGlass |
|
Thin Glass |
|
Thick Glass |
|
Surface Blender |
|
Add Emission |
|
Color Ramp |
MDL color ramps are custom shaders created by UMM on export from Blender to UsdShade MDL |
Add float |
|
Subtract float |
|
Multiply float |
|
Divide float |
|
Pow float |
|
Log float |
|
Sqrt float |
|
Rsqrt float |
|
Abs float |
|
Exp float |
|
Minimum float |
|
Maximum float |
|
Compare |
|
Sign float |
|
Round float |
|
Floor float |
|
Ceil float |
|
Frac float |
|
Sin float |
|
Cos float |
|
Tan float |
|
Asin float |
|
Acos float |
|
Atan float |
|
Atan2 float |
|
Radians float |
|
Degrees float |