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. USDFirst, 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 provides a learn OpenUSD curriculum. 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 StructuringThis 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 2023There'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 ResourcesThe 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). For (sometimes extremely) large USD models, see item #21 on our portal page. USD ToolsMy 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.usdaFor 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. glTFglTF SpecificationsglTF 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 articlesFrom 0 to glTF with WebGPU: The First Triangle by Will Usher.glTF ViewersUnlike 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:
Non-three.js:
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 ResourcesThe 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/WritersTo 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 USDMatias 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. |