/ GDC, VISUAL-ARTS, INTERCHANGE, COMPUTER-GRAPHICS, SCENE-DESCRIPTION, USD, DCC

Notes for 'What is USD: A Primer' SIGGRAPH 2019

Reading time: 6 minutes

TLDW Summary: This talk is an intro to the key concepts and terminology of Universal Scene Description. The presentation shows examples of how USD is integrated into SideFX products.

Key Terms

  • Universal Scene Description
  • Scene Graph
  • Layer
  • Hydra
  • DCC

Presentation Time Stamps

Link to the talk on YouTube.

Key Concepts

the ‘more’ link will take you to the USD glossary

  • Layer: a file on disk (find out more)
  • Stage: the resulting composition of the layers (find out more)
  • Composition Arcs: different ways to combine layers into a stage (find out more)
  • SubLayers: the way to refer to other layers within a layer (find out more)
  • Opinions: a system for resolving conflicts when combining layers (find out more)
  • Namespace: path to the primitives in the scene graph (find out more)

The Problems/Challenges

  • Have a single standardized format for describing a 3D scene
  • The format needs to be open for multiple parties to use and extend
  • The format should be easy to implement

Propositions

  • Start learning and using USD in your pipelines to take advantage of the built-in integration into popular DDC tools, commercial rendering engines, and commercial game engines.
  • You will need a tool to visualize how USD composes the scene graphs to get the final result.

Arguments

  • Pixar developed USD
  • USD is becoming an industry standard
  • USD is open and actively developed

Key Points

  • USD is for assembling scene and editing 3D data
  • USD is about enhancing the communication between Digital Content Creation tools
  • Layer == Scene Graph == USD File
  • USD can enable non-destructive editing of data from lower layers
  • The concept of splitting the scene into multiple files allows the artist not to load the whole resulting scene, a.k.a. “Stage”
  • Compositing USD files (referencing other USD files in a USD file) works like PhotoShop layers
  • “opinions” are used to resolve scene graph composition conflicts. Layer on top will have a stronger “opinion” then the layer below that
  • Need a standalone viewer/tool to understand how the scene is created
    • “This can get super confusing.”
    • “This can get very complicated.”

Notable parts of the talk

Enabling multiple artist work

timestamp: 2 minutes into the presentation

  • It allows multiple artists to work on the same scene
    • Every department can have its own USD file

Presentation Timestamp 3:53 USD basic structure Rob Stauffer. What is USD: A Primer. July 2019, SIGGRAPH, YouTube. Presentation Timestamp 3:53.

Composing multiple USD files

timestamp: 4 minutes into the presentation

Presentation Timestamp 4:23 term stage Rob Stauffer. What is USD: A Primer. July 2019, SIGGRAPH, YouTube. Presentation Timestamp 4:23.

Sublayering

timestamp: 5 minutes into the presentation

  • An empty root layer creates an empty stage
  • USD composition works by combining scene graphs (USD files/Layers)
    • a.k.a. sublayering

Presentation Timestamp 5:53 two USD files Rob Stauffer. What is USD: A Primer. July 2019, SIGGRAPH, YouTube. Presentation Timestamp 5:53.

Presentation Timestamp 8:00 two usd files Rob Stauffer. What is USD: A Primer. July 2019, SIGGRAPH, YouTube. Presentation Timestamp 8:00.

  • opinions are used to resolve conflicts between scene graphs

Presentation Timestamp 11:25 composing USD files Rob Stauffer. What is USD: A Primer. July 2019, SIGGRAPH, YouTube. Presentation Timestamp 11:25.

References

timestamp: 12 minutes into the presentation

  • “You reference one primitive from one file into the namespace of an existing primitive of a referencing scene graph”
    • You can make a primitive into a reference to a scene graph in another file
    • You can define root primitives as default primitives
      • USD will look for default primitives
    • The idea is not to just graft a scene graph on top of the existing scene graph. The idea is to specify the location wherein the existing scene graph USD inserts the source scene graph. Presentation Timestamp 14:14 referencing example Rob Stauffer. What is USD: A Primer. July 2019, SIGGRAPH, YouTube. Presentation Timestamp 14:14.

Payloads

timestamp: 14 minutes into the presentation

  • Only load what you want Presentation Timestamp 15-54 payload example full scene Rob Stauffer. What is USD: A Primer. July 2019, SIGGRAPH, YouTube. Presentation Timestamp 15-54.

