USD and glTF Resources Page

This is a collection of links to various glTF and USD resources. A short link for it is http://bit.ly/usdgltf. These scene description frameworks are more full-featured (e.g., physically based material descriptions are supported) than older file formats such as OBJ or VRML. I (Eric) find myself having to poke around in my bookmarks too often to get to these URLs, so I decided to gather them in one place. I hope you find them of use. I haven't yet waded through them all myself (especially the tutorials) to find the best. Write me if you find something great that's missing.

I list USD first, only because I've been working with it more lately, but both are important. In my experience, glTF is currently more widely implemented (e.g., Blender support) and "lighter" than USD, which is more film-oriented, e.g., in USD connected meshes are considered subdivision surface descriptions by default.

USD

First, there's a ton of links here, curated by Nick Porcino, and here, by Matias Codesal. What follows is my own "I found these useful/stuff I should look at" collection.

Why and What is USD?

Pixar's reference docs are important, but tough to read and learn from. For a simple material description, see UsdPreviewSurface, though this material is not tightly specified. To understand proper implementation, try this MaterialX implementation application, which works in the browser (github repo). Open the menu in the upper right, click an attribute, and type in a number (don't try to use sliders). You'll notice interesting (and newly defined, so not implemented everywhere, e.g., not in usdview as of December 2023) behaviors such as setting metallic to 1.0 will make opacity itself not have an effect (i.e., there are no transparent metals, Star Trek aside).

Remedy's Book of USD is supposed to be a good starting spot. I've read a bit and liked it so far.

I've heard this video is a good intro.

Another intro from Pixar RenderMan, though quite old by now. Lots of pretty pics, though.

NVIDIA has an independent learning page.

Apple's.

Fun history podcast (and transcript) by one of the creators of USD, Guido Quaroni. Learn why it wasn't called Layered Scene Description, though that's perhaps a more descriptive name.

Asset Structuring

This assets example was recommended to me. An intro by the same person.

Video on asset structuring best practices.

Omniverse documentation on performance tradeoffs. Also related, this and this.

SIGGRAPH 2023

There's a thorough collection of resources on USD activities at SIGGRAPH 2023.

The ASWF has its own page. They're a good public non-profit group for sharing resources.

USD Testing Resources

The OpenUSD test files are comprehensive but a lot to wade through - you could spend a lifetime there. Here's a pointer to just those for DomeLights alone.

Find a reasonable web browser USD viewer here. Drag and drop to load a model. You can also zip (usdzip not required) up your files and drop into this window.

The USD working group assets repo has a lot of good test files, plus links to other USD models and a nicely curated set of tutorials. I submitted McUsd and NormalsTextureBiasAndScale; try the former on your iPhone. Looks mostly good, but there are two missing features in the renderer, unfortunately, which I discuss here. Which leads to...

Apple feature support - Apple's three different USD-related rendering engines have varying feature support, sometimes missing basic things like double-sided support. I hope they will someday expand these feature sets. That said,

Apple's AR Quick Look page has example models that work on the iPhone. I've found these are also good for testing other renderers.

Felix Herbst's assets site takes glTF assets and provides Blender, three.js, and other converters' USD files. Good for testing. Particularly nice is that all the assets can be seen and interacted with in (feature complete) renderer running in the browser.

USD lighting is inconsistent and not physically based currently; see Anders Langland's page on this. See this proposal. My own workaround is to not set the intensity of lights in any model I provide for general use, in hopes that the reader will assign a reasonable default.

USD file load times for various apps are compared in this video, for example. Some packages don't fare too well (spoiler: Clarisse and Katana, at that time).

USD Tools

My advice is to use UsdView from the Omniverse Launcher instead of trying to build it yourself. It also includes the USD toolset such as usdchecker and usdzip. To use these other utilities on Windows I found you must do this sort of thing for usdchecker in a CMD window, for example (and yes you'll need to change paths to your own machine's):
C:\Users\erich\AppData\Roaming\omniverse-launcher\usdview-0.23.8\scripts\usdchecker.bat C:\Users\erich\Documents\GitHub\usd-wg-assets\full_assets\McUsd\McUsd.usda
For usdzip it's easier to go to the directory where your main USD file is:
cd C:\Users\erich\Documents\GitHub\usd-wg-assets\full_assets\McUsd                                                
C:\Users\erich\AppData\Roaming\omniverse-launcher\usdview-0.23.8\scripts\usdzip.bat McUsd.usd McUsd_materials/tex/_domelight.png McUsd_materials/tex/chiseled_quartz_block.png (... rest of textures in a list)
Note: if this doesn't work for you, try uninstalling and reinstalling UsdView 0.23.8 from the Omniverse Launcher. Also, I've seen "Local" in the path instead of "Roaming". You can use the free (and wonderful) Everything tool on Windows to search for usdchecker.bat to find the path. Or, if you go to UsdView in the Omniverse Launcher, then press the Settings button, it brings up a window with the path to the install that you can copy & paste.

