OpenUsd.Rendering.Silk.Vulkan 0.7.0-alpha

This is a prerelease version of OpenUsd.Rendering.Silk.Vulkan.
dotnet add package OpenUsd.Rendering.Silk.Vulkan --version 0.7.0-alpha
                    
NuGet\Install-Package OpenUsd.Rendering.Silk.Vulkan -Version 0.7.0-alpha
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OpenUsd.Rendering.Silk.Vulkan" Version="0.7.0-alpha" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OpenUsd.Rendering.Silk.Vulkan" Version="0.7.0-alpha" />
                    
Directory.Packages.props
<PackageReference Include="OpenUsd.Rendering.Silk.Vulkan" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add OpenUsd.Rendering.Silk.Vulkan --version 0.7.0-alpha
                    
#r "nuget: OpenUsd.Rendering.Silk.Vulkan, 0.7.0-alpha"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package OpenUsd.Rendering.Silk.Vulkan@0.7.0-alpha
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=OpenUsd.Rendering.Silk.Vulkan&version=0.7.0-alpha&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=OpenUsd.Rendering.Silk.Vulkan&version=0.7.0-alpha&prerelease
                    
Install as a Cake Tool

OpenUsd

CI Native Shaders Performance .NET License Status

A high-performance, NativeAOT-compatible .NET data and rendering stack for OpenUSD, plus an Avalonia desktop viewer.

OpenUsd keeps OpenUSD C++ types behind a versioned, project-owned C ABI. Its managed surface covers stages, layers, prims, typed values, composition, focused schema facades, ordered live authoring, and renderer-neutral state. Hydra/Storm is the primary renderer; Hydra-fed Silk.NET backends provide D3D12, Vulkan, and Metal alternatives without putting per-element P/Invoke on scene or render hot paths.

Current distribution: public source repository and 22 published 0.7.0-alpha packages, with pre-1.0 APIs. This set adds the five Cesium package IDs enumerated below, which were buildable from the tree but withheld from NuGet.org at 0.5.0-alpha. Package identities and public APIs may still change before 1.0.

dotnet add package OpenUsd --version 0.7.0-alpha
dotnet add package OpenUsd.Runtime.Core --version 0.7.0-alpha

OpenUsd.Runtime.Core is the RID-agnostic metapackage for win-x64, linux-x64, and osx-arm64. Rendering consumers add the managed backend and OpenUsd.Runtime.Imaging; the RID-specific package IDs remain available when a project wants explicit asset selection. RID-less builds and publishes copy the current host's assets only on win-x64, linux-x64, and osx-arm64; cross-publishing, CI matrix jobs, and unsupported hosts should set RuntimeIdentifier explicitly. See Packaging.

Release evidence now includes a checked CycloneDX SBOM, nuget.org symbol-package promotion wiring, and render gates that run before releases. The details and caveats live in Packaging, Packaging symbols, and Testing.

✨ Highlights

  • Idiomatic data API for stage and layer lifecycle, prims, attributes, relationships, variants, metadata, composition arcs, world bounds, and bulk values.
  • Focused schemas for UsdGeom, UsdShade, UsdLux, and UsdSkel.
  • Owned native boundary with opaque handles, bulk buffers, explicit lifetime rules, and no exposure of OpenUSD C++ layouts.
  • Ordered shared-stage access through UsdStageScheduler, change notifications, and retained render sources for live editing.
  • Renderer-neutral viewer state for camera, time, selection, picking, diagnostics, and failover.
  • A managed Hydra renderer over D3D12, Vulkan, and Metal covering materials, textures, UsdLux lighting, point instancing, curves, points, draw modes, clip planes, UsdSkel skinning, and time-varying values.
  • Measured parity with Storm on 22 hard-gated curated scenes whose structured gate requires 1.000000 adjusted IoU for D3D12 WARP and Vulkan SwiftShader; the render workflow also attempts the same curated capture on macOS CGL/Metal and records an explicit capability skip when hosted CGL cannot create the required pixel format.
  • Cross-platform packaging gates for win-x64, linux-x64, and osx-arm64.
  • NativeAOT and trimming analyzers across production libraries targeting .NET 8, 9, and 10.

