Generated banner for Omniverse Realtime Viewer
Generated logo for Omniverse Realtime Viewer

Omniverse Realtime Viewer

NVIDIAOfficialCreated by NVIDIA Omniverse

  • Skill
  • Tool integration
  • Software development
  • Apache-2.0
  • Medium risk

From the author

Use as the top-level router for Omniverse Realtime Viewer USD apps, XR delivery, SPG GPU processing, stylized rendering, and focused viewer reference documents.
— the description by NVIDIA Omniverse

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

The Omniverse Realtime Viewer skill acts as a central routing and architectural framework for developing USD-based 3D viewer applications. It provides a structured approach to composing rendering, scene state, and delivery mechanisms, ensuring that developers can integrate OVRTX rendering, OVStage scene management, and various UI or streaming adapters effectively. The skill emphasizes a modular architecture where the viewer runtime, UI/input adapters, and delivery systems are decoupled, allowing for consistent behavior across local and streamed environments.

What it does

  • Provides a routing architecture for USD viewer apps, XR delivery, and GPU-accelerated rendering.
  • Defines the separation of concerns between viewer runtime, UI adapters, and delivery systems.
  • Offers guidance on integrating OVRTX for high-fidelity 3D rendering.
  • Establishes conventions for camera interaction, scene state management, and input handling.
  • Supports the implementation of specialized features like stylized rendering and CAE/CFD visualization.
  • Provides protocols for agent-to-UI communication and scene control.

When to use it

  • When starting the development of a new USD-based realtime viewer application.
  • When integrating advanced rendering features like stylized visualization or AOV switching.
  • When building XR or spatial editing capabilities into an existing Omniverse application.
  • When you need to standardize the architecture for local and streamed viewer deployments.
  • When implementing chat-driven scene control or agent-based inspection of a 3D scene.

Advantages

  • Promotes a clean, modular architecture that separates rendering logic from UI and transport.
  • Ensures consistent behavior across different delivery methods, such as local windows or WebRTC streaming.
  • Provides clear paths for extending functionality without disrupting the core viewer runtime.
  • Facilitates the integration of complex simulation and visualization data into the viewer.
  • Standardizes conventions for scene state, selection, and camera control.

Usage examples

“How do I set up a basic USD viewer application using the Omniverse Realtime Viewer architecture?”
The agent will guide you to start with the viewer app reference, resolve dependencies, and implement the core runtime owner to manage the OVStage and OVRTX renderer.
“I need to add stylized rendering to my existing viewer. Where should I start?”
The agent will direct you to the stylized visualization references to implement the required USD/Lua/CUDA nodes within your existing runtime owner.
“How can I enable an AI agent to control the viewer scene?”
The agent will point to the A2UI Scene Copilot reference to implement an operation interface that allows the agent to send commands through the existing runtime owner.
“How do I switch between different render outputs like beauty and depth in my viewer?”
The agent will explain how to use the AOV switching reference to map RenderVars and update the RenderProduct's orderedVars through the runtime owner.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/nvidia/omniverse-realtime-viewer/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip omniverse-realtime-viewer.zip -d .agents/skills

Documentation by NVIDIA Omniverse

<!-- SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -->

<!-- SPDX-License-Identifier: Apache-2.0 -->

Omniverse Realtime Viewer

Build responsive USD viewers by composing OVRTX rendering, OVStage scene state, and the delivery/UI libraries appropriate to the app. Use this package for viewer architecture and interaction; use each selected SDK's upstream guidance for installation and exact release-specific APIs.

Start With The App

  1. When delivery is explicit, select its recipe through references/routing.md and follow its current phase. Otherwise start with references/usd-viewer-app/README.md. For an existing app, keep its architecture and read only the references for the requested change. Broad app, conventions and UI catalogs are lookups as needed.

  2. Resolve the selected libraries through references/dependencies/README.md. Preserve the project's manifest unless an upgrade is requested.

  3. Build a working frame and camera interaction in the chosen shell, then add the requested capabilities. Read references/conventions.md for shared input, camera, selection, and protocol conventions.

  4. Use references/viewer-ux-workflow/README.md for broader interface design. Loading, selection feedback, errors, and input responsiveness belong in the first working app, alongside rendering.

  5. Validate the actual delivery path with references/validation.md. A browser screenshot does not validate a native window or a different transport.

Architecture

OwnerResponsibility
Viewer runtimeOwn the live OVStage, publication clock, OVRTX renderer, scene changes, and render stepping.
UI and input adapterDisplay frames and copied app state; send user intent to the runtime owner.
Storage/query/simulation workersPerform their assigned work and return results through the selected integration boundary.
Delivery adapterPresent locally or stream through ovstream; respect frame ownership and backpressure.