glTF

glTF Specifications

glTF 2.0 specification - pretty readable.

The physically based rendering material model for glTF is specified in detail - start here. This is nice to see, as UsdPreviewSurface is looser and sometimes harder to pin down. When unclear, I tend to assume that the glTF description is what USD meant.

Related articles

From 0 to glTF with WebGPU: The First Triangle by Will Usher.

glTF Viewers

Unlike USD, where UsdView is considered "ground truth," glTF seems to have no single official viewer that's officially fully trusted.

Here are three.js-based ones that are solid - drag and drop a .glb file:

  • Don McCurdy's viewer – My favorite overall. Be aware that you probably want to go to Lighting → environment and pick "None" to turn off the default surrounding lighting if you want to see how incoming lights are treated.
  • Three.js editor - nice in that it lets you examine and modify assets such as lights, etc. It doesn't have a default IBL but can load one.
  • <model-viewer> - another three.js-based editor Felix mentioned as comparable to the two above. One problem I noticed is that you cannot turn off the environment lighting, you can only choose among a set (or upload your own).
  • Needle viewer – I’ve heard it has some niceties like automatic reloading of changed files, being able to look at the hierarchy, etc. It is also based on three.js so is on par with the others above.

Non-three.js:

  • Gestaltor – visual editor on Windows and I’ve heard it’s good for casual edits.
  • Babylon.js viewer – I’ve heard this one’s gotten good and is spec complete.
  • gltfeditor - a hobby project by Andrew Varga. You can edit a bunch of things in your model, and it also exports to USDZ. It is fairly compliant (e.g., the AlphaBlendModeTest model isn't quite right). I want to explore this one more.
  • Khronos has an official renderer for glTF, SampleViewer, with code. It's mostly good, but incomplete, e.g., last I checked, the BoxInterleaved model (from Khronos) does not display correctly on it.

The Render Fidelity Comparison Results page shows PBR comparisons among renderers. You can pick any two and compare in the browser.

For a comprehensive list of (most every) application that writes or reads glTF files in some form, see the Project Explorer page (repo is here - you can submit PRs).

glTF Testing Resources

The Khronos Group's glTF V2.0 Sample Models - nearly 100 glTF models testing all sorts of things. There's also this repo from Khronos, which has glTF 1.0 and 2.0 models. It's updated less frequently, but still updated. I was informed: "The Sample Assets repo (first link) is the evolution of the Sample Model (second link) repo. Khronos made the decision to keep the old repo to preserve links. The Sample Assets repo is focused on glTF 2.0 only, so older models were removed. Also the copyright and licenses of all models were researched and included. Some models were dropped because the license was not suitable for the collection."

Felix Herbst's assets site has a bunch of glTF models from the site above, nicely showing each in the browser. A faster way to access many of the models above.

gltf-test shows various test models and how a variety of packages fare in displaying them. Actively maintained, shows which systems fail in what ways. Pretty cool is this page, where you can test yourself directly.

glTF Readers/Writers

To read and write out glTF, I've heard tinygltf is a good one.

Another is cgltf, which supports extensions.

Yet another is fx-gltf, which looks to use modern C++ and I’ve heard (back in 2018) that it’s faster than tinygltf.


glTF to USD

Matias Codesal's USD page has a section on this topic. I haven't found anything more of note. Me, I use Omniverse, since USD Composer is free and easy enough to use to convert in either direction (and, full disclosure, I work at NVIDIA, so am familiar with it).

For ease of use, you might try gltfeditor. It's browser based and you can export to USDZ.


Thanks to Felix Herbst, Leonard Daly, Ben Houston, Andrew Varga, Jeremy Cowles, Patrick Cozzi, Nick Porcino, Matias Codesal, Don McCurdy, and many others for contributions and for all the great content you maintain.