πŸš€ Start from source

The repository pins .NET SDK 10.0.301. The managed baseline does not build OpenUSD itself:

git clone https://github.com/marcschier/openusd-dotnet.git
cd openusd-dotnet
dotnet --version
dotnet build OpenUsd.slnx -c Release
./eng/run-managed-tests.ps1 -Configuration Release
dotnet build samples/OpenUsd.HelloStage/OpenUsd.HelloStage.csproj -c Release -f net10.0

dotnet --version must print 10.0.301. If it is unavailable, use ./eng/install-dotnet.ps1 on Windows or bash ./eng/install-dotnet.sh on macOS/Linux. Managed projects compile without OpenUSD; executing OpenUsd.HelloStage requires the matching Core runtime.

For the native-backed API, inspect and build the locked runtime for the current RID:

./eng/build-native.ps1 -Rid win-x64 -PlanOnly
./eng/fetch-native.ps1 -Rid win-x64
./eng/build-native.ps1 -Rid win-x64
./eng/run-native-probe.ps1 -Rid win-x64

The public API used by the native probe and package consumers starts like this:

using OpenUsd;

using UsdStage stage = UsdStage.Create("scene.usda");
UsdPrim world = stage.DefinePrim("/World", "Xform");
world.SetString("custom:greeting", "hello");
stage.SetDefaultPrim("/World");
stage.Save();

See Getting started for platform prerequisites, native staging, the viewer, and NativeAOT commands. The runnable source setup is in the HelloStage guide, and the complete API walkthrough is in Data API.

πŸ—οΈ Architecture

flowchart LR
    App[Application or sample] --> Data[OpenUsd data API]
    Viewer[Avalonia Viewer] --> Data
    Viewer --> Neutral[OpenUsd.Rendering]
    Data --> Interop[OpenUsd.Interop]
    Interop --> CABI[Project-owned C ABI]
    CABI --> USD[OpenUSD C++]
    Neutral --> Storm[Hydra / Storm]
    Neutral --> Silk[Hydra / hdSilk pages]
    Storm --> Interop
    Silk --> Interop
    Silk --> RHI[D3D12 / Vulkan / Metal]

The data facade, renderer-neutral contracts, Hydra translation, Cesium importer, and concrete RHIs remain separate. Large scene and render payloads cross owned bulk boundaries rather than one native call per element. See Architecture and Rendering.

πŸ“¦ Package matrix

All 22 package IDs below are buildable from this repository and published to NuGet.org at 0.7.0-alpha. The five Cesium IDs were withheld at 0.5.0-alpha and ship for the first time in this release.

Package TFM Purpose
OpenUsd.Interop 8/9/10 Generated NativeAOT-safe C ABI declarations
OpenUsd 8/9/10 Managed stage, layer, prim, value, and schema API
OpenUsd.Rendering 8/9/10 Renderer-neutral state, capabilities, picking, and failover
OpenUsd.Rendering.Storm 8/9/10 Hydra/Storm adapter
OpenUsd.Cesium 8/9/10 Optional Cesium 3D Tiles importer
OpenUsd.Rendering.Silk 8/9/10 Hydra-fed managed renderer and backend-neutral RHI
OpenUsd.Rendering.Silk.D3D12 8/9/10 Direct3D 12 backend
OpenUsd.Rendering.Silk.Vulkan 8/9/10 Vulkan backend
OpenUsd.Rendering.Silk.Metal 8/9/10 Metal backend
OpenUsd.Runtime.Core 8 carrier RID-agnostic Core metapackage for win-x64, linux-x64, and osx-arm64
OpenUsd.Runtime.Core.win-x64 8 carrier Windows OpenUSD core runtime and data plugins
OpenUsd.Runtime.Core.linux-x64 8 carrier Linux OpenUSD core runtime and data plugins
OpenUsd.Runtime.Core.osx-arm64 8 carrier macOS OpenUSD core runtime and data plugins
OpenUsd.Runtime.Imaging 8 carrier RID-agnostic Imaging metapackage for win-x64, linux-x64, and osx-arm64
OpenUsd.Runtime.Imaging.win-x64 8 carrier Windows Hydra, Storm, hdSilk, and plugins
OpenUsd.Runtime.Imaging.linux-x64 8 carrier Linux Hydra, Storm, hdSilk, and plugins
OpenUsd.Runtime.Imaging.osx-arm64 8 carrier macOS Hydra, Storm, hdSilk, and plugins
OpenUsd.Runtime.Cesium 8 carrier Cesium metapackage for all supported RIDs
OpenUsd.Runtime.Cesium.win-x64 8 carrier Windows Cesium 3D Tiles native shim
OpenUsd.Runtime.Cesium.linux-x64 8 carrier Linux Cesium 3D Tiles native shim
OpenUsd.Runtime.Cesium.osx-arm64 8 carrier macOS Cesium 3D Tiles native shim