Use OVRTX for USD/3D rendering. Browser apps display its WebRTC video; local apps present its output through their native shell. A missing GPU means rendering is unverified, not a reason to substitute a browser 3D renderer.

Keep viewer cameras, settings, effects, and transient edits in app-owned session or runtime state so the source USD stays intact. Serialize scene mutation and render stepping through the runtime owner. Read references/ovstage-ovrtx-integration/README.md for that loop, then the population or data-plane references when implementing scene loading or attribute writes.

Keep expensive loading and metadata work off the UI and render threads. Keep transport details behind a delivery adapter so camera, selection, properties, and loading state can be reused across local and streamed shells.

Add Capabilities As Needed

Use references/routing.md to select camera/picking, scene management, render settings, cloud assets, simulation, editor tools, deployment, or CAE/CFD visualization. Read the selected capability's implementation flow and its linked contract; the full reference catalog is not a prerequisite for a first frame.

For simulation, use the routing reference's Simulation Ecosystem section plus references/realtime-sim-integration/README.md. For UI-driven forces or control, add references/interaction-round-trip/README.md.

For example scenes, use references/usd-sample-data/README.md. When a runtime failure needs diagnosis, use references/troubleshooting/README.md and the selected SDK's matching release guidance before changing the architecture.

Solid Modeling: Upstream First

For usd-brep, exact BRep, solid modeling, kernel failures, CAD topology, or BrepArray questions, first read references/dependencies/README.md → USD BRep. Follow the owning repository's current agent guidance, skills, operation docs, and package API before selecting local integration references. Discover the upstream router rather than assuming skill names or directory layouts remain fixed. Upstream owns modeling semantics, schema rules, tuning, and diagnostics; this package owns OVRTX display, worker handoff, selection mapping, and publication timing.

GPU Processing And Stylized Viewers

For custom GPU processing, chained outputs and lens sampling, read references/spg-processing/README.md. For toon, ink, technical/X-Ray styles, geometry strokes or full wireframe, continue to references/stylized-visualization/implementation.md. Its USD/Lua/CUDA starting node and geometry/depth/composite build sequence work with the selected viewer recipe; use references/stylized-visualization/style-recipes.md for the preset math and references/stylized-visualization/README.md for supporting contracts. Implement the result inside the existing OVRTX/runtime owner and deliver the published processed output. These instructions do not require a sample checkout or a prior stylized-rendering implementation.

For an optional usd-brep geometry source, first read references/dependencies/README.md → USD BRep and the owning repository's current agent guidance, skills, and operation docs; then read references/stylized-visualization/usd-brep-source.md for the display boundary.

XR Viewers

For headsets, immersive viewers, or spatial editors, start with references/xr-viewer-recipe/README.md. Resolve SDK setup and contracts through references/dependencies/ovxr.md; the library owns OpenXR lifecycle and frame submission. For controllers, hands, navigation, or scene tools, add references/xr-spatial-input/README.md and references/ovxr-python-interactions/README.md. For projection-integrated UI, read references/ovxr-composition-ui/README.md and references/ovxr-composition-ui-validation/README.md.

Files

references/cae-cfd-visualization/rtwt-blueprint-recreation.md

<!-- SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -->

<!-- SPDX-License-Identifier: Apache-2.0 -->

Recreating the RTWT "Digital Twins for Fluid Simulation" Blueprint

Triggers

Use this reference to rebuild NVIDIA's "Digital Twins for Fluid Simulation" blueprint — a.k.a. RTWT / Real-Time Wind Tunnel, the AI-surrogate automotive external-aero "virtual wind tunnel" — built on this repo's ovrtx / ovstage / ovstream / ovui stack. Trigger terms: digital-twins-for-fluid-simulation, RTWT, real-time wind tunnel, virtual wind tunnel, AeroNIM, DoMINO, DoMINO-Automotive-Aero, PhysicsNeMo, Trame, aero_auto_inference.npz, aero_auto_low.stl, Unit-Sphere seeds, "recreate the fluid-simulation blueprint", "car aero streamlines", movable emitter, AI surrogate car.

Critical scope: this doc uses PRE-BAKED data only — no NIM, no live inference. We consume the blueprint's shipped .npz point cloud + .stl car directly and render an interactive streamable digital twin from it. Live DoMINO/AeroNIM inference is an explicit, later, out-of-scope gap (see Parity / Gaps).

Scope and target architecture

RTWT is a containerized digital-twin reference application published at github.com/NVIDIA-Omniverse-blueprints/digital-twins-for-fluid-simulation. This skill recreates its pre-baked-data interaction model with the library stack directly:

  • warp-simdata turns solver arrays into an in-memory dataset and derived geometry.

  • The application authors UsdGeomMesh, UsdGeomPoints, or UsdGeomBasisCurves and publishes through OVStage.

  • ovrtx renders frames; ovstream delivers them to a browser video element with DOM controls.

  • A serialized controller separates visualization-only edits from dataset and configuration changes.

