MaterialX as a Portable Shader Graph

The MaterialX initiative, started by Lucasfilm, has been around for a several years and I have been looking at it and in some form contributing since before I left Pixar. Perhaps the main reason I have stayed interested in MaterialX over the years is its relationship with USD.

When we designed the UsdShade schemas, we did it carefully so it would evolve in lockstep with MaterialX and have entirely compatible concepts for Looks, Collections, Shaders, Materials. However, as an engineering lead, I took the key (looking back, maybe controversial) choice of leaving specific shading math out of them. That was deliberate, because I was designing the schemas for Pixar use. Holding 100% of the production for our own movies, we were less concerned about exchange (which is still true today). More importantly, at the time, our custom shader graphs were rather huge and they were assembled with nodes that were not easily representable in MaterialX constructs, both in terms of UX and in terms of RenderMan-specific side effects. In fact, when we cared about portability, we ended up baking down all the shaders to textures, effectively losing all their proceduralism. So my realistic goal for the collaboration with Lucasfilm was that anyone using MaterialX could work well with USD, while knowing that Pixar had little appetite for MaterialX.

Still, joining Allegorithmic (and later Adobe) has made more clear to me how USD can improve its portability by leveraging MaterialX, and how MaterialX holds value even outside of USD. Things of course did evolve once I left. UsdMtlx is a significant step forward, though I don't think we are done.

Building patterns and illumination through shaders is an art. And doing it through graphs is, in my opinion, still the best way to do it. Making those shaders useful and portable no matter what render target you are working on is critical for many reasons. For Adobe, it helps making our Substance Materials more general and portable. For film and game studios, it helps to exchange shaders without losing their feature set by baking everything down to textures.

But to get started, we needed a good node graph toolset. Substance Designer was the obvious choice, as it is already a node-based tool where we build materials. We had to get Substance Designer extended so we could add more, arbitrarily complex graphs with new semantics. So in 2019 we pushed this Labs project for SIGGRAPH.

We presented a collaboration with LucasFilm and Autodesk, in a push to help standardize shading pattern generation. In this article on Substance Magazine I describe more in depth what we did and how.

©&TM Lucasfilm Ltd. Used with Permission
A lot of credit for this work goes also to David Larsson, a great friend and colleague who also shares my passion on this topic. He did a ton of the work and helped with the collaboration with our counterparts in the Autodesk team. I should also thank our friends at Lucasfilm: Jonathan Stone and Doug Smythe - who have always been great at accepting our inputs and helping us through tough design decisions, while I was at Pixar and even now at Adobe. Finally, special thanks to the tireless Substance Designer team, as well as Jerome and Andrea in our Special Projects group, for their deep MDL knowledge and for keeping us real.

Enjoy!

Comments

Popular Posts