Presentation Timestamp 15-57 payload example full scene Rob Stauffer. What is USD: A Primer. July 2019, SIGGRAPH, YouTube. Presentation Timestamp 15-57.

3 ways to compose

  • There are 3 principal ways to bring a USD file into a scene graph
    • Layers
      • adding a USD file on top of an existing USD file
    • Referencing
      • adding a select primitive of another USD file into a specific location in the base USD file
    • Payload
      • a reference that you can load or not
        • done for memory management and processing time

Variantset

timestamp: 18 minutes into the presentation

  • a non-destructive set of alternatives
    • examples:
      • dented models that are dented
      • models with different textures materials applied
      • models ageing over time
      • storing LODs
  • The alternatives are chosen non-destructively by using the “opinion” layer stack

Hydra

timestamp: 22 minutes into the presentation

Presentation Timestamp 23-08 what is Hydra Rob Stauffer. What is USD: A Primer. July 2019, SIGGRAPH, YouTube. Presentation Timestamp 23-08.

Notes from the Q&A

timestamp: 23 minutes into the presentation

  • in theory USD should make the interop between different DCC tools easier
    • it all depends on the way the given DCC supports USD
  • previz in Virtual Production can be defined as a USD layer

  • USD can hold geometry
    • You can set up a USD scene in a way where:
      • Some USD files will contain the Scene Description and some USD files will contain the geometry
  • currently missing support for skeletal animation rigs

  • it is possible to define your own types to store different metadata

  • there isn’t a standard way to organize the USD layer files
    • some studios organize per department
    • some organize everything in a flat file
  • you can support multiple renderers, but you might need to store multiple material definitions

  • Future work:
    • Making it easier to work with materials for different renderers
      • MaterialX
      • MDL Material
    • Supporting shaders

Thoughts

Applications in Game dev

  • The possibility of leveraging third-party DCCs tools that will use the same format to save levels
    • a seamless workflow between proprietary studio technologies and third-party tools
  • From what I understand you can use USD in 3 different ways:
    • interchange - intermediate format to communicate between tools (buffer/temp files)
      • low commitment to USD
    • store - the authoritative persistent format that all the tools use and save (all your proprietary tools save into a USD file)
      • medium commitment to USD
    • render - implement the Hydra API to render from USD

Practical Truths

General Tools Development Wisdom

  • Layers can power non-destructive workflows. - layers are key for implementing non-destructive workflows.
  • Communicating hierarchies is hard. - it can be a challenge for a non-technical user to grasp hierarchies, especially if merging of hierarchies is a feature.
  • Visualization is paramount. - getting the visualization “right” can make all the difference.

Practical Principles

General Tools Development Principles

Questions that came to mind

  • Is there a good comparison of scene description file formats (open and not)?
  • Who supports USD?
  • Why the “payload” functionality can’t be done via “composition arcs”?
    • Nick Porcino answered: Composition arcs is just a graph nomenclature. The “arc” expresses the relationship.
        level3 -> is_active_in -> world
        lighting -> is_referenced_by -> level3
        night_lighting -> overrides -> lighting
        grunt -> extends -> player
        red_costume -> is_referenced_by -> grunt
      

      The mesh in the costume is a payload. The lights in the night_lighting scene might be a payload. etc….

Notes from the Vault Club

During the discussion in the Vault Club, I learned a lot. Here are some highlights.

  • some game dev studios are experimenting with proof-of-concept level editor that saves the scene graph as USD
  • Eskil Steenberg pointed out that USD is more about managing interdepartmental workflows, then about what graphics engineer would look for in a format (polygons, pixels, shaders). “USD, assumes that its part of a pipeline of large DCC applications that supports formats like Alembic, OpenEXR, OpenVDB, OpenShadingLanguage to store the actual data.”

  • Nick Porcino mentioned that one of the possible names for USD was “Layered Scene Description”. :)
  • The name “Hydra” - comes from the idea that you would implement your own rendering “head”.
  • There might be an issue with the coupling between blind data and known data. Meaning that if an application creates custom data that is based on the USD data, we might break that custom data by modifying the USD data outside the current application.

These notes are just the main ideas of the talk. They don’t contain anecdotes and examples. If you want to learn more, I would advise watching the talk on YouTube.

The Toolsmiths

The Toolsmiths logo

I took these notes as part of our little “Book Club” for Game Tools related videos The Toolsmiths #vault club

Join us on Slack.

Join us on Twitter.

Credits

Post cover image by Alexander Stein from Pixabay