Universal Scene Description (USD) is an efficient, scalable system for authoring, reading, and streaming time-sampled scene description for interchange between graphics applications.
For more details, please visit the web site here.
HgiWebGPU (USD-proposals)
This new graphics backend is a WebGPU based implementation of Hydra Graphics Interface (HGI) that allows to execute the HdStorm rasterization rendering pipeline on the web with the power of the new WebGPU capabilities. It reuses the existing shaders that are converted to SPIR-V by Shaderc and then WGSL by Tint, finally consumed by a browser with WebGPU feature enabled.
As we worked on a WebGPU based backend, we developed 2 solutions for different scenarios according to their advantages and disadvantages:
- Dawn-based: It is used for easier debugging and developing on desktop (Win and macOS).
It can be tested by enabling the
--dawn
option when building using build_usd.py. To try it out, you can useusdview
but, due to some limitations for WebGPU, some features need to be disabled.
export HDST_ENABLE_PIPELINE_DRAW_BATCH_GPU_FRUSTUM_CULLING=0
export HD_ENABLE_PACKED_NORMALS=0
export HDX_ENABLE_OIT=0
export HGI_ENABLE_WEBGPU=1
- Emscripten-based: It is used for rendering and viewing on a web browser.
The WebAssembly content can be tested using usdviewweb. For running an example on the browser, please follow the instructions under usdviewweb folder.
Please build USD with
--emscripten
option.
Limitations
- OIT is disabled due to missing support of GLSL
atomicAdd
and binding of a writable buffer to the vertex shader, which is not supported in HgiWebgpu. Could be worked around as the vertex shader actually doesn't access that attribute - Issue with Frustum cull
- Packed normals is disabled due to missing support for format HgiFormatPackedInt1010102
- Problems using SPIR-V and shader compilation of "OpenSubdiv::Osd::MTLPatchShaderSource::GetCommonShaderSource()" targeting Vulkan 1.0
- Doesn’t support dome light due to missing support for float32 filtering.
- UV problems because
primitive_ID
is not supported and used when doingfaceVarying
interpolation - 4GB of memory limitation in WebAssembly
- Not possible to pass write buffers to the vertex stage (e.g. constPrimVars), As defined in https://www.w3.org/TR/webgpu/#dom-gpudevice-createbindgrouplayout in the device timeline section
- Only vertex, fragment and compute shaders are available. Some functionalities use either Tesselation shaders or Geometric Shaders is not supported.
- Missing builtins available in glsl but not by wgsl nor tint reader using SPIR-V:
- determinant
- isinf
- isnan
- gl_primitiveID
- barycentric coords
- gl_Pointsize is readonly
- When there are multiple render targets, we exceed the limit of 32 accross all targets https://www.w3.org/TR/webgpu/#dom-supported-limits-maxcolorattachmentbytespersample. This usually happens when selection is included
- After conversion to webassembly, the wasm package has 70MB size, it could be smaller.
Linux | Windows | macOS | |
---|---|---|---|
dev | |||
release |
Need help understanding certain concepts in USD? See Getting Help with USD or visit our forum.
If you are experiencing undocumented problems with the software, please file a bug.
USD is primarily developed on Linux platforms (CentOS 7), but is built, tested and supported on macOS and Windows.
Please see VERSIONS.md for explicitly tested versions.
Required:
Optional:
See 3rd Party Library and Application Versions for version information.
Additional dependencies are required for the following components. These components may be disabled at build-time. For further details see Advanced Build Configuration.
Imaging and USD Imaging
Required:
Optional:
usdview
Required:
The simplest way to build USD is to run the supplied build_usd.py
script. This script will download required dependencies and build
and install them along with USD in a given directory.
Follow the instructions below to run the script with its default behavior,
which will build the USD core libraries, Imaging, and USD Imaging components.
For more options and documentation, run the script with the --help
parameter.
See Advanced Build Configuration for examples and additional documentation for running cmake directly.
1. Install prerequisites (see Dependencies for required versions)
- Required:
- C++ compiler:
- gcc
- Xcode
- Microsoft Visual Studio
- CMake
- C++ compiler:
- Optional (Can be ignored by passing
--no-python
as an argument tobuild_usd.py
)- Python (required for bindings and tests)
- PyOpenGL (required for usdview)
- PySide6 or PySide2 (required for usdview)
You can download source code archives from GitHub or use git
to clone the repository.
> git clone https://github.com/PixarAnimationStudios/OpenUSD
Cloning into 'USD'...
For example, the following will download, build, and install USD's dependencies,
then build and install USD into /usr/local/USD
.
> python USD/build_scripts/build_usd.py /usr/local/USD
In a terminal, run xcode-select
to ensure command line developer tools are
installed. Then run the script.
For example, the following will download, build, and install USD's dependencies,
then build and install USD into /opt/local/USD
.
> python USD/build_scripts/build_usd.py /opt/local/USD
Launch the "x64 Native Tools Command Prompt" for your version of Visual Studio and run the script in the opened shell. Make sure to use the 64-bit (x64) command prompt and not the 32-bit (x86) command prompt.
See https://docs.microsoft.com/en-us/cpp/build/how-to-enable-a-64-bit-visual-cpp-toolset-on-the-command-line for more details.
For example, the following will download, build, and install USD's dependencies,
then build and install USD into C:\USD
.
C:\> python USD\build_scripts\build_usd.py "C:\USD"
Set the environment variables specified by the script when it finishes and
launch usdview
with a sample asset.
> usdview USD/extras/usd/tutorials/convertingLayerFormats/Sphere.usda
If you'd like to contribute to USD (and we appreciate the help!), please see the Contributing page in the documentation for more information.