Proposal: DisplayXR for Blender (World Builder add-on: own-viewport 3D, measurements, host-library needs; Leia SR tested) #2397
Replies: 1 comment
|
Following up with a result. Woven 3D now runs inside Blender's own 3D View and inside USD Composer's own viewport, with no overlay window. The app keeps its input and presents its own pixels. I checked both seated at a Leia SR panel. How it works: the app renders two off-axis eyes into textures it owns and hands one D3D11 shared texture to the runtime through the
The runtime side is on main: #2373 (texture target), #2379 (windowless weave), #2380 (the hub weaves texture sessions). Correct phase inside a sub-rect of the window needs the Leia plug-in's windowless path, DisplayXR/displayxr-leia-plugin#450. That PR is open; until it ships, the released plug-in phases the weave from the window origin. Measured:
On your Kit black-frame finding: it's the same root cause. Kit drops a frustum that doesn't contain the view axis. The prototype works around it with a frustum that contains the axis, cropped back to the true off-axis frustum. A view-centered frustum option on Kit's side would remove the crop. |
Uh oh!
There was an error while loading. Please reload this page.
Summary
Blender's built-in OpenXR session (OpenGL), driven by a Blender add-on, shows a world map or region in 3D on the tested display (Leia SR). It runs inside Blender's own 3D Viewport, beside other 3D apps. The pattern matches the architecture direction:
The overlay embed (#2332) and its window properties are test scaffolding here. The target class for Blender is own viewport through an add-on, and texture mode is reachable: Blender's Python can render each eye offscreen (
gpu.types.GPUOffScreen) and draw a texture into the viewport with a draw handler.What it does (Blender 5.2.2, Windows 11, dev runtime
local/test-buildv2.53.0-24)DXR_LEGACY_CAMERA_RIGbefore every session (Blender creates a new OpenXR instance per session): convergence at the nominal viewer distance, and a vertical FOV from the 3D view's own physical height (1:1). Absolute tracking. The base pose puts the glass centre at the stage origin, with the eye at the nominal viewer.displayxr-cli status --json). The budget itself is a constant in the add-on's coupling module until display info publishes one (Display info: publish the comfort budget (front/behind disparity limits), e.g. layout.comfort {front_frac, behind_frac} #2388).Measurements
What a shared host library would need, from this adapter
Open
XR_KHR_opengl_enable) legacy apps — VTK-based ParaView / 3D Slicer, Blender VR #2354).Related: #2330 (legacy profile), #2332 (overlay embed, test scaffolding), #2388 (comfort budget in display info).
🤖 Generated with Claude Code
All reactions