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.

Screenshot of Blender showing the Einar head and accompanying skin shader graph.

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):

Screenshot of Composer showing the Einar head and accompanying, translated skin shader graph in MDL.

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).

Screenshot showing the Bump node in Blender's shading graph, which is not currently translated.

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:

Baked normal map for Einar's skin. Using the normal map in the shading network in Blender's shader graph, instead of the Bump node.

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:

Using the normal map in the shading network in Blender's shader graph, instead of the Bump node.

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