Skip to content

Display Walls

CommercialBeta

Included in the public demo Compare editions

A DisplayWall turns an LED wall, a powerwall or a projector into a window onto the twin. You measure the physical wall once. The viewer then renders the model so that it appears to stand behind that window, from each viewer’s tracked eye position. One output canvas can carry a stereo pair for one person, stereo pairs for two people, or separate views for up to eight areas.

Display walls, stereo output and Flystick control are part of realvirtual Commercial as a Beta (since 6.6.0).

PartPurpose
Output PC with Chrome or EdgeRuns the viewer in fullscreen on the wall’s input; WebGL required
Wall, TV or projectorReceives one image at the configured canvas size and shows its areas to the right eyes or people
Stereo glassesOnly for stereo layouts; their type follows the display, not the viewer
Tracking system (optional)ART DTrack or OptiTrack Motive, received by CONNECT; without tracking every area uses a fixed SweetSpot
ART Flystick (optional)Pointing, selecting, moving parts and flying through the model; DTrack only
SpaceMouse (optional)Navigation at the wall; see 3D mouse (SpaceMouse)

The viewer draws all areas into one browser canvas, by default 3840 × 2160 px. It does not output frame-sequential (quad-buffer) stereo itself. The wall controller, LED processor or projector must take the eye images as areas of one input image and present them in its own stereo mode, for example side by side or in quadrants. Ask the display supplier which input layout and resolution the controller expects for each eye, then match the viewports to it.

An internal measurement on the demo model gives a starting point. A Ryzen 9 9950X with an RTX 5060 Ti rendered four viewports into a 3840 × 2160 px buffer at 105 FPS without VSync. The median frame time was 9.2 ms, and the 95th percentile 11.9 ms. Rendering was CPU-bound, and each additional area added about 2 ms.

TargetResult on the measured machine
60 Hz, four areas, 4K bufferReached, with about 7.5 ms median reserve per frame
120 Hz active stereo, four areasNot reached; one frame may take at most 8.3 ms
Two areas (one stereo pair), buffer of about 1080p195 FPS

The test used a simulated fullscreen adapter, not physical 4K wall output. Use a discrete midrange GPU and a CPU with strong single-thread performance as a starting point. Measure your own model on the output PC, especially with larger models or more than four areas.

The wall is a DisplayWall component on a node in the project or layout document, so it is saved and delivered with the project. Each output area is a WallViewport and each tracked controller a WallFlystick, both as child nodes of the wall. Create the wall in one of two ways:

  • Settings ▸ Stereo 3D ▸ Display wall — open the project in the editor, choose a Wall template and, optionally, a Tracking source (the CONNECT interface, for example dtrack), then click Create display wall. This adds a root node Display wall with the template’s viewports as one undoable step. With a tracking source, every viewport’s signal slots are filled from its body (see Connect head tracking). Signals that do not exist yet are listed under Not found; the wall is created anyway and those slots stay empty. Outside the editor, or while the document is busy with another edit, the button is disabled and shows the reason.
  • Inspector — add a DisplayWall component to any node of your project or layout document, then add viewports and Flysticks in its editor.

Once a wall exists, the Display wall section of the Stereo 3D tab shows the same editor as the inspector, the wall’s state (Off, Requested or Active), the tracking status of each viewport and the start and stop buttons. Show in inspector closes the settings and selects the wall node. Layout locks apply here as in the inspector. With several walls in the scene, choose one under Wall.

The node places the wall in the model; the corner coordinates describe the physical wall in the tracking coordinate system.

  1. Measure the lower-left, lower-right and upper-left corners of the visible image area as seen from the audience side. Enter CornerLowerLeft, CornerLowerRight and CornerUpperLeft in millimetres, using CONNECT’s right-handed, Y-up tracking coordinates.
  2. Check that the two wall edges form a right angle within ±2°. Collinear corners and invalid values are marked in the inspector and prevent output from starting.
  3. Set ModelScale to the model-to-physical-space ratio 1:N. The default is 1; increasing N makes the measured wall and head movements span more model space. The allowed range is 0.001–10000.
  4. Set CanvasWidth and CanvasHeight to the wall controller’s input resolution. Defaults are 3840 × 2160 px; each dimension accepts whole numbers from 320 to 16384.
  5. Set SweetSpot to a fallback head position in the same tracking coordinates. Its default is (0, 1350, 2500) mm. It is a stored position, so update it when you change the measured wall.

The example corner defaults are (-2400, 0, 0), (2400, 0, 0) and (-2400, 2700, 0) mm. Replace these with your measurements. Near is the minimum eye distance from the wall plane, default 0.05 m, range 0.01–1 m.

Each WallViewport projects the full measured wall from its assigned eye into its own rectangle of the canvas. The wall draws its viewports in the order of its child nodes. The templates replace the wall’s viewport children; the canvas size stays as configured.

