With USD support available in V-Ray, Chaos Product Manager Alex Yolov explains how this smart file format introduces new levels of versatility to VFX pipelines.
USD makes modern VFX workflows easier and more flexible — and now it’s in Chaos’ V-Ray 5. This neat technology makes it far easier to share model, scene, and animation data between platforms and people. It allows multiple contributors to work on the same project at once.
But what is USD? In this explainer, I’ll cover how it works, what to use it for, and how Chaos has integrated it in V-Ray 5 for Maya, V-Ray 5 for Houdini, and V-Ray 5 for 3ds Max. You’ll also learn about the new features we’ve added, as well as our plans for the exciting new workflows that USD enables.
What is USD?
USD stands for Universal Scene Description. It’s an open-source interchange format developed by Pixar and contributed to by industry-leading studios. This new format is designed to support almost any type of 3D scene and animation data and transport it between 3D creation tools, assembly tools, and pipeline utilities.
Besides interoperability, USD enables non-destructive iterations and new assembly workflow scenarios. USD also allows a renderer to attach its data to the scene description so the definitions and assignments of shaders, materials, lights, cameras, and environments persist within the USD file.
USD has shown great potential for several years, but it required support from the makers of multiple 3D creation tools before most artists could start building workflows that took full advantage of it. This support first started when SideFX added Solaris to Houdini and has now extended to Maya, with Autodesk’s Maya 2022 release that includes MayaUSD.
With support from multiple tools finally at hand, the time was right for Chaos to add V-Ray support to each tool so studios can freely share and combine assets between the two applications with consistent V-Ray rendering results. You’ll find USD support in V-Ray 5 for Maya and V-Ray 5 for Houdini.
As a production solution, it’s important that all necessary native scene properties are properly exported, and we feel this is best owned by the makers of each respective 3D application. We can attach the V-Ray data to this solid foundation and we know it will improve along with the application.
We’ve also recently added V-Ray USD support to V-Ray 5 for 3ds Max, and we are looking forward to adding similar functionality to other Chaos applications.
USD in production
Over time, the addition of more 3D tools has made studio pipelines increasingly complex. This is because studios have preferences for software suited for specific tasks such as modeling, sculpting, simulation, lighting, shading, compositing, animation, and rigging. The challenge is that each tool has its own way of storing and processing scene data.
Some neutral formats like OBJ, FBX, and most recently Alembic, have been used for exchanging data between tools, but each store only a fraction of what the original scene had, and none were designed to carry any production rendering information. The promise of USD is that data can now be shared at near full fidelity between pipeline tools.
For example, this allows one department to work on animation in Maya, while another can work on simulations in Houdini — and, with V-Ray support, they can render the combined result in either application. It also allows data to make round-trips: assets can be created in Maya, brought over to Houdini to simulate, and then brought back into Maya for rendering.
A compelling aspect of USD is that changes to its content 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 potential 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. Let’s take 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. Both applications are capable of exporting to USD, and the data specific to V-Ray can also be attached to the export. Although Maya also supports Hydra, the implementation there needs to mature before we’re ready to implement Hydra support. Finally, the V-Ray USD procedural is also available in 3ds Max with the latest update.
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.
Exporting V-Ray data to USD works through Maya’s File > Export menu with the File type set to “USD Export”. This writes out the Maya scene data to USD and with V-Ray loaded it will also include V-Ray lights. Encoding V-Ray shaders to the export simply requires choosing “V-Ray Material Exporter” from the Material drop down menu:
V-Ray 5 for Maya allows exporting V-Ray shaders (materials and textures) to USD, V-Ray lights, and Displacement with bitmaps connected to the Shading Group’s displacement input.
Active development is currently focused on exporting V-Ray sets from Maya, such as VRayDisplacement. Future updates will expand the export to more data types, such as V-Ray Fur, VRaySubdivision, and more.
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, VRayDisplacement, and VRaySubdivision encoded in USD files (e.g., coming in from Houdini)
- The usdPreviewSurface material (from other renderers)
- V-Ray lights and USD light types encoded in USD files
- 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 artists will also be able to detect USD edits while using IPR.
For a complete list of supported USD features, see our V-Ray for Maya USD documentation page.
The latest V-Ray 5, Update 2 brings USD support to 3ds Max, too. It makes use of the V-Ray USD procedural through-loading USD files in the VRayScene object. In this sense, V-Ray for 3dx Max is now capable of rendering the same set of features as V-Ray for Maya. For more information, you may check out V-Ray for 3ds Max documentation.
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 the latest updates to V-Ray 5 for Houdini, 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 and Limitations.
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 in Maya, Houdini, 3ds Max, and the latest updates to V-Ray 5. With those important pieces in place, it’s as if a starting gun has sounded, with most VFX studios now 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 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. You may try V-Ray free for 30 days here.