I've been prototyping an immersive environment following the WWDC26 session on immersive website environments: Blender scene → Website Environment add-on → USDZ with a RealityKit.CustomDockingRegion → model.requestImmersive() → dock a <video> via webkitEnterFullscreen(). The single-screen flow works really well.
The scene I actually want has two video surfaces — think a stage or gallery with two screens, where the visitor chooses which screen a video plays on, or ideally two different videos play at once. As far as I can tell the current design can't express this:
- The Blender add-on authors exactly one docking region per scene, and I can't find anything in the explainer, the session, or the demos that lets a page say which region a video should dock to when more than one exists.
- I authored a second
CustomDockingRegion by hand to see what would happen (minimal USDZ attached, ~5KB). Nothing defines what a UA should do with two — does the first win? The last? Is it undefined?
- Even with a targeting API, docking hangs off video fullscreen, and a document only ever has one fullscreen element — so two videos docked at the same time appear to be impossible by construction rather than just unimplemented.
This is the prim structure of the attached repro (two 1m screens, one region on each):
def Xform "Video_Dock"
{
quatf xformOp:orient = (0.7071068, 0.7071068, 0, 0)
def Xform "Player"
{
double3 xformOp:translate = (-1, 1, -2.94)
def RealityKitComponent "CustomDockingRegion"
{
token info:id = "RealityKit.CustomDockingRegion"
...
}
}
}
def Xform "Video_Dock_B"
{
quatf xformOp:orient = (0.7071068, 0.7071068, 0, 0)
def Xform "Player"
{
double3 xformOp:translate = (1, 1, -2.94)
def RealityKitComponent "CustomDockingRegion"
{
token info:id = "RealityKit.CustomDockingRegion"
...
}
}
}
two-docking-regions.zip
My current workaround is to ship one USDZ per docking target — identical geometry, different region — and swap the <model src> when the user changes target. It works, but it duplicates assets, drops the immersive session on every switch (exit + re-enter), and rules out simultaneous playback entirely.
What I'd love to see:
- Multiple named docking regions in the asset
- A way to target one from the page —
video.requestDocking('screen-left'), or a declarative association between a video element and a region name
- A position on whether more than one concurrently docked video is ever in scope. I understand the arguments for "one" (autoplay abuse, decode budget, media session semantics), but multi-screen scenes — galleries, sports multi-view, stage sets — feel like a natural use of an immersive environment.
Filing here rather than bugs.webkit.org since this reads to me as an API-shape question about the proposal rather than an implementation bug — happy to move it if that's wrong. Also happy to test the two-region file on device and report back what visionOS actually does with it, if that's useful.
I've been prototyping an immersive environment following the WWDC26 session on immersive website environments: Blender scene → Website Environment add-on → USDZ with a
RealityKit.CustomDockingRegion→model.requestImmersive()→ dock a<video>viawebkitEnterFullscreen(). The single-screen flow works really well.The scene I actually want has two video surfaces — think a stage or gallery with two screens, where the visitor chooses which screen a video plays on, or ideally two different videos play at once. As far as I can tell the current design can't express this:
CustomDockingRegionby hand to see what would happen (minimal USDZ attached, ~5KB). Nothing defines what a UA should do with two — does the first win? The last? Is it undefined?This is the prim structure of the attached repro (two 1m screens, one region on each):
two-docking-regions.zip
My current workaround is to ship one USDZ per docking target — identical geometry, different region — and swap the
<model src>when the user changes target. It works, but it duplicates assets, drops the immersive session on every switch (exit + re-enter), and rules out simultaneous playback entirely.What I'd love to see:
video.requestDocking('screen-left'), or a declarative association between a video element and a region nameFiling here rather than bugs.webkit.org since this reads to me as an API-shape question about the proposal rather than an implementation bug — happy to move it if that's wrong. Also happy to test the two-region file on device and report back what visionOS actually does with it, if that's useful.