With USD support now available in V-Ray for Maya and Houdini, we take a look at how this smart file format introduces new levels of versatility to VFX pipelines.
A compelling aspect of USD is that changes to its contents are non-destructive, with modifications stored as incremental edits on top of the original. In the previous example, the simulation would simply be layered on top of the existing scene layout. USD utilizes an advanced layering system that allows artists to edit, replace or tweak the visibility of any object in the scene, in addition to providing a means of tweaking the individual parameters of lights, and even entire shading networks.
The USD format can be extended to support any type of data required in a pipeline. With V-Ray, we are able to store options related to V-Ray-specific features only, such as the Dome Light’s “Adaptive Sampling” toggle. The same is true for materials, textures, render settings, and so on. All V-Ray features that artists are already familiar with can be encoded in the final USD stage.
USD Workflow Possibilities
USD goes beyond sharing scene data between applications, by enabling layering—a powerful concept for establishing scene variations, permutations, and potentially collaboration. With USD Layering, each layer brings in certain “edits” or overrides that affect the original while only carrying the weight of the incremental changes.
Here’s a simple abstract example:
- A character asset is created and saved to char_geo.usd.
- A baseball cap for our character is stored in char_baseballCap.usd.
- We load in char_geo.usd and layer it with char_baseballCap.usd.
Char_assembly.usd “refers to” char_geo.usd and char_baseballCap.usd, instead of holding the actual information from both files.
- We save the result in char_assembly.usd.
Now we have everything in a file on disk and we can render it directly with USD. At the same time, edits can be done separately to our character or cap file by different studio teams, saved as new versions and loaded non-destructively.
In the same way, we can have another assembly version of our character with a fedora hat, or with different lighting, or different shading and so on. We could also encode these assembly combinations in what USD calls “variants” so we’re able to easily switch between them after the USD file is loaded.
V-Ray and USD
There are two general methods for renderers to support USD - with a USD procedural and through a Hydra delegate. Here’s a more detailed look at both:
A USD procedural means that the renderer devises its own way of dealing with USD-encoded data and is able to load it and use it to render the final frames.
Hydra, on the other hand, is a rendering framework that passes the data from the DCC’s scene graph to the renderer. Hydra acts as an interactive rendering mode for USD. Having Hydra support doesn’t automatically mean USD support and vice-versa, as each method requires development on its own.
V-Ray adds both methods and in the latest updates Hydra and USD are implemented where it makes the most sense. SideFX has fully embraced Hydra in their Solaris context, which is why it made the most sense for V-Ray for Houdini to implement support for Hydra. V-Ray for Maya adds a USD procedural that works for loading and rendering USD data, as well as exporting data to USD. Although Maya also supports Hydra, the implementation there needs to further mature before we’re ready to implement Hydra support.
V-Ray workflows with USD in Maya are completely native to the new MayaUSD support. In fact, all that’s needed is to utilize MayaUSD in Maya 2022 to load USD files and render them with V-Ray 5, update 1.
Exporting V-Ray data to USD works in the same way through Maya’s File > Export menu, where you need to first choose “USD Export” and then “V-Ray Material Exporter” from the Material’s picklist:
V-Ray 5 for Maya, update 1 allows exporting V-Ray shaders (materials and textures) to USD and Displacement with bitmaps connected to the Shading Group’s displacement input.
Future updates will expand the export to more data types, such as V-Ray Lights, V-Ray Fur, VRaySubdivision, and additional displacement approaches.
When loading and rendering USD data in Maya, V-Ray currently supports:
- Static, transforming, and deforming meshes with support for motion blur
- V-Ray shaders & materials, displacement, and subdivision encoded in USD files (e.g., coming in from Houdini)
- The usdPreviewSurface material (from other renderers)
- Rendering USD edits with V-Ray in-memory, without saving them to disk
- Offline rendering of .usd files with V-Ray 5 Standalone with .vrscene files exported from V-Ray
In the future, V-Ray for Maya will add more data types for rendering support within USD such as hair and particles, and we will be detecting USD edits while using IPR.
For a complete list of supported USD features, see our V-Ray for Maya USD documentation page.
V-Ray and Hydra
The Hydra delegate that ships with V-Ray for Houdini is able to work both as an interactive render delegate for Houdini’s Solaris viewport, and as a standalone tool for final batch rendering through Houdini’s husk executable.
With V-Ray 5 for Houdini, update 1, the V-Ray delegate entered an official public Beta - most V-Ray features are already integrated natively into Solaris as supplemental V-Ray options where applicable, such as lights, render settings, render geometry settings. The standard V-Ray shading nodes available in the material context have also been exposed in/stage inside the “Material Library” LOP. The most recent addition to the list of supported features is AOVs through the “Render Var” LOP. Rendering of geometry, particles, hair, and volumes is already implemented, both for primitives coming through the “Scene Import” LOP and referenced from USD files on disk.
Some custom V-Ray procedurals, such as the Environment Fog and the V-Ray Proxy, are also coming soon. An up-to-date list of the current limitations is available here: Solaris Features & Known Issues.
In the not-so-distant future, we plan to open up the Hydra delegate to be used as a standalone tool for final rendering by shipping a pre-compiled USD library with V-Ray for Houdini that holds the USD View and USD Record applications used for preview and batch rendering, respectively.
It’s an exciting time for production, with USD now being supported with everyone’s Maya, Houdini, and V-Ray. With those important pieces in place, it’s as if a starting gun has just sounded, with most VFX studios now being able to explore USD production workflows for real rather than just in theory. And this is just the beginning, as the work being done by our Maya and Houdini teams will make it all the faster for us to add similar USD support to other V-Ray integrations as their host applications add USD support.