USD kitchen set asset rendered with Arnold
What is USD?
This page aims to cover how USD works, what it’s for, how it is integrated into Arnold, plus future work for USD. USD is a comprehensive framework and file format to exchange 3D computer graphics scenes and assets. It supports non-destructive workflows with overrides, asset versions, and variations. USD is designed for speed, scalability and can easily be expanded with your own data and attributes. USD was created by Pixar for their own pipeline first and then open-sourced in 2016.
Using the power of Pixar's Universal Scene Description (USD) with the Arnold renderer in production scenarios one can export and import USD assets - including full shading, material assignments, and render setup - from any of the applications that Arnold supports, such as Maya, 3ds Max, Houdini, or Cinema 4D. One can take advantage of the power of USD's composition and variants to address common scenarios in modern studio pipelines. USD data may be exchanged throughout the pipeline with near-perfect accuracy and the total product can be rendered in any program thanks to Arnold's plugin integrations.
There are two ways that Arnold renders USD: with a USD workflow and through a Hydra delegate. A USD workflow indicates that the renderer has developed its own method for handling USD encoded data and can load and utilize it to create the final output. Hydra, however, is a rendering framework that delivers data to the rendering engine from the DCC's scene graph.
All of Arnold software’s effort for USD is open source. While you can compile these components yourself they are also shipped in the Arnold core SDK and the various Arnold application plugins.
Arnold Plugins and USD
The simplest way to ingest USD data is to use the Arnold USD procedural (similar in behavior to the Alembic and Ass file procedurals). This means that you can use the workflows that you are accustomed to in any of the application plugins that Arnold supports, but with USD data.
USD files can be opened in procedurals (stand-ins in Maya) and rendered in each Arnold plugin quite easily
Chair model selected within USD in Arnold procedural (Maya stand-in)
Hydra Render Delegate
Another important USD component is the Hydra render delegate. This render delegate is very important for interactive rendering and easy integration into the application that supports Hydra. The Hydra delegate that comes with Maya and Houdini can work both as an interactive render delegate for Maya's and Houdini’s (Solaris) viewport. It is also available as a standalone tool for final batch rendering through Houdini’s husk executable.
Hydra High-Level Overview
Arnold has a 1:1 mapping with ASS files therefore Arnold can render a USD scene directly with the Kick command-line tool. Contrarily to Ass files, because USD can contain animation you will need to specify which frame to render.
kitchen_set.usd rendered with kick.exe
Arnold USD Procedural
We also provide USD extensions to support all of the Arnold nodes as USD nodes. USD does not have a concept of operators or a definition for implicit surfaces for example. You can also set Arnold-specific attributes on native USD shades. Like subdivision settings on a mesh. They need to be prefixed with the Arnold namespace.
- Arnold node types:
ArnoldVolumeImplicit (USD) ↔ volume_implicit (Arnold)
- Arnold parameters in USD nodes:
attribute arnold:subdiv_iterations on a UsdGeomMesh
Scene File Format API
This API allows you to create plugins to define how you load and save an Arnold scene in a custom file format. We have such a plugin for USD. This means that we can import and export Arnold scenes transparently in USD from any application plugin that we support. The USD will contain all of the information needed to render with Arnold, including shaders, operators, render options, etc (like an ASS file). You can also import and export parts of the scenes such as shader networks in USD.
- AiSCeneLoad() / AiSceneWrite()
- USD is a plugin (also Alembic/OBJ/PLY)
- Export scene as USD from any application..
- ...with Arnold shaders/options/operators...
- Import/Export shader networks
Future USD Work (tentative)
- USD Lux upcoming changes
- Custom schemas dor procedurals and shaders in Storm/HoudiniGL
- Light linking support
- Plugin architecture for procedural and delegate
- Improved Maya/Katana/3ds Max support
- Scenegraph Location Decorator for USD Katana
- Shaders per channel connections
- Native .ass support
- USDZ support
- Arnold nodes & procedural support in Hydra
- Moving to CMake