USD File Format for 3D: Why It’s Amazing

Categorized as 3D, Open Source Tagged , , , , , , ,
Save and Share:

USD (Universal Scene Description) is a file format developed by Pixar for interchanging 3D computer graphics scenes between digital content creation applications. It is an extensible open-source file format that can store information about 3D geometry, shading, lighting, physics, and other graphics-related domains. It can also compose and override data from multiple sources, creating a single scenegraph that can be edited non-destructively.

USD is used in many industries, such as design, architecture, animation, and gaming, and is supported by many software applications, such as Blender, Cinema 4D, Houdini, Maya, and Apple’s SceneKit. USD is also the core of Pixar’s 3D graphics pipeline and the basis of Nvidia’s Omniverse platform.

The Universal Scene Description (USD) specification uses several file formats:

  • .usd – Can be either ASCII or binary encoded
  • .usda – ASCII encoded
  • .usdc – Binary encoded
  • .usdz – A package file formatted as a zero-compression, unencrypted zip archive. May contain .usd, .usda, .usdc, .png, .jpeg, .m4a, .mp3, and .wav files.

Blender (or any other 3D software) makes your life easy by letting you do a lot of tasks using only its interface, but once you start introducing other software into your pipeline, problems start popping up left and right. So let’s talk about the biggest issues you’re probably already running into today and how Pixar has created the solution to overcome them to infinity and beyond.

Video about USD file format by KaizenTutorials

The Problem

If you’ve ever textured a model in Substance, imported your work into Unreal, or tried sharing a project with someone working in a different software, you probably realized how annoying this can be. Having to deal with different file types, proper export workflows for each individual software, and losing precious data in the process can make you feel like you’re banging your head against the wall on purpose repeatedly.

And believe me when I say that this is something that all 3D artists everywhere experience – whether you’re working as a solo creator with your own custom pipeline or in a big studio like Pixar having to conform to rigorous pipeline constraints to maintain a proper workflow for all the other 1,232 people working there. The problem stays the same.

Why This Happens

It makes sense though, right? Each software uses a proprietary file type that works for its needs. So a file from Blender, for example, has been coded to work in Blender but not in Substance. Obviously in a company, each artist requires a file to be compatible with their own tool of choice to make it easy and sometimes even possible to continue work on a project.

This is why having to export to a more universal file type like FBX or OBJ is a must when switching to a different software or handing off your project to the next person. But even these file types have a lot of limitations, like the inability to properly store simulations, lighting, and many other aspects of your Blender projects.

Introducing USD

So what is the answer to this problem? Universal Scene Description (USD) for short! First published as open source software by Pixar in 2016 as their new core pipeline, USD was mainly a way for their artists to make it easier to move data between each other and the tools they use.

Since its release, USD is constantly undergoing changes and improvements, which is common for open source software just like Blender, which is also consistently updated and expanded.

What is USD?

USD is a lot of things and if I dive really deep into it, it can actually be a very technical and complicated thing to describe. But if I put it simply, USD is a way of having apps like Blender, Unreal, Houdini, Substance, Maya, Nvidia Omniverse, and loads more talk to and understand each other.

Within the computer industry there’s actually a fancy word for this – interoperability. Kind of hard to say! However fancy that sounds, it’s actually not as complicated as you might think. You can start using it today on your own computer or even with multiple friends or colleagues across the world.

How USD is Different

Traditionally, a pipeline is a very one-directional thing where each person only gets to work on something once the previous person is finished. Or for you personally, you can only go to the next step in the process, like texturing, if the modeling is completely done.

You could compare this with baking a cake – as you build and create this cake you have to finish each step before being able to start the next. You can’t bake the cake before you mix the dough, and you can’t build it before baking the cakes in the oven. Each step is reliant on the previous one being completed.

More importantly, once you put on the frosting and filling or decided that the sponge needed to be chocolate, there’s no going back. You can’t unbake the cake, change the flavor to vanilla, or take off the frosting. And this is what we call a destructive workflow.