Runtime projects use net8.0 as their NuGet asset-carrier TFM; the managed libraries they accompany target .NET 8, 9, and 10. Package layout and clean-consumer gates are documented in Packaging.

🎯 Target frameworks

Surface net8.0 net9.0 net10.0 Notes
Packable managed libraries βœ… βœ… βœ… AOT, trim, and single-file analyzers enabled
OpenUsd.LiveAuthoring sample library βœ… βœ… βœ… Source sample, not a package
Runtime asset carrier projects Carrier β€” β€” RID assets consumed by supported applications
Viewer, executable samples, probes β€” β€” βœ… Repository development and evidence tools

πŸ–₯️ RID and viewer matrix

The package prefix in the runtime columns is OpenUsd.Runtime..

RID Core package Imaging package Viewer choices Evidence
win-x64 Core.win-x64 Imaging.win-x64 Storm, D3D12, Vulkan Native, package, 19 gated parity scenes
linux-x64 Core.linux-x64 Imaging.linux-x64 Storm, Vulkan Native, package, Storm child render gate
osx-arm64 Core.osx-arm64 Imaging.osx-arm64 Storm, Metal Native, package, Metal probe

Curated parity runs on Windows against D3D12 WARP and Vulkan SwiftShader. Two Vulkan composition proofs are narrowed on hosted runners and need GPU-equipped self-hosted hardware: hosted Windows has no system Vulkan ICD, and SwiftShader lacks the Win32 external-memory and external-semaphore extensions needed to export a Vulkan image to a D3D11 shared handle. Hosted Linux reaches lavapipe, but the compositor reports no supported image handles, so no external Vulkan image can be imported.

See Support matrix for the distinction between implemented source, workflow-defined gates, and hosted execution evidence.

🎨 Renderer and backend matrix

Viewer kind Scene source Presentation/API RID Role
Storm Hydra/Storm WGL, GLX, or NSOpenGL host all supported Primary
D3D12 Hydra to hdSilk pages Direct3D 12 win-x64 Managed fallback
Vulkan Hydra to hdSilk pages Vulkan win-x64, linux-x64 Managed fallback
Metal Hydra to hdSilk pages Metal osx-arm64 Managed fallback

The renderer-neutral capability declarations are:

Capability Storm D3D12 Vulkan Metal
Presentation βœ… βœ… βœ… βœ…
Offscreen β€” βœ… βœ… βœ…
Compute β€” βœ… βœ… βœ…
Multisampling Up to 8x 1x 1x 1x
Shadows βœ… β€” β€” β€”
Device-loss detection βœ… βœ… βœ… βœ…
One-pixel picking βœ… βœ… βœ… βœ…
Selection display Storm highlight Visible outline Visible outline Visible outline