TemplateViewportsFilled from (with a tracking source)
2 images stereoLeft and right eye, each half the canvas widthbody 1
4 people2 × 2 grid of Center-eye views, one per personbodies 1 to 4
2 people stereo2 × 2 grid; each row is one person, left eye on the left, right eye on the rightbody 1 (top row), body 2 (bottom row)
Projector 4K stereo (top quadrants)Left eye top-left, right eye top-right, each a quarter of the canvas (Full HD at 3840 × 2160); the bottom half stays unusedbody 1

In the wall’s editor the templates are buttons, for example Template: 2 people stereo; each replaces the current viewports. Canvas previews the arrangement. Use Add, Remove, Up and Down to edit the list of viewport children, and Edit slots to open a viewport’s component in the inspector. At most eight viewports are allowed. A wall without any viewport draws one full-canvas view from the SweetSpot.

Template 2 people stereo: canvas areas and eye positions The canvas is divided into four quadrants: person 1 left and right eye in the top row, person 2 left and right eye in the bottom row. Seen from above, two tracked people stand in front of the measured wall; each eye of each person sees the whole wall through its own projection. Person 1 left eye Person 1 right eye Person 2 left eye Person 2 right eye Canvas, e.g. 3840 × 2160 px One image to the wall controller Measured wall (top view) Person 1 dtrack.body1 Person 2 dtrack.body2
Each eye sees the whole wall from its own tracked position; the canvas carries one area per eye.
FieldDefaultMeaning
LabelPerson 1 for the initial viewportName shown in the preview and tracking status
Rect (0–1)x=0, y=0, w=1, h=1Normalized canvas rectangle, with x/y measured from the upper-left; w/h must be positive, rectangles must fit inside the canvas and cannot overlap
EyeCenterLeft, Right or Center; Center gives one view without left/right eye separation
PosX, PosY, PosZNot connectedSignal slots for the tracked position in mm
QuatX, QuatY, QuatZ, QuatWNot connectedSignal slots for the tracked orientation
ValidNot connectedSignal slot that reports a valid pose
FrameNot connectedSignal slot of the tracking heartbeat, for example dtrack.frame
EyeOffset(0, -30, -80) mmOffset from the tracked body to the eye centre, rotated with the tracked orientation
EyeSeparation64 mm0–200 mm; separation for Left and Right eyes
TimeoutMs500 ms50–10000 ms; maximum time without a changed heartbeat before fallback
Smoothing0.30–0.95; higher values smooth head motion more, 0 applies it directly

Match the rectangles to the way the wall controller distributes the input image to eyes and people. The left and right viewports of one person connect to the same body and differ only in Eye.

Set up an ART DTrack or OptiTrack NatNet interface in CONNECT and connect the viewer to that gateway, so its tracking signals are available. Tracking is then an interface like any other: each value a viewport reads is a signal slot, connected to a signal the same way as any component slot — drag a signal onto the slot or pick it from the list. A slot that is not connected is simply empty; the viewer never guesses a signal from a name.

Tracking signal flow from the tracking system to the display wall ART or OptiTrack sends UDP tracking data to CONNECT through a DTrack or NatNet interface. CONNECT publishes pose, validity, frame and Flystick signals. The viewports and Flysticks of the wall read them through their signal slots. Tracking system ART / OptiTrack UDP CONNECT DTrack / NatNet Y up, mm Signals body, fly, frame pose + valid Wall Viewport slots Flystick slots Each viewport and Flystick connects its own slots.
Tracking data reaches the wall through ordinary CONNECT signals and signal slots.

Connecting nine slots by hand is error-prone. Fill from body in a viewport’s row connects them in one step:

  1. Choose the Pose group, for example dtrack.body1. The list offers every signal group that carries an orientation (.qw).
  2. Choose the Heartbeat signal, for example dtrack.frame.
  3. Click Fill from body.

The position, orientation and valid slots are connected to the group’s .x, .y, .z, .qx, .qy, .qz, .qw and .valid signals, the Frame slot to the heartbeat you chose. The whole fill is one undo step. A signal that does not exist is listed under Not found (slot left as is); that slot keeps its previous connection. The same fill is available to automation as the command wall.fillFromBody.

A stationary head stays fresh while the heartbeat changes. A missing heartbeat, an invalid pose, unconnected pose slots or a timed-out heartbeat make that viewport fall back to SweetSpot.

During a simulation pause, live signal values do not reach the viewer. The wall therefore holds the last pose of each viewport and shows the state paused instead of falling back to the sweet spot after the timeout. After the simulation resumes, the heartbeat timeout applies again. Flysticks behave the same: their navigation stops, and no click, grab or navigation switch is triggered by button presses made during the pause.

Earlier versions of the wall configured viewports and Flysticks through signal prefixes. Such a wall still opens: its viewport geometry is kept and shown from the SweetSpot, its Flysticks are inactive, and the Problems panel reports Display wall tracking prefix ignored. Recreate the viewports with a template or Add, then connect their slots, for example with Fill from body.

Only the generated tracking signals count towards the CONNECT licence: one heartbeat plus the fields of the configured bodies and Flysticks. See Tracking signals and coordinates.

Frame the model as required, then click Preview to check the areas on an ordinary monitor. The preview fits the configured canvas aspect ratio into the available space and labels the areas with their tracking state. It does not require fullscreen.