USD however is more like Legos. Each block represents a part of a 3D scene – characters, objects, environments, whatever – and you can assemble, disassemble and modify these blocks independently.

In a traditional pipeline, changing one block would involve having to adjust the rest of the structure. But with USD each building block can be worked on independently and I can simply change one block to a different color for example without the need to rebuild the entire model.

It’s a non-destructive approach that allows for experimentation and collaborative workflows without being bogged down by pipeline limitations.

The Goal of USD

The goal in all of this with USD is to create a way for data to move between applications freely, to give artists and teams the freedom to focus on creation and not on exporting and being stuck waiting on each other to be able to continue working. Artists shouldn’t have to restart if the concept team decides to change things up later down the line. And there shouldn’t be issues with file formats coming in from other programs not working in your software of choice.

On a service level, that’s what USD seems to be – a highly interoperable file format that’s easily exchangeable between different software. And to be fair this is what it will be to most Blender users, as a lot of us tend to work solo. But USD is more than just a file type…

It’s a way to assemble and organize any number of assets into virtual sets, scenes, shots, and worlds – using them from application to application and non-destructively editing them often in real time.

How to Work with USD

So let’s look at how we can work with USD in a Blender workflow. In its most basic form, USD has been an export option in Blender ever since version 3.6. So if you have a file you’re working on and want to save it as a USD file, you can go to File > Export > Universal Scene Description and it’ll give you a prompt window to save the file.

It has quite a few options but the main ones to note are:

  • Selection Only – Will only include selected objects in your export
  • Animation and Hair – Will include/exclude animation and hair particle data for your objects

Here’s a great example of how USD works. This is a file from Nvidia’s USD sample library which was made in a host of software like 3ds Max and Substance. If you open this up in Blender by importing it, it works almost 100% immediately!

As you can see, it contains all the data including lights, depth of field, the camera, materials, and much more. The only thing that doesn’t get exported properly is the HDRI lighting which we have to set up ourselves. But it’s incredible to think that this looks nearly identical inside 3DS Max’s Arnold renderer, and just got exported over to Blender and works just as well using a single file type!

It has proper hierarchy, materials, and basically everything is set up. It’s really, really cool! Anyway, this goes to show how USD works between different applications and that it functions as an interoperable file format.

A Practical USD Example

But let’s take a look at a more practical example. For this pipeline example I’ll be using a typical workflow of using Blender to model an object for a game.

The traditional pipeline would go something like this:

  1. Create model in Blender
  2. UV unwrap model
  3. Export as FBX since Painter can’t use Blender files
  4. Import FBX into Substance Painter
  5. Add materials in Substance
  6. Export textures as images
  7. Import FBX into game engine
  8. Set up textures manually
  9. Create renders

With USD we can significantly simplify this process and retain a largely non-destructive workflow. The pipeline remains very similar with Blender and Substance being the main components.

But since USD doesn’t natively work in real time between these apps (mainly because Blender still has limited USD support), I’ll be using Nvidia Omniverse to create that connection for us.

Through Omniverse I can get access to a more USD-compatible branch of Blender built by Nvidia. I can enable the Omniverse connector for Substance Painter to realize the LifeLink. And I can use USD Composer to bridge the gap between the apps and view the final product.

With that set up, we can now open up our Blender project in the custom Blender branch. If we then hit N and go to the right side here we get the Nucleus add-on allowing us to export this as a USD file.

If we then go to USD Composer and open up that USD file we get a sort of live link between the apps. I can now make any change to the mesh, re-export it, and have that automatically be picked up inside USD Composer.

It gets better! Once we import the model, we can open up Substance Painter, enable the Omniverse connector, and go to Import Mesh to automatically import our object from USD Composer into Substance. At this point if we make changes in Blender we can still re-export and pick that up in USD Composer, which automatically links to Substance Painter.

