Proposal: DisplayXR for Adobe Substance 3D Painter (dedicated 3D window rendered by Painter's own viewport renderer, Leia SR tested) #2437
joehillthunder
started this conversation in
Ideas
Replies: 2 comments
Hosting-readiness check: pass (2026-10-27)Installed runtime v2.55.0 with Leia SR plug-in 2.18.3, the default launcher, and a clean environment:
🤖 Generated with Claude Code |
0 replies
Final update: complete, nothing pending (2026-10-29)
Nothing else is open for Substance 3D Painter on our side. What would make it native is unchanged: a per-eye off-axis render into an app-owned texture, or a viewport draw-back hook plus the viewport rect for the texture target. |
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.
Substance 3D Painter has no OpenXR mode, and its plug-in API (Python 3.13 / PySide6) has no render or draw hook into its Vulkan viewport. So this integration uses the dedicated-3D-window class from the target-class comment on #2331:
dxrh_*core as MotionBuilder (Proposal: DisplayXR for Autodesk MotionBuilder (in its own viewer via the texture target; an in-process adapter on an app-neutral host core) #2423), Nuke (Proposal: DisplayXR for Foundry Nuke (3D in Nuke's own Viewer via the texture target; NDK node on the shared host core, Leia SR tested) #2433) and Houdini (Proposal: DisplayXR for SideFX Houdini (HDK adapter on the shared host core, dedicated 3D window; Leia SR tested) #2432).Code:
joehillthunder/displayxr-substance-painter@fd646d1(private, Apache-2.0 + NOTICE; every not-a-contract item incoupling.py; cgltf MIT in third_party).What it does
The eyes are rendered by Painter itself, with its own viewport renderer. For each eye, in one main-thread call, the plug-in:
A small DLL then reprojects each render into the eye's off-axis image (an exact homography) and submits the pair. The offscreen render uses a private function, kept behind the coupling module.
Live while painting: pairs re-render only when the eyes, the camera or the paint change (about 70 ms per pair here), so strokes show up in 3D as you paint.
Depth:
Input: mouse orbit, pan, dolly and frame in the 3D window, and an XInput pad, drive Painter's camera. Painter's own navigation drives the 3D.
Send to Omniverse (USD): Painter's glTF export written as Kit-layout USD (Y-up, cm, UsdPreviewSurface with base/ORM/normal, relative textures).
Measured
Tested display: Leia SR panel, runtime v2.55.0, Painter 12.2.0, Windows 11.
What would make this native
XR_DXR_win32_window_bindingv9), as Maya (Proposal: DisplayXR for Autodesk Maya (in-viewport Viewport 2.0 plug-in, Leia SR tested) #2390), MotionBuilder and Nuke do.Runtime finding
In-process sessions can silently fall back to sim-display, because the vendor plug-in's dependencies aren't found from some host processes: #2436.
Pending
🤖 Generated with Claude Code
All reactions