I’ve been part of Autodesk’s open source committee – responsible for driving and approving open source contributions by the company – as the representative for Autodesk Research for the last few years.
One of the most interesting projects to come through the committee – at least from my perspective – has now been released into the wild: Autodesk’s Visualization team (who also develop the Forge viewer) has open-sourced an implementation of the USD toolkit that targets the web.
For those of you unfamiliar with USD – and I’m talking about the file format, not the currency – it stands for Universal Scene Description, and is a core part of Pixar’s 3D graphics pipeline that they chose to open-source themselves several years ago.
What’s possibly most interesting about USD is that it’s highly composable: you can build up scenes or assemblies to an arbitrary level from more primitive elements (assets, parts or sub-assemblies). And while its origins are in film-making, the format clearly has huge potential for other industries needing high-fidelity 3D representations. Aside from 3ds Max and Maya, Fusion 360 also exports to USD.
The best way to get a sense of Autodesk’s work on this project is to watch this video of Kai Schröder presenting the project to the USD working group.
The Visualization team’s efforts in this area revolve around the desire to take the largely C++-based USD implementation to work well with the web. They considered three main approaches for making this happen:
- Translate USD to glTF, which already has widespread support on the web
- This would unfortunately mean certain valuable features from USD – such as those relating to collaboration – would be lost
- Implement a loader in JavaScript
- Absolutely feasible for static scenes, but hard to maintain over time (and also very tricky when dealing with physics, etc.)
- Compile the USD toolkit to WebAssembly
- Initially concerned about the size of the resultant binaries
- The biggest blocker was that USD requires 64-bit memory addressing, while browsers currently only support 32-bit addressing for WASM
In the end, despite the blocker, option 3 proved to be the most attractive to explore more deeply. The team – Roland Ruiters-Christou, Sebastian Dunkel, Aura Munoz, Philipp Frericks, Cedrick Munstermann and Kai – figured out how not only to have USD target a new architecture – using Emscripten to build WebAssembly binaries – but to have USD support 32-bit memory addressing, allowing it to be loaded by browsers once packaged via WebAssembly.
Not only has the team added WebAssembly as a compile target for the USD toolkit, they’ve added a new Hydra render delegate called hdJavaScript that targets a THREE.js render delegate, as well as JavaScript bindings for USD that will allow JS devs to read and manipulate USD scenes directly.
The beauty of the third approach is that having the USD scene graph and Hydra’s rendering abstraction available – not just the import of the USD file format itself – opens up the possibility of implementing editing and interactive workflows in the browser with USD at their core. It also opens up the possibility of using native USD extensions for physics, MaterialX etc. using the same codebase and behaviour in the future. This happens to tie in nicely with another open source effort known as MaterialX Web, where we have extended the existing MaterialX project to work (you guessed it) with the web.
The proposed changes to the USD toolkit are in two draft pull requests – one for the new compilation target and one for the hdJavaScript and JS API work – but only to share the initial code: this is still a partial implementation that the team believes successfully demonstrates the feasibility of supporting USD in the browser, but more work will be needed to a) complete the work and b) maintain it, over time. Putting this out through open source will hopefully allow the community to engage with this important effort.
It was mentioned above that there were some concerns about the eventual size of the WASM binaries: right now they weigh in at 2MB (when gzip-compressed for transmission to clients, and 8.7MB when when uncompressed) without any major effort to optimize for smaller size. This is really encouraging.
Interested in giving it a try? Head on over to the demo page, and load the three models shown by Kai during his working group presentation. Here’s a recording of the gearbox demo:
Ricardo Cabello (aka Mr Doob), the father of THREE.js, has expressed his appreciation of the project, which is just fantastic.
It’s really encouraging to see Autodesk accelerating our contributions to open source projects – something I very much hope to see continue. I asked Sebastian Dunkel about his experience with these contributions, and he said:
After being a consumer of open source software for many years, it has been super rewarding to contribute back to the community. With the ports of USD and MaterialX to Web Assembly we opened up these technologies to a new audience and it has been awesome to see it being used in the wild in a matter of days by the community.
Many of you will be asking yourselves what this means for the future. Right now, this effort is very much at an experimental stage: it’s been shared very early – with the hope of getting feedback from the open source community – and it’s not clear how this will influence our own technology strategy moving forward, particular with respect to our web-based visualization offerings such as with the Forge viewer. Time will tell what combination of technology makes most sense to address the needs of our customers, but having this tool in the box is going to be extremely helpful.
There’s a lot of hype regarding USD in the context of the (sigh) Metaverse. Jensen Huang, CEO of Nvidia, recently said in an interview that “I’m hoping that everybody will go to USD and then it will become essentially the HTML of the metaverse.”
I’d actually go one step further, and combine this aspiration with Tony Parisi’s fourth and seventh rules of the Metaverse: I’m hoping that everybody will go to USD and then it will become essentially the core of the open, web-based metaverse.
Many thanks to Kai Schröder and Sebastian Dunkel for their input to this post, and congratulations to the whole Visualization team for this really important achievement!