An em dash means the capability is not advertised by the current renderer-neutral descriptor, not that the underlying graphics API can never provide it. The Shadows row states that the Storm descriptor advertises the capability; it does not mean shadows are rendered in every configuration, and the offscreen parity harness is measured not to produce them at all.

🧩 Feature matrix

Area Current alpha coverage Status
Stage and layer lifecycle Create, open, masked open, save, reload, export, edit targets, muting Implemented
Prim lifecycle Define, override, class prims, traversal, children, active/load/instance state Implemented
Values Scalars, arrays, matrices, vectors, quaternions, colors, tokens, time samples Implemented
Relationships Create, enumerate, replace, read, and clear targets Implemented
Composition References, payloads, inherits, specializes, sublayers, population masks Implemented
Variants and metadata Variant sets/selections plus typed prim and layer metadata Implemented
UsdGeom Xform, xformable, imageable, mesh, camera, bounds, transforms Focused facade
UsdShade Materials, shaders, preview surface, UV texture, connections, binding Focused facade
UsdLux Distant, sphere, rect, disk, dome, cylinder, common light/shaping API Focused facade
UsdSkel Root, skeleton, animation, binding, joints, transforms, influences Focused facade
Shared-stage authoring Scheduler, change feed, retained render source, bounded sample queue Implemented
Viewer Hierarchy, properties, layers, timeline, cameras, switching, diagnostics Implemented
Viewer diagnostics Backend API/device, compute, descriptor indexing, software device, frame counters Implemented
Primitive picking Storm and hdSilk backend paths with stale-result handling Implemented
Face picking hdSilk preserves authored triangle/subprim identity Implemented on Silk
Edge and point picking Valid requests report unsupported Not supported
Selection outlines Visible-only hdSilk outline; Storm uses its native highlight Implemented
X-ray selection Explicitly rejected by the current outline contract Not supported
NativeAOT Compile gates on all RIDs; package-only execution gates per RID Alpha-gated

hdSilk rendering features

These are the managed renderer's Hydra-fed features. "Parity-gated" means a curated scene is compared against Storm and must match exactly; see the section below for what that does and does not claim.

Area Coverage Status
Mesh topology and transforms Triangulated meshes, authored normals, UVs, display colour Parity-gated
Primvar interpolation Constant, vertex, varying, uniform, face-varying Implemented; constant/vertex gated
UsdPreviewSurface All 14 inputs, both specular and metallic workflows Implemented; specular workflow gated
Textures Image decode, GPU cache, UsdUVTexture wrap and colour space Implemented; repeat+sRGB gated
MaterialX Projection plus generated Vulkan SPIR-V and Metal MSL source Vulkan generated path gated
UsdLux lighting Distant, sphere, and untextured dome ambient with exposure Parity-gated
Shadows Transport exists; Storm produces no offscreen reference to gate against Measured, ungated
Image-based lighting Dome textures and IBL Not implemented
Point instancing Prototype-plus-instance wire format, hardware instanced draws Parity-gated
Basis curves Linear curves as line topology Implemented subset; gated
Points UsdGeomPoints as point-list topology Parity-gated
Draw modes Cards, bounds, and origin Parity-gated
Cull style doubleSided and authored cull style Implemented; doubleSided gated
Clip planes Eye-space clip planes through the camera API Parity-gated
Time-varying values Transforms and primvars resample without a full scene rebuild Parity-gated
UsdSkel skinning CPU evaluation in hdSilk sync Parity-gated
Blend shapes Narrow CPU point-offset subset before skinning; GPU deformation excluded Implemented subset
Subdivision Storm renders the control cage at harness complexity Measured, ungated
Draw batching Sorted and batched by pipeline and material Implemented
Volumes beyond Vulkan single-density OpenVDB, path tracing, full MaterialX β€” Out of current alpha scope

πŸ”¬ What "parity with Storm" means here