The supplied .npz represents the flow field. Do not add a surrogate inference service or direct-volume renderer to this recipe.

The library-native recreation recipe (pre-baked, no inference)

The blueprint's "lite mode" already proves you can drive the whole twin from cached fields. We take that one step further: treat aero_auto_inference.npz as the flow field and render + stream supported geometry representations with our stack.

Pipeline
  1. Load pre-baked data. np.load("data/aero_auto_inference.npz") → coordinates (128k Z-up points) + velocity (vec3 per point). No Triton or volume ingest — the .npz is the surrogate output already.

  2. Point cloud → interpolable velocity volume. A bare point cloud has no cells, so voxelizing it yields an all-zero field and streamlines never advect. Instead bin the scattered velocities onto a regular hex lattice (box-average per node + dilate-fill of empty nodes) and build a SIDS HEXA_8 (element_type=17) warp_simdata Dataset with a node-associated velocity field. Trilinear interpolation now works and streamlines flow. This is the technique documented in emitter-and-seed-sources.md; implement this as an application-owned binning function. Choose cell size from the data bounds and desired streamline fidelity, then validate that probes return nonzero values.

  3. Emitter → streamlines colored by speed. Seed an upstream Y-Z emitter plane at low X (SEED_X_FRAC = 0.06, ahead of the car) and trace Direction.FORWARD with streamlines.compute(ds, "velocity", seeds_ds, ...). Probe the velocity at each streamline vertex (probe.compute) to get a real speed gradient, then color per vertex through a colormap LUT (coolwarm: fast = red, slow = blue). Clamp the LUT domain to the 3rd–97th percentile so the near-body slowdown reads instead of the freestream (|v|≈30) collapsing to one color. In the interactive app this emitter plane/sphere becomes movable (setStreamlineSeed{center,radius} → emitter_streamlines backend), the direct analog of RTWT's Unit-Sphere seed source.

  4. STL car surface → lit UsdGeomMesh. Parse aero_auto_low.stl (already Z-up), vertex-cluster decimate (DECIMATE_CELL = 0.035, snap-weld-drop-degenerate), and author a UsdGeomMesh with a metallic UsdPreviewSurface.

  5. Compose the viewer USDA. Build a Z-up multi-prim USDA text string — camera, RenderProduct + RenderVar LdrColor + RenderSettings, dome + distant lights (a path tracer renders unlit geometry black), a FieldMat primvar-reader material for the streamlines, the CarMat, and the geometry scope (streamlines BasisCurves + car Mesh + faint context point cloud). Per-vertex speed color goes into primvars:displayColor. This is exactly the authoring contract in usd-authoring-and-materials.md.

  6. Publish → render. ovstage.population.open_usd_from_string(stage, usda, ordinal=1, domains=PopulationDomain.RENDERING) → stage.advance_write_floor(1).wait() → attach the RendererRuntime → step_extract the LdrColor frame. See ovstage-render-and-camera.md.

The six steps above are sufficient for a headless hero-frame implementation. To reach the interactive, streamable twin, compose the same application-owned CAE modules with the streaming loop.

From hero frame to interactive twin

The interactive recreation needs a server plus React frontend. Add an emitter representation and a setStreamlineSeed message so the user drags the seed sphere and watches streamlines recompute — the RTWT interaction, minus inference. To build it:

  • Server (ovrtx + ovstream): build the CAE stage with the ingestion, operator, USDA authoring, and OVStage contracts in this family; warm up, convert each LdrColor RGBA8 frame to BGRA on CUDA, and stream_video. One render thread owns step(), all OVStage writes, and picking. See streaming-cae-viewer.md and references/streaming-server/README.md.

  • Controller (the AppStateOperator analog): React control → {event_type,payload} over the JSON data channel → server validates → enqueues a command on the render-loop queue → loop drains with last-wins coalescing (a dragged slider queues at most one rebuild) → OVStage write / geometry rebuild at a new ordinal → advance write floor → next renderer.step(ordinal=N) → stream the next frame. The emitter command rebuilds the seed point cloud and re-runs streamlines.compute. Split state into viz-only (colormap / slice / camera) vs. would-be inference-triggering (dataset / config) exactly as RTWT's controller does — here the latter just loads a different pre-baked .npz instead of calling Triton. See driving-cae-viz-via-ovstage.md and references/streaming-messages/README.md.

  • React frontend: @nvidia/ov-web-rtc AppStreamer.connect over WebRTC, a <video> element, and DOM panels for representation / field / colormap / iso / slice / emitter. Mouse/keyboard forward natively (never as JSON); only app state travels the data channel. See streaming-cae-viewer.md and references/streaming-client/README.md.

