Proposal: DisplayXR for Autodesk MotionBuilder (in its own viewer via the texture target; an in-process adapter on an app-neutral host core) #2423
Replies: 3 comments
Final update (2026-10-26)Seated check. On the Leia SR panel, with 3D inside MotionBuilder's own viewer (texture target, runtime v2.55.0, LeiaSR 1.38 → anchor fallback 0x2, woven at the viewer rect): "comfortable, looks good." Fixed since the post (all measured on sim-display; code
Shared host core. The Nuke adapter has adopted the same core byte-for-byte (apart from app names), including the framing fix and a shutdown fix from the Houdini adapter (request exit, end on STOPPING). That supports the shared-host-library direction: one app-neutral core, with thin per-app adapters. Still open:
Related: #2421 (atlas trigger in texture mode), #2422 (rig framing), #2386 (pacing). 🤖 Generated with Claude Code |
Update: fly-through comfortThe seated check on the new demo set found that flying through objects was uncomfortable. The cause: the framing pull-back (the #2422 workaround) also moved the eyes' near plane back, so the eyes kept drawing what the app camera had already flown past, far in front of the comfort limit. Fix (commit
Measured (sim-display, depth 100 %, 12 scripted camera stops: toward the wall, inside a barrier, between crates, then 60 → 20 → 5 cm from a brick wall):
For other adapters: any adapter that pulls the eyes back to keep the app's framing must move the eye near plane with them, and should test with a scripted fly-through. A seated recheck on the panel is next. 🤖 Generated with Claude Code |
Hosting-readiness check: pass (2026-10-27)Leia SR panel, installed runtime v2.55.0 with the leia-sr plug-in 2.18.3, default launcher:
Fly-through: a scripted run of 12 stops through the demo set (inside a barrier, between crates, up to a brick wall), with the eye near plane following the framing pull-back and exact frustum depth:
Exit: clean. The session went STOPPING → destroyed, the panel switched back to 2D, and the weaver was released, with no errors. Not exercised in this unattended run:
The ~0.2 % measured-vs-predicted residual stays open until a released runtime includes #2426. 🤖 Generated with Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
MotionBuilder has no OpenXR mode, so it runs through a thin Open Reality SDK plug-in:
XR_DXR_win32_window_bindingv9 (texture target).Nothing covers the app: its menus, tooltips, manipulators and mouse stay its own. Status text reads "3D active".
Code:
joehillthunder/displayxr-motionbuilder@d53d68f(private, Apache-2.0 + NOTICE; internals insrc/core/coupling.handsrc/mobu/coupling.h).What it does
WGL_NV_DX_interop2and drawn 1:1 into the viewer./WorlddefaultPrim, UsdPreviewSurface), using MotionBuilder's bundled OpenUSD 0.25.11.Display values come from display info (panel size, nominal viewer). The comfort budget is still a constant (0.14 % front / 0.42 % behind of panel width), pending #2388.
Measured
What a shared host library would need, from this adapter
dxrh_start,dxrh_start_in_viewport,dxrh_set_target,dxrh_texture_info); eye hand-off with a serial, so frames are decoupled from the host's render rate; input and pad; and the shared slider's comfort clamp. It's shared with the Nuke adapter and reusable by Houdini.Runtime findings
Open
🤖 Generated with Claude Code
All reactions