Storm is the reference renderer. A parity harness renders the same USD stage through Storm and through hdSilk and compares coverage and colour, and the claim this project makes is deliberately narrow:

  • 25 curated scenes are registered; 22 are hard gates with a structured required adjusted IoU of exactly 1.000000 against D3D12 WARP and Vulkan SwiftShader. A gate is only accepted with a perturbation margin of at least 0.18, so a scene that would score well by symmetry alone cannot qualify.
  • Metal is wired into the curated set but hosted Storm/Metal parity is not yet observed. The macOS render job runs the same capture only when CGL is available; hosted arm64 currently records a CGL capability skip instead of counting that path as passing.
  • Three scenes are measured and deliberately left ungated, because Storm in the offscreen harness renders the subdivision control cage, renders MaterialX black, and does not cast shadows at all. Those are recorded limits, not hidden failures.
  • Several shipped features are reachable but not proven by a gate β€” non-diffuse texture slots, most UsdPreviewSurface inputs, metallic shading, and animated materials among them.

Where it runs matters as much as the number. The parity harness is driven by the render workflow, not by ordinary CI, so a green ci badge does not mean parity ran. Today:

Environment Backends State
Windows with a conformant GPU driver D3D12 WARP, Vulkan SwiftShader All 22 gates pass
Hosted Linux (render) Vulkan SwiftShader Runs and passes
Hosted Windows (render, Mesa Storm) D3D12 WARP 7 WGL tests; Vulkan composition skip
Hosted macOS (render) Metal; CGL when available Metal tests; CGL parity skip on hosted arm64

Hosted Windows still has no usable Vulkan ICD, which is the render-unblock-vulkan limitation described in Testing and needs a GPU-equipped self-hosted runner for Vulkan composition. Hosted WGL and hosted Linux are automated render gates.

Support matrix carries the full feature-to-scene table naming every uncovered feature, and Testing records every rejected hypothesis and measured divergence.

πŸ—ΊοΈ Repository map

Path Contents
src/ Managed data, interop, rendering packages, runtime packages, and Viewer
native/ Project C ABI shims, Hydra integration, CMake inputs, and native tests
samples/ Managed smoke and ordered live-authoring examples
tests/ Managed, native, package, rendering, performance, and Viewer evidence
benchmarks/ BenchmarkDotNet workloads
eng/ SDK, native, shader, packaging, test, performance, and Viewer scripts
test-assets/ Repository-owned USD fixtures and fuzz seeds
docs/ Architecture, API, rendering, packaging, testing, and contributor guides

πŸ§ͺ Samples

Sample Purpose Native runtime
OpenUsd.HelloStage Create/save/open round trip Required to run
OpenUsd.LiveAuthoring Ordered update adapter No for build/tests
OpenUsd.LiveAuthoring.Sample End-to-end authoring Required

See the samples overview for prerequisites, expected output, and package versus source consumption.

πŸ“š Documentation

Start here Use it for
Documentation hub Audience-oriented routes through all project docs
Getting started Source build, native staging, Viewer, and AOT
Support matrix Framework, RID, renderer, backend, and feature status
Architecture Layering, ownership, and bulk native boundaries
Programming model Ownership, scheduling, cancellation, errors, paths, and AOT
Data API Public stage, prim, value, composition, and schema APIs
Live authoring Ordered batches, backpressure, consumers, and disposal
Rendering Renderer-neutral contracts, Storm, hdSilk, picking, and selection
Viewer Desktop workflows, camera controls, editing, and diagnostics
Samples Runnable data API and live-authoring examples
Native build Locked OpenUSD inputs, toolchains, and native probes
Packaging Runtime asset layout and clean package consumers
Versioning Managed, ABI, package, runtime, and plugin compatibility
Shader pipeline Reproducible DXIL, SPIR-V, and Metal inputs
Performance Boundary shape, allocation gates, resources, and benchmarks
Testing Managed runner, conformance, performance, and platform evidence
Troubleshooting Native loading, plugins, platforms, AOT, and evidence triage

πŸ› οΈ Build, test, and NativeAOT

