Skip to content

OpenUSD got its first real specification. Materials are not in it.

OpenUSD shipped its Core Specification 1.0 in December, and materials are named as out of scope. Here is what "just send it as USD" actually leaves undefined, and the checklist I read before I ship a

September 17, 20263 min read
article · usd-1-0-does-not-standardise-y
shaded · wire
OpenUSD got its first real specification. Materials are not in it.

The format everyone tells you to standardise on shipped a 1.0 spec in December. It deliberately does not define materials.

"Just send it as USD" is a request nobody has finished defining.

What actually shipped in December

The Alliance for OpenUSD announced Core Specification 1.0 on 17 December 2025. It covers the foundational data model, composition, and the file forms. Those forms are usda, usdc and usdz.

Geometry, materials and physics are named as out of scope. Each one is handed to a separate working group. The materials group has no 1.0 spec yet.

So the standard exists. The part that carries my roughness map is not in it.

Why this is my problem, not a footnote

I sell 29 volumes of materials. They have to survive the trip into Maya, Unreal, Houdini and Painter.

Every "just ship USD" article is written by someone who never guarantees a stranger's renderer reads the map. I do. A wrong roughness value is a support ticket with my name on it.

What fills the gap today

Two things fill the material gap right now. Neither of them is the AOUSD standard.

The first is UsdPreviewSurface. It is a Pixar specification page, not part of Core 1.0. It is simple, and it drops most of what a real shader needs.

The second is MaterialX. Version 1.39.3 is the default in USD 25.05 and later. It is far richer, and it is a different graph in every application.

The trap: one file, two material networks

Blender can write both on a single USD material. It exports a MaterialX network next to a UsdPreviewSurface one.

That sounds safe. It is not, quite.

The MaterialX graph Blender writes does not match the one Maya or Houdini writes. It adds extra prim hierarchies, and it moves inputs outside the shader. A reader built for another program's layout can miss them.

What I check before I ship a USD file

I do not trust "it opened fine on my machine". I open the same asset in more than one program. Here is the short list I read every time.

  • Material binding: did the shader stay attached to the mesh?
  • Texture path: relative or absolute, and does it still resolve?
  • Colour space: is base colour tagged, and is the normal map left non-colour?
  • Up axis and scale: Y-up or Z-up, metres or centimetres?
  • Normal convention: does the green channel point the way the target expects?

Any one of these can break in silence. USD will not warn you. The render just comes out wrong.

usdz is a package, not a promise

A usdz file bundles the textures inside one archive. That is convenient for sending.

But usdz is a zip with rules, and some readers only take UsdPreviewSurface out of it. Ship the MaterialX graph inside one and a phone preview may ignore it.

For a client who wants the heavier shader, I send a usdc plus a texture folder instead. It is less tidy. It is more reliable.

Where the standard is going

On 21 July 2026 the Alliance began ISO certification for the next core spec. It added new members and kept building. The materials group is still working.

Until that group ships a 1.0, "USD material" means one of two non-standard things. You have to say which one. Read the Alliance's own announcements before you promise a client anything.

What I actually tell buyers

I author in Substance Painter and export with a plan, not a hope. That planning is most of what the master course teaches.

I pick UsdPreviewSurface when the target is a viewer or a phone. I pick MaterialX when the target is a program that reads it.

My tileable sets ship the maps as loose files, named plainly. A named texture folder travels better than any embedded graph does today.

The honest summary

USD solved the hard part first. The scene loads, the hierarchy holds, the composition is sound. That is real, and it is why the format won.

The materials will come. They are just not here yet. Pretending they are is how a stranger's render turns grey.

So do the boring thing. Name the shader model out loud. Send the textures as files a person can see.

Then open the result somewhere that is not your own machine.

Say what you shipped. Then it works.

Written by

Milad Kambari

3D artist and instructor, founder of 3DRedBox Studio KFT. Twenty years of texturing, material authoring and teaching — currently a top ArtStation Marketplace seller.

Read the full story →