Skip to content

coryrylan/usd-viewer

Repository files navigation

usd-viewer

npm version

Experimental Web Component for rendering USDZ 3d format. Built on the experimental work and efforts of github.com/autodesk-forks/USD/tree/release

Instalation

npm install usd-viewer

Web Assembly Dependencies

Cross-Origin Isolation Headers

The current WASM binary is compiled with Emscripten pthreads support, which requires SharedArrayBuffer. Browsers only expose SharedArrayBuffer on cross-origin isolated pages, so the following response headers must be set by your server:

"Cross-Origin-Embedder-Policy": "require-corp"
"Cross-Origin-Opener-Policy": "same-origin"

Note: Using "Cross-Origin-Embedder-Policy": "credentialless" instead of "require-corp" is less restrictive and still enables SharedArrayBuffer. It allows cross-origin resources to load without requiring a Cross-Origin-Resource-Policy header on each resource. Supported in Chrome 96+ and Firefox 119+.

Why Are These Headers Required?

The WASM binary (emHdBindings.wasm) declares shared memory (flags=0x03) at the WebAssembly level. This is a hard constraint enforced by the browser engine — the binary cannot be instantiated without SharedArrayBuffer-backed memory. The threading support is used for USD scene parsing and Hydra rendering via Emscripten pthreads (Web Workers + shared memory).

This requirement cannot be removed by modifying JavaScript alone. The WASM binary must be recompiled without pthreads to eliminate the header requirement entirely. See BUILDING.md for details on producing a single-threaded build.

Alternatives to Server-Side Headers

If you cannot configure server response headers (e.g., on static hosting without header support), you can use coi-serviceworker to inject the headers client-side via a Service Worker. Note that this requires a page reload on first visit.

Loading WASM Files

To load the Wasm dependencies in the browser copy them from the node_modules into your host env.

cpy node_modules/usd-viewer/wasm/**/* dist/wasm

To change the default path (./wasm) of the Wasm resources add the following meta tag to the document.

<meta name="usd-viewer:wasm" content="custom-path/wasm" />

Rebuilding WASM Files

The WASM files in wasm/ are built from the Autodesk USD fork. To rebuild them (for example when picking up upstream fixes):

npm run build:wasm        # Docker-based reproducible build (recommended)
npm run build:wasm:local  # Local build using emsdk

See BUILDING.md for details, version pinning, and troubleshooting.

Usage

<script type="module">
  import 'usd-viewer/include.js';
</script>

<usd-viewer src="./usd/perseverance.usdz" alt="Perseverance Mars Rover"></usd-viewer>

API

Property Attribute Type Description
src src string source path for usd/usdz file
alt alt string alt descriptive text
controls conrols boolean enable or disable model touch/mouse controls
fileName file-name boolean enable or disable display of file name
autoRotate auto-rotate boolean enable or disable auto rotation of model
autoRotateSpeed auto-rotate-speed number adjust speed of rotations of model
minDistance min-distance number minimum zoom distance of model
maxDistance max-distance number maximum zoom distance of model
zoom zoom number default zoom level of camera relative to model

Development

This project uses pnpm and Vite. The demo site is built with NVIDIA Elements web components for its UI.

pnpm install        # install dependencies
pnpm dev            # start the Vite dev server (basic / interactive / multiple examples)
pnpm build          # build the demo site (dist) and the publishable library (dist/lib)
pnpm preview        # preview the production build
pnpm deploy         # deploy the demo site to Firebase hosting

The demo pages live at the project root (index.html, single.html, multi.html) with their entry points under demo/. The interactive example uses nve-page, nve-page-panel, and Elements form controls for its control panel.

Licensing

The Web Component of this project is MIT licensed, however refer to the following external dependencies and explicitly marked file headers. For additional license details see:

About

Experimental Web Component for displaying 3d files in USDZ format

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors