USD: What's in a Name?
Rambling thoughts about USD as a technology name
Naming is hard, but USD is a super ambiguous one 😆
Is it Universal Scene Description? United States Dollar? The University of South Dakota? (Go Yotes!) (Or so I've read!)
If you've ever tried googling for USD information you know that search engines can't always tell the difference.
For a long time the workaround was to search for Pixar USD
. That worked pretty well, but it started to seem strange as Apple, NVIDIA, SideFX and others adopted USD and contributed to the code base. Lately there's been a push to remove some ambiguity by using the name Open USD
. Pixar has updated URLs and naming to try to help get that usage out there.
Search engine ambiguity aside, what does the name even mean? What is USD on Pixar's documentation page is worth a read. I think it leaves an open question though, what do we mean by Universal?
Scene Description is pretty clear, it's intended to describe everything that goes into a graphics scene. USD can describe models, lights, cameras, materials, anything else you'd like to put in there, and the relationships between those things.
I've heard two interpretations of the word Universal in the name.
B) USD can be read and written by all graphics tools. It is a universally shareable format.
Let's tackle A first. I think a stronger case can be made for this idea. USD has built in data structures and apis for common graphics primitives like meshes and materials, but a USD layer can contain any arbitrary thing that's represented in the Prim (metadata) {properties}
format it recognizes.
In many ways a layer is like a structured JSON file. It introduces concepts like data types, clearly defined metadata, a binary format and layering, but at its core it remains a list of key-value pairs. There is no requirement that the data in a USD file even be graphics data. For instance, this is a valid USD file.
#usda 1.0
def User "ChesterCopperpot"
{
string name = "Chester Copperpot"
string email = "intrepid-explorer@lost.org"
def Address "Home"
{
string street = "you get the point ave"
token state = "OR"
}
}
You can open this without errors in any USD enabled application. I checked in usdview and I get nothing drawn in the viewport, but I see a User prim with the expected properties and Address object.
Notice that I never defined what the User or Address types are, but the types are still read and kept. All USD types are like this, including provided ones like Mesh and Xform. Those types have plugins called schemas written to turn them from arbitrary type information into a prim with some behaviors, but aside from that they're no different than these arbitrary ones I just made up.
Without going into too much more depth, I think this is a good argument that the Universal in USD refers to the ability to represent any kind of data in a universal format.
So what about interpretation B? If you read Pixar's What is USD earlier you might have seen this
Each of many cooperating applications in the pipeline (modeling, shading, animation, lighting, fx, rendering) typically has its own special form of scene description tailored to the specific needs and workflows of the application, which is neither readable nor editable by any other application. Universal Scene Description (USD) is the first publicly available software that addresses the need to robustly and scalably interchange and augment arbitrary 3D scenes that may be composed from many elemental assets.
This supports the idea that Universal means that it can be used to exchange data between all graphics tools. I feel this argument is a little weaker because this ability is not really built in. (yet?)
More and more tools support USD for import and export, but off the shelf it can be difficult to get them to cooperate. This remarkable github repo from Eric Haines at NVIDIA demonstrates this pretty well. In it, he tries to get the USD PreviewSurface material to look as close as possible in a variety of different tools.
Different applications and renderers may have different interpretations of input values, resulting in the kind of differences Eric is working to resolve. You can also run into issues where a USD scene represents data an application can't show. A modeling tool might ignore lights. This usually degrades gracefully, the extra data can be silently ignored and maintained on save, but it's good to verify this if you need it.
The real challenge to the term Universal here is, in my opinion, USD doesn't provide you the ability to just choose this format and then freely share across any software you'd like. For instance, if you need to author your changes to a specific layer in your document, support for this is pretty limited in most commercial software today. SideFX Houdini and NVIDIA's Omniverse suite are some notable exceptions. When laying out your data, choosing how to nest your Meshes in Xforms, how to name your Prims and what shading representations you can use, all these things can be affected by your choice of software. It's easy to make choices and then discover you're shut out of some applications.
Pixar says USD gives them the ability to robustly and scalably interchange and augment arbitrary 3D scenes, and this is true. Pixar was doing this before USD was public, so they've always done it with custom internal software and custom plugins for commercial tools. As USD becomes more available in commercial software Pixar can retire some of their custom software, but they're not to the point where their pipeline is only using off the shelf products for USD interchange.
Today I think the idea that Universal means universal interchange between applications is more of a goal than a reality. Improvements are constantly being released, and the industry is getting more and more unified behind this idea, so let's hope one day soon we've got Universal Scene Description in both senses. Universal in what it can represent, and universal in where it can be used 🤞
USD is the acronym that inspired this site's name, so I felt like I should try to tackle it. Is it confusing? Maybe that's a stretch, it's more unclear. It took me 1,000 words to just talk about it on the surface though, so let's at least agree it's confusing to me 😅