What maps to which of our skills

Build the whole twin from skills alone in this order:

Blueprint stepSkill reference
Ingest .npz → SIDS Dataset; hex-lattice velocity volume; seed sourcesdata-and-operators.md, emitter-and-seed-sources.md
Emitter streamlines + probe-color; STL car mesh; colormap LUTemitter-and-seed-sources.md, usd-authoring-and-materials.md
Compose viewer USDA (lights, materials, render product)usd-authoring-and-materials.md
Publish to OVStage, render with ovrtx, live cameraovstage-render-and-camera.md, references/ovstage-runtime/README.md, references/ovstage-data-plane/README.md, references/ovrtx-rendering/README.md
Server-side streaming (RTX → WebRTC), BGRA convert, frame loopstreaming-cae-viewer.md, references/streaming-server/README.md, references/streaming-lifecycle/README.md
App-state fan-out controller (viz-only vs. inference-triggering)driving-cae-viz-via-ovstage.md, references/streaming-messages/README.md
React browser client + DOM controlsstreaming-cae-viewer.md, references/streaming-client/README.md, references/viewer-input-routing/README.md
Local (non-streamed) window variantovui-controls.md, references/ovui-local-viewer-recipe/README.md

Validate the generated app with a rendered hero frame, a connected streaming client, and a controlled representation change. Keep those artifacts with the generated app; do not cite or import unpublished local projects.

Parity / gaps to reach the full blueprint

The recreation above delivers the flagship look (car surface + speed-colored streamlines from a movable emitter, streamed to a browser) without a legacy application runtime or NIM. To reach full RTWT parity, in ascending effort:

  1. Colormap-domain lock — expose a fixed-vs-auto range toggle so the baked displayColor range does not rescale across frames/datasets (a locked range; RTWT locks the transfer-function domain so a config change is comparable). We already set a fixed percentile range at build; add the per-frame lock UI.

  2. Glyphs — author a UsdGeomPointInstancer (arrow/sphere prototype, positions from cell points, scales/orientations from a vector field). Mirrors CaeVizGlyphsAPI; pure USD, no new render path.

  3. Biplane / triplane slices — our slice is one plane per operator. Add a multi-plane widget (2–3 synchronized planes) to match RTWT's slice cross-sections.

  4. App-state fan-out controller (viz-only vs. inference-triggering) — formalize the split the streaming controller: a controller that routes viz-only commands to a cheap OVStage rebuild and reserves a separate "recompute fields" path. With pre-baked data the inference path just swaps the cached .npz; the routing is the parity item.

  5. Temporal playback — cache per-frame surfaces and lerp fields on time change for transient datasets (interpolation and timeline); RTWT plays flow evolution.

  6. NVIDIA IndeX volume rendering — RTWT's dense volumetric look requires a capability this skill package does not support. Do not create .nvdb, .vdb, .vti, or UsdVol assets as a substitute. Offer slices, iso-surfaces, points, glyphs, or streamlines when they meet the visualization goal; otherwise state that true volume rendering requires a different documented runtime.

  7. Live inference (only if wanted later) — reintroduce the DoMINO / AeroNIM surrogate as-is: a Triton client that sends car config + inlet velocity, receives a result in the surrogate's own data format, and a result cache keyed by the 16 config variants. This is reused as-is from the blueprint and is not the viewer's job — the viewer only consumes whatever field arrays the cache/inference hands it, identical to how it consumes the pre-baked .npz today. Wiring it turns "replay cached fields" back into "recompute on config change" with no change to the render/stream/controller path.

See Also

  • README.md — the CAE/CFD visualization family index and pipeline.

  • emitter-and-seed-sources.md — hex-lattice velocity volume + movable-emitter streamline seeding.

  • streaming-cae-viewer.md — server-side RTX → ovstream WebRTC → React browser client.

  • driving-cae-viz-via-ovstage.md — the app-state fan-out controller and OVStage data-plane commit path.

  • Blueprint mirror: github.com/NVIDIA-Omniverse-blueprints/digital-twins-for-fluid-simulation.

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs Python, Needs Node.js

The author says: Orchestrator skill. Downstream focused references may require NVIDIA GPUs, ovrtx, ovstream, ovui, OpenUSD, Python, Node/React, Tauri, Electron, C++, or cloud GPU deployment access depending on the selected viewer path.

Security

What our scanner noticed· Medium risk

  • Large base64-encoded blobs
  • Instructions that use the network

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
NVIDIA Omniverse
Publisher
NVIDIA (Official)
Source
NVIDIA/skills · skills/omniverse-realtime-viewer · commit fce3cca
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE-APACHE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by NVIDIA Omniverse or NVIDIA.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download omniverse-realtime-viewer.zip