Proposal: what 21 app integrations need from the shared host library (comfort budget in display info, texture hand-off per API, and a map of every per-app post) #2442
joehillthunder
started this conversation in
Ideas
Replies: 2 comments
0 replies
Status for the Desktop apps table on displayxr.org (2026-10-29)Every row on https://displayxr.org/platform-support#desktop-apps now has a seated check on a released runtime posted on its proposal. Results are reported as Pass / Fail with conditions.
Thanks for #53 (Isaac Sim and Instant-NGP added; nine rows moved). Still to move: Houdini, VRED, Twinmotion and Modeler, each with a seated Pass on a released runtime above. SpAItial Echo-3 worlds (#2465) is content in the DisplayXR Browser with a seated Pass, if it belongs on the page. @dfattal, two asks:
|
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
This post brings together what the 21 integrations below need from the planned shared host library, and links every per-app proposal. All of them follow the same pattern:
the XR rig is pinned to the app's own camera;
a true-geometry rig is fitted to the display;
depth is held inside the comfort budget;
the app's own UI and input stay its own.
Each one is classed as own viewport (texture mode) or dedicated 3D window, per the target-class comment on #2331. Leia SR is the tested display throughout.
1. The one runtime ask every adapter shares: the comfort budget in display info (#2388)
Panel size and nominal viewing distance already come from display info. But every adapter still hard-codes the front and behind disparity limits (0.14 % / 0.42 % of panel width on the tested display), so none of them carries over to another DisplayXR display. Publishing
layout.comfort { front_frac, behind_frac }from the vendor plug-in turns each adapter's constant into a one-line swap.Evidence that the strength has to be fitted to content against that budget, not a fixed constant: #2385 (a closed app needs 0.1 for its own content and 0.3 for imports), CLO (#2434: 100 % = budget, seated Pass, 125–150 % shows crosstalk), and Kit's frame-selection overshooting the behind budget (#2435).
2. What the host library needs to provide (merged from the per-app lists)
| Need | Asked by |
|---|---|
| Texture hand-off per graphics API. D3D11 exists (v9 texture target). Also needed: GL (
WGL_NV_DX_interop2), Vulkan (VK_KHR_external_memory_win32; Houdini 22's viewport is Vulkan-only) and D3D12 sub-rect phase (#2382) | Slicer, ParaView, Blender, MotionBuilder, Nuke, Houdini, Omniverse, Maya || Self-pacing for texture sessions:
xrWaitFramedoesn't pace them (#2386) | MotionBuilder, Nuke || A frame hand-off decoupled from the host's render rate: an eye pair plus the eyes it was rendered from (serial/ack). The shared
dxrh_*core already does this and is a candidate seed | MotionBuilder, Nuke, Houdini, offline renderers (#2392) || External OpenXR apps, not only in-process adapters (VRED, Twinmotion, Substance Modeler), with per-process rig seeding from display info before
xrCreateSession, and window placement (whole client, dock/undock, second monitor, F11) | VRED, Twinmotion, Modeler || App-framed rigs without the eye drift (#2422), and the eye near plane following the pull-back, so fly-throughs stay inside the budget | MotionBuilder, Maya, Nuke |
| A view-centred frustum option for renderers that drop off-axis frusta (Kit) | Omniverse |
| Focus as a glass shift at constant K, with the app passing its scene depth to the comfort clamp (#2385) | ParaView, Slicer |
| The adapter owns navigation: no runtime fly camera or emulated controllers for camera-pinned apps; per-app pad mapping; mouse-as-tracked-hand from the final views for closed VR apps | ParaView, Slicer, Modeler, Twinmotion, VRED |
| Live depth and focus as an API, relative to the app's nominal, replacing the window-property scaffolding (#2350) | all |
| "Place this content" / "frame this prim": a glass and push-back solve from bounds + camera + view rect | Stability (#2391), KitBash3D (#2435), materials (#2419) |
| Capture for measurement that works in texture mode (#2421), per instance (#2351), and with no viewer seated (#2384) | all measurement work |
| A rect publisher per UI toolkit (Qt widget → device-pixel rect), including a fractional-DPI rule | Slicer, ParaView, MotionBuilder |
3. The web route (DisplayXR Browser)
For apps with scripting and export but no draw hook (e.g. CLO, #2434), a page plus a plug-in works today. To make it a supported path:
an opaque clear colour for display-rig eye cameras (displayxr-web#198);
a fit-to-budget helper that follows zoom (displayxr-web#200);
splat orbit style (displayxr-web#199);
local page + live-folder access (displayxr-browser#203).
4. Per-app proposals
| App | Class | Post |
|---|---|---|
| NVIDIA Omniverse (USD Composer) | Own viewport (design); windowed today | #2331 |
| 3D Slicer | Own viewport (VTK texture hand-off) | #2352 |
| ParaView (+ Glance in the browser) | Own viewport (VTK texture hand-off) | #2360 |
| Blender | Own viewport (add-on) | #2397 |
| Autodesk Maya | Own viewport (texture target, running on v2.55.0) | #2390 |
| Autodesk MotionBuilder | Own viewer (texture target) | #2423 |
| Foundry Nuke | Own Viewer (texture target) | #2433 |
| SideFX Houdini | Dedicated 3D window (Vulkan hand-off needed for in-viewport) | #2432 |
| Autodesk VRED | Dedicated 3D window (external OpenXR app) | #2383 |
| Twinmotion | Dedicated 3D window (whole client) | #2389 |
| Adobe Substance 3D Modeler | Dedicated 3D window (closed legacy OpenXR app) | #2394 |
| Adobe Substance 3D Painter | Dedicated 3D window (Painter-rendered eyes); complete (2026-10-29) | #2437 |
| Adobe Substance 3D Sampler | Dedicated 3D window (live material) | #2438 |
| Adobe Substance 3D Designer | Own dock panel (texture target, own material view) | #2439 |
| CLO Virtual Fashion | Dedicated 3D window (DisplayXR Browser page) | #2434 |
| Sketchfab | Browser (WebXR today; inline-3D wall next) | #2441 |
| Off-the-shelf OpenXR apps (survey) | Hosted legacy / per app | #2440 |
| Offline / path-traced renderers | Dedicated 3D window (stereo pair player) | #2392 |
| NVIDIA Isaac Sim | Kit app: 3D Display XR mode via the Omniverse extension | #2463 |
| NVIDIA Instant-NGP | Own window (texture target, NeRF) | #2464 |
| SpAItial Echo-3 worlds | Content: streamed splats in the DisplayXR Browser | #2465 |
| Generated 3D content (image→3D) | Content in host views | #2391 |
| Measured materials (scanners) | Content in host views | #2419 |
| KitBash3D kits | Content in host views | #2435 |
5. Runtime issues filed from this work
#2384 · #2385 · #2386 · #2387 · #2388 · #2393 (fixed in v2.55.0) · #2395 · #2396 · #2421 · #2422 · #2430 · #2436 · draft PR #2429 (GL depth formats; unblocks Godot 4)
🤖 Generated with Claude Code
All reactions