Proposal: DisplayXR for Adobe Substance 3D Sampler (live material in a dedicated 3D window, Leia SR tested) #2438
joehillthunder
started this conversation in
Ideas
Replies: 2 comments
|
Seated check (2026-10-27): comfortable at the default depth (100 %). The hosting-readiness check on the installed runtime follows. 🤖 Generated with Claude Code |
0 replies
Readiness on the released runtime: Pass (2026-10-28)Installed runtime v2.57.1 with the Leia SR plug-in 2.19.1, started from the default launcher (
|
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.
Follows the outline of Discussion #2397.
Summary
Substance 3D Sampler turns photos and scans into PBR materials. A Sampler plug-in,
DisplayXR, live-exports the selected material, and a small DisplayXR window beside
Sampler shows it as a real-size relief swatch in glasses-free 3D. The window follows
edits: change a parameter in Sampler and the 3D view updates a few seconds later.
The same export also feeds USD (Omniverse) and glb (Substance 3D Modeler).
Sampler's plug-in API has no viewport hook, so this is a dedicated 3D window rather
than 3D inside Sampler's own viewport. The last section lists the hook that would
allow the in-viewport path.
What it does
edits), Export full resolution (maps + .sbsar).
1.5 s. On a change, the material is exported (PNG, 2K, 16-bit height/normal) into an
inbox folder and swapped in atomically, with a provenance sidecar carrying the
real size.
viewer/sampler3d.py): a DisplayXR texture-target window, so itweaves windowed beside Sampler and other 3D apps. It renders relief from the height
map with a key light and shadow, using the material view from the Substance 3D
Designer integration.
stage (UsdPreviewSurface + OmniPBR) and a glb.
Measurements
eye images differ. One live edit (Geometry Details 0.5 → 1.0) took 13 s to export at
2K, and the window reloaded under 0.5 s after the export landed. Sampler and the
window both stayed responsive.
+0.16 % behind, within budget with no push-back.
resolve, OmniPBR binds, DirectX normals render the right way up. USD Composer in 3D
reloaded a live re-export in about 1 s.
same 16 GB GPU. The second loss hung Kit as well; displayxr-service survived. Sampler
beside the 3D window above ran without problems.
What a shared host library needs
material maps from files, set relief and real size, and present into a
caller-owned window rectangle. This window reuses the Designer integration's
bindings as-is; a shared library would remove the cross-repo import.
and behaves the same.
In Sampler it's an app preference, not an export option.
Open items
viewport camera, including an off-axis projection, render it into a caller-owned
shared texture (D3D11 or Vulkan), and report the viewport's screen rectangle.
Sampler's viewport is Hydra (hdEclair) on Vulkan; its Python API reaches assets,
layers, filters and export only.
resolution needs F11.
Notes for plug-in authors (Sampler 6.0.4)
wait_for_computation()deadlocks on the UI thread. Step jobs as generators on aQt timer, and finish exports through an
ExportControllersubclass.Asset.resourcedoesn't change on parameter edits; hash the layer stack instead..ssaon the command line) before asset calls.Repo:
displayxr-substance-sampler(Apache-2.0). Tested with Sampler 6.0.4 andDisplayXR runtime v2.55.0.
🤖 Generated with Claude Code
All reactions