USD WebAssembly: Productization List
Goal
Itemize list of low-hanging fruits, tasks and operations to lower the cost of maintaining the USD WebAssembly prototype, and to eventually merge back components into the main USD branch.
Intent:
Prevent WebAssembly prototype from lagging too far behind most recent USD version
Automate builds, publishing to NPM, Wasmer or other repositories to facilitate integrations and adoption by other parties.
Facilitate contributions and collaboration with other parties not necessarily intricately familiar with USD (web community, ThreeJS, etc.)
Itemized list
Items in this list are ordered by ascending order of priority for the WebAssembly project (i.e. from "mandatory" to "optional").
Prerequisite work
Target a recent, stable version of the USD main branch. At the time of writing, USD 23.11
is the branched version.
Action Items:
Autodesk to open a branch from OpenUSD 23.11 to make WebAssembly contributions available
Autodesk to consider options for overlaps in configurations/platforms between platforms, ongoing Proposals, architectures, etc.
High-level prioritized item list
Item | Notes | Status | Scope | Volunteer |
---|---|---|---|---|
0. Legal requirements | ||||
Clarify ASWF vs. USD contribution guidelines regarding attributions. | Submit contribution scope/intent to USD Proposals. | |||
1. Build system changes | ||||
Add
| https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/Dockerfile | Done? | Aura | |
Update | Integrate a working prototype of the OpenUSD build script for Emscripten, WasmTBB, build switches, etc. | Done? | Will need additional review, polishing before a final "productization" option is ready. | Phil, (Aura) |
Adding an | Potential to replace "–-emscripten" with "–-wasm"? Decision TBD. https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/build_scripts/build_usd.py#L2198 | Done? | ||
Using | https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/build_scripts/build_usd.py#L442 | Done? | ||
Replacing TBB with WasmTBB | Done? | |||
Listing USD components incompatible with WebAssembly build to warn Users that | https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/build_scripts/build_usd.py#L2588 | Done? | ||
Add
| ||||
Include tests to validate WebAssembly build, using a NodeJS dependency in order to enable tests from headless environments. Test examples include (but are not limited to):
| https://github.com/autodesk-forks/USD/tree/adsk/feature/webgpu/js/__tests__ | Done? | ||
2. Core USD changes | ||||
| Phil, + | |||
pxr/base/arch/debugger.cpp
| https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/pxr/base/arch/debugger.cpp#L597 https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/pxr/base/arch/debugger.cpp#L646 Note sure what to do with | Done? | ||
| https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/pxr/base/arch/fileSystem.cpp#L162 https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/pxr/base/arch/fileSystem.cpp#L199 https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/pxr/base/arch/fileSystem.cpp#L456 https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/pxr/base/arch/fileSystem.cpp#L469 https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/pxr/base/arch/fileSystem.cpp#L501 https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/pxr/base/arch/debugger.cpp#L660 | Done? | ||
pxr/base/arch/library.cpp
| Necessary? | |||
| https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/pxr/base/arch/timing.h#L76 https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/pxr/base/arch/timing.h#L133 | Done? | ||
Include tests for the arch library using NodeJS |
Milestone: Share the code changes made up to this point with the greater USD community, seek feedback, framed around the changes up to this point as early end-to-end demo. | Phil, + | ||
| ||||
| ||||
| https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/pxr/usd/sdf/wrapPathJs.h | Done? | ||
| https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/pxr/usd/usd/wrapStageJs.cpp#L105 | Done? | ||
3. ThreeJS Hydra renderer | ||||
TBD: Separate project/branch? Engage with ThreeJS/web community for collaboration opportunity on this aspect? | Done? |
License: CC BY 4.0, Copyright Contributors to the ASWF USD working group.