However, once we add textures inside Substance Painter, doing this again will remove those textures. So once you’re happy, add your materials in Substance Painter, and with the Life Link enabled, these will automatically pop up in USD Composer.

Any changes you then make automatically export and update in USD Composer. Really, really cool!

To me this workflow is pretty much mind-blowing. Being able to make changes in Blender and Substance Painter in real time and having all of that automatically work down the line and reflect in the final render is something else.

If you’re interested in trying out everything Nvidia Omniverse has to offer, you can download it for free through the link in the description. And if you want to learn more about all the technical use cases that USD and Omniverse together provide, you can find another free download link for that as well as a link to attend the open USD day sessions virtually or in person at GTC in March.

I really recommend checking that out because this is truly the future of 3D workflows.

More on USD

Besides this fun example, USD has a lot more to offer. And if you make good use of its capabilities you’ll become a lot more efficient as an artist. So what else can it do?

Well besides the fact that a universal file format would make your life a lot easier, it’s absolutely the future. Since August 2023, USD has become an official nonprofit organization called The Alliance of Open USD (AO USD) for short – with Pixar, Apple, Adobe, Autodesk, and Nvidia as its founding members.

I think this really goes to show how invested these companies are and how they really see this as the future of an interoperable file format – which everyone should be able to use very easily.

Besides being a file format, USD stores almost everything – from lights and cameras to simulation caches and scene data – in a layer-like structure called “prims” (short for primitives). It contains all that data to describe complex scenes and assets in a format readable by a wide range of applications.

Now knowing that, the name “Universal Scene Description” actually makes a lot of sense!

If you’re familiar with Blender collections, USD works similarly. You can nest anything inside multiple nested collections, with the added benefit that USD treats all these layers as instances. Therefore it’s able to very quickly load and read all the data in an optimized way.

This works similarly to instancing collections in Blender, which is good because instances require less computing than actual duplicate objects. It’s also very similar to pre-comping in After Effects or compounding in Nuke – you basically group stuff inside nested groups/layers, which makes it easier and faster for the computer to work with the file.

A great example of this optimization is Nvidia’s newest USD sample project called “Da Vinci’s Workshop”. Using their USD Composer app (which is perfect for viewing USD projects with real-time lighting), I can play back this massive 67GB library of assets, textures and lights with millions of polygons at close to 120 FPS without any lag or issues. This is possible because of how efficiently USD loads in the files and textures in an extremely optimized way.

Similarly, for animations which used to be exported as Alembic files, USD caching is now a lot faster. Alembic files are usually huge, very unoptimized, and read slowly by your computer – usually resulting in choppy playback. With USD, achieving a steady FPS is no problem at all and the file size is way smaller.

More Benefits

Another really cool feature is that you can access the layers inside your USD project from outside the file quite easily. For example, if there’s a prim layer containing the data that a sphere is green inside a USD file, by simply changing that color to red in a USD-compatible editor like USD Composer, we can change the color of the sphere without ever opening the file in Blender! Now that is incredibly powerful.

Although that’s obviously a basic example, it shows the potential. Another major benefit is that USD still allows you to only work on a single layer of a complex file in a certain software. So even if your file contains a complete project with cameras, lights etc., you’re still able to open up only one piece of it – for example a single model – inside Substance Painter, and work only on that part of the project without affecting anything else.

This also goes for if multiple people are working on the same file – another major strength of USD. Ten people could work on the same file so changes made by artist number one are immediately visible to artist number two, allowing them to adapt their work accordingly. Being able to collaborate with people remotely is incredibly powerful.

The Future of 3D Pipelines

It’s safe to say USD is far more than just a file format. It’s a comprehensive technology platform and ecosystem that in its mission really aligns with Blender: the freedom to create without limitations.

USD is still under development. The dream is real – a universal software file format usable by any software in the industry, editable in real time by multiple artists.

We should all be thankful for Pixar paving the way with this incredible development, and for companies like Nvidia and Apple contributing their part.

Leave a comment

Your email address will not be published. Required fields are marked *