Monday, August 31, 2015

A Scene Description for All

I can't say I went to Siggraph this year, although I was physically there for one evening. 

I went to the Renderman event, which this year was extra exciting, not just for the crowd-drawing yearly teapot giveaway, but because we turned it into a full on science fair. Besides the presentations, which this year were including production updates on Finding Dory, we had booths showing some of the cool work we have done in the last year.


I got to help man one of the booths, mainly to show off some of the integration work we did on Katana and Rfk (Renderman for Katana), so shading would be possible on the - mostly - lighting platform. Other booths included our Real Time Preview, an Optix based renderer that can be used for high quality previews of your shading and lighting. We had Presto, our in house Rigging-Animation-Layout-Sim-You Name It tool. We also showed Hydra, our GL renderer used across multiple platforms.

Among the other things however, we announced the open sourcing of our new scene description format: USD - or Universal Scene Description. I am very proud of it and I hope it becomes a new standard in the data exchange for Visual Effects and Animation. 

So besides it rather grandiose name, what does it offer that is not already out there? 
First off, Usd is not just an optimized pose cache format: if that's all you need, Alembic is plenty good enough - by the way, Usd can load Alembic files. Usd attempts rather to solve more complex pipeline issues. At Pixar at one point we had a dozen files and respective converters we had to keep up to date. That made us reconsider whether we should simplify the pipeline and adopt one exchange format instead.

Our pipeline is rather complex, many departments work on the same data at the same time, so we had a system of hooks and cues, and in general files that expressed opinions on the same objects, even the same properties, and those opinions had to be layered correctly so that the strongest one would be available to use for rendering. 

Hence the first main feature of USD: Composition. Take a character. Then add some rigging information, then load it into a group, where you can add garments and hair. Add some shading. Then load that group into another context, like a shot. On the shot you have layout, then animation, then lighting and FX. But the shot also loads another version of the same character as well as hundreds of thousands of props and architecture parts. Each one of those elements are Usd files, that reference each other and override or enrich the previous layer's results. Better yet, you can load the Usd of the whole shot, and express overrides that will be saved directly onto a low level, like the model itself.

But what if the character is a template for, say 10 different characters, each of them with 15 different sets of characteristics? Usd can address that with a built in mechanism, called Variant Sets. We use them for many things, starting from modeling variants (which can be switched as late as shot lighting), shading variants, dressing variants, etc... Any set of overrides can be encapsulated into a Variant Set, and given a name. Those can be switched at any time, which made our shading workflows a lot more flexible than, say straight Katana Look Files.

There is a lot more to it, such as schema API's and viewers and editing tools, but hopefully, you get the idea. This has been a game changer for us, and we hope it will be for you too. Stay tuned for updates!