Click Start wall (fullscreen) for output at the configured canvas resolution. If the browser provides screen information, the viewer looks for a screen of that size, preferring a secondary display. Otherwise it uses fullscreen on the current display.

  • ?wall=1 requests wall output and shows Start wall (fullscreen) and Preview; it waits for a user gesture.
  • ?wall-preview requests a preview, which starts when a DisplayWall is available.
  • W starts or stops a wall when a DisplayWall exists and first-person navigation is inactive. F or Esc stops active wall output. Shortcuts are ignored in text fields and with Ctrl, Cmd or Alt.
  • Stop wall stops the output. Editing the configuration while output is active stops it; start again to apply the changes.

Add a WallFlystick (up to four) for each tracked controller under Flysticks in the wall’s editor and connect its slots, most easily with Fill from body: choose the Flystick’s pose group (for example dtrack.fly1), the heartbeat signal and, for the buttons, the signals for Select (press counter), Grab (held) and optionally Nav mode (press counter), plus Joystick X and Joystick Y. Flysticks work while the wall output or its preview is active. In CONNECT, FlystickCount must cover the controller you use: dtrack.fly3 needs a FlystickCount of at least 3.

  • Point — the Flystick casts a ray from its tracked pose. The object it points at is highlighted like a mouse hover; no ray is drawn. RayLength limits the ray. PointAxis sets the axis of the Flystick body that the ray follows.
  • Select — each new press on the SelectCount signal clicks the highlighted object, which selects it or triggers a clickable component. Every press counts once, even a very short one; holding does not repeat.
  • Grab — in Commissioning mode, hold the button connected to GrabHeld on a movable unit (MU) to move it along the ray, and release it to drop the MU. The same rules apply as for dragging with the mouse.
  • Fly — JoyX and JoyY move the view through the SpaceMouse navigation. JoystickDeadZone ignores small deflections. A press on NavCount switches between Orbit and Fly.
FieldDefaultMeaning
PosX … QuatW, Valid, FrameNot connectedThe nine pose slots, as for a viewport; without them the Flystick is inactive
SelectCountNot connectedPress counter of the select button (Int)
GrabHeldNot connectedState of the grab button while held (Bool)
NavCountNot connectedPress counter of the Orbit / Fly button (Int); optional
JoyX, JoyYNot connectedJoystick axes (Float)
TimeoutMs300 ms50–5000 ms; maximum time without a changed heartbeat before the Flystick counts as lost
RayLength50000 mm1000–1000000 mm in tracking space; scaled with ModelScale like the wall
JoystickDeadZone10 %0–50 %
PointAxis−Z−Z, +Z, −Y, +Y, −X or +X of the Flystick’s own frame

A button signal connected to two of SelectCount, GrabHeld and NavCount is marked red on the affected slot rows (same signal as …) and in the wall’s Flystick list, and prevents the wall from starting. If the highlight does not follow the direction the Flystick points in, aim it at a known target on site and choose the PointAxis that hits it.

With several Flysticks, one points, selects and grabs at a time: the last one whose button was pressed. Every Flystick can fly. While one holds an MU, the others cannot take over.

A Flystick is lost when valid is off or its heartbeat is older than TimeoutMs. A held MU is then put back where the grab started, the highlight disappears and the Flystick’s navigation stops. When it returns, nothing is clicked or grabbed automatically; release a held grab button once before grabbing again. Stopping the wall output does the same for every Flystick before the mouse controls return.

Each viewport’s Tracking line shows whether its slots are connected (Tracking slots, Frame slot empty or Sweet spot), its state, the heartbeat age and the connected heartbeat signal:

StateMeaning
freshA valid head pose and a recent, changing heartbeat are available
pausedThe simulation is paused; the last pose is held
sweet spotThe configured fallback position is being used
too closeThe eye is closer to the wall plane than Near, or behind it; its rendered position is clamped to Near

Output size mismatch (outputMismatch) reports the expected canvas dimensions and actual displayed dimensions. Output continues at the configured buffer size. Check the selected display and output sizing before using it on the wall.

  • Wall output requires WebGL, a perspective camera and the standard viewer render backend. Stop XR, stereo output and first-person navigation before starting a wall.
  • Mouse camera controls are disabled during wall output. Pointing, selecting and grabbing with the mouse also stay disabled; use a Flystick instead. SpaceMouse navigation can move the view.
  • Picking by mouse within individual areas and a 3D cursor at the Flystick’s hit point are not available yet.
  • Post-processing such as ambient occlusion and bloom is bypassed. Screenshots and video captures remain mono.
  • NatNet provides head poses only; Flysticks require ART DTrack.
  • The axis conventions of DTrack and NatNet have so far been tested with simulated data only. Check them on site with a tracked target before the first presentation.

A wall usually runs in a fixed installation, such as a powerwall or a projection room, on an output PC that stays on the plant network. For hosting the viewer there and the licence terms of a delivered installation, see Deployment Options, Licensing the Viewer and Appliance.