dotnet restore OpenUsd.slnx
dotnet build OpenUsd.slnx -c Release --no-restore
./eng/run-managed-tests.ps1 -Configuration Release
dotnet format OpenUsd.slnx --verify-no-changes --no-restore
./eng/check-line-length.ps1
./eng/test-documentation.ps1
./eng/run-performance.ps1

Managed tests use TUnit on Microsoft.Testing.Platform. Use eng/run-managed-tests.ps1, not a bare dotnet test, for the repository's verified execution path. Targeted commands are in Testing.

The same NativeAOT compile smoke used by CI can be reproduced with the platform AOT toolchain. On Windows, run it from an x64 Visual Studio developer shell:

dotnet publish samples/OpenUsd.HelloStage/OpenUsd.HelloStage.csproj -c Release -f net10.0 -r win-x64 -p:PublishAot=true

Native-backed execution additionally requires the matching locked runtime and shim. Use eng/run-native-probe.ps1 after the native build rather than manually assembling loader paths.

🚧 Non-goals

  • A stable public package or API compatibility promise before 1.0.
  • Direct bindings to the OpenUSD C++ ABI or exposure of C++ object layouts.
  • Per-prim, per-vertex, or per-element P/Invoke on scene and render hot paths.
  • Complete generated coverage of every OpenUSD schema and optional component.
  • A Python-hosting usdview clone, full DCC, or general-purpose game engine. The Viewer can still pursue usdview-style inspection parity over the C++ USD and Hydra APIs.
  • Runtime packages for RIDs outside win-x64, linux-x64, and osx-arm64 today.
  • Bundling Python, usdview, tutorials, examples, Embree, or RenderMan in the locked native profile. OpenVDB, Alembic, Draco, and Ptex are now included in that profile.

πŸ”’ Security

Treat USD files, asset paths, plugin metadata, and native package contents as untrusted input. Report vulnerabilities privately through GitHub Security Advisories; do not open a public issue. See Security.

🀝 Contributing

Keep changes focused, analyzer-clean, deterministic, and separated across data, renderer-neutral, Hydra translation, and concrete backend layers. Native or public API changes require corresponding tests and documentation. See Contributing.

πŸ“„ License

MIT. OpenUSD and bundled third-party native dependencies retain their own licenses; see NOTICE.

Status

OpenUsd is a substantial public 0.7.0-alpha baseline with 22 packages published to NuGet.org, but it is not a stable release. Data, rendering, Viewer, package, NativeAOT, shader, parity, and performance gates exist, and this README states what they do and do not prove. Public API and package identities may change before 1.0. Workflow badges above are the authoritative status for the default branch.

Before 1.0 the remaining work is code signing and notarization credentials for signed Viewer distributions, GPU-equipped self-hosted runners for the two Vulkan composition gates, and closing the measured divergences recorded in Testing.

The standalone Viewer bundle smoke is now proven on win-x64 and linux-x64. Run 31290108012 records viewer distribution linux-x64 as successful and reports a rendered Storm/OpenGL frame under Xvfb after the Linux X11 error-trap self-deadlock was fixed in 278b1f6. The osx-arm64 result is also established, but still red: the same run reaches GPU composition: ready (808 Γ— 513), falls back from Storm to Metal after the headless CGL pixel-format limit, initializes hdSilk/Metal, and then never reports frame rendered within 120 seconds. The published packages are unaffected β€” they are gated separately β€” but the macOS standalone Viewer bundle remains a known failing smoke.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on OpenUsd.Rendering.Silk.Vulkan:

Package Downloads
OpenUsd.Viewer

Avalonia viewport and inspector shell for OpenUSD stages, embeddable on a caller-owned stage scheduler.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.7.0-alpha 21 8/9/2026
0.6.0-alpha 110 8/8/2026
0.5.0-alpha 344 8/7/2026
0.4.0-alpha 432 8/2/2026
0.3.0-alpha 68 8/1/2026
0.2.0-alpha 66 7/29/2026
0.1.0-alpha 554 7/28/2026