Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Target a recent, stable version of the USD main branch. At the time of writing, USD 2223.11 is the latest known public stable version 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

ItemNotesStatusScopeVolunteer

0. Legal requirements





Clarify ASWF vs. USD contribution guidelines regarding attributions.Submit contribution scope/intent to USD Proposals.


1. Build system changes





Add Dockerfile to standardize Emscripten build (using an Ubunutu 22.04 LTS base image)

    • Using known good Emscripten version (2.0.24)
https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/DockerfileDone?
Aura

Update build_usd.py build script to support:

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 --emscripten build option to specify a WebAssembly target

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 emcmake/emmake as a drop-in replacement for cmake when targeting WebAssembly build

https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/build_scripts/build_usd.py#L442Done?

Replacing TBB with WasmTBB

https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/build_scripts/build_usd.py#L956C1-L956C19Done?

Listing USD components incompatible with WebAssembly build to warn Users that Python, usdview, imaging have been disabled

https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/build_scripts/build_usd.py#L2588Done?

Add CMakeLists.txt for JavaScript/WebAssembly bindings in order to:

    • List USD binding dependencies (usd, usdLux, usdGeom, usdUtils, sdf, tf)
    • Specify location of WebAssembly build artifacts (WASM bundle, WebWorker, JavaScript bindings)




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):

    1. Loading a USDA stage
    2. Exporting USDA stage to string
    3. Traversing the USDA stage
    4. Running WebWorkers
    5. etc.
https://github.com/autodesk-forks/USD/tree/adsk/feature/webgpu/js/__tests__Done?

2. Core USD changes





arch library

  • Add #if defined(__EMSCRIPTEN__) guards to integrate Emscripten as an alternative to Linux platform:



Phil, +

pxr/base/arch/debugger.cpp

    • ArchDebuggerTrap()

...

...

    • ArchGetModificationTime()

...

    • ArchGetAccessTime()

...

    • ArchGetStatusChangeTime()

...

    • ArchGetFileLength()

...

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

  • ArchLibraryOpen()
  •  ArchLibraryError()
  • ArchLibraryClose()
  • ArchLibraryGetSymbolAddress()

Necessary? 

  • ArchGetStartTickTime()
  •  ArchGetStopTickTime()

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
  • Consider options for running tests in a NodeJS runtime
  • Include a few JavaScript tests demonstrating running tests of the arch lib built from Emscripten

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, +





tf library

  • Add type registration for USD symbols to be exposed to/from C++/JavaScript
    • Used to wrap TfToken, double, int, etc.
  • Add TfPointerAndBits to specify operations on 32-bit architectures (as USD only specifies 64-bit operations by default)




vt library

  • Add type registration for USD symbols to be exposed to/from C++/JavaScript
    • Add getJsObj to VtValue (similar to the existing getPyObj for Python)




sdf library

  • Add type registration for USD symbols to be exposed to/from C++/JavaScript
    • Used to wrap SdfPath objects
https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/pxr/usd/sdf/wrapPathJs.hDone?

usd library

  • Add type registration for USD symbols to be exposed to/from C++/JavaScript
    • Used to wrap UsdPrim, UsdStage objects to expose CreateNew(), ExportToString() and other API bindings.
https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/pxr/usd/usd/wrapStageJs.cpp#L105Done?

3. ThreeJS Hydra renderer





TBD: Separate project/branch? Engage with ThreeJS/web community for collaboration opportunity on this aspect?https://github.com/autodesk-forks/USD/blob/adsk/feature/webgpu/pxr/usdImaging/hdEmscripten/js/ThreeJsRenderDelegate.jsDone?