Sly SonStudios

VR Deck

Calibration: putting the grid on the deck

Three touches on the deck's frame corners tell VR Deck where the deck is. The grid's size comes from the deck model, so the touches only have to be close. Nudge keys settle it from inside the headset, and the result is saved per deck.

  1. Before you start
  2. The three touches
  3. Fine-tune from inside the headset
  4. One calibration per deck
  5. What persists
  6. The one caveat: the tracking space
  7. Hide, show, cancel
  8. Motion rigs (advanced)

Before you start

  • SteamVR is running, the headset is on and tracked, and a controller is switched on. Its trigger confirms each touch.
  • Index, Vive and Touch controllers have a tip pose and a trigger binding, and Pimax Crystal controllers appear to SteamVR as Touch controllers, so they work the same way. Other controllers fall back to the raw controller pose plus an offset; if their trigger is not bound, you capture each point by tapping the VR Calibrate key instead. The companion log names each controller's type and binding state.
  • The VR Calibrate key turns blue and reads Calibrate once the companion is attached to SteamVR. Until then it shows the companion and SteamVR status instead.
Screenshot to addassets/img/vr-deck/shots/calibrate-01-key-blue.png
The VR Calibrate key in blue, reading Calibrate, once SteamVR is running.

The three touches

  1. Tap VR Calibrate. A card appears in front of you in the headset.

  2. Top-left corner. A small bullseye floats at the measured point of each controller: SteamVR's tip pose, near the nose of an Index controller, not your finger. Put that bullseye on the top-left corner of the deck's housing (the frame, not the first key), hold still for a moment, then pull the trigger, at whatever angle is comfortable. The position from a quarter of a second before the click is used, so the movement of the squeeze itself does not count.

    Screenshot to addassets/img/vr-deck/shots/calibrate-02-headset-card.png
    Headset mirror view: the calibration card and the bullseye at the controller tip, over the deck's top-left corner.
  3. Top-right corner. Same again.

  4. Bottom-left corner. The corners are easy to feel and far apart, which fixes the angle well.

  5. Done. The grid appears on the deck and the calibration is saved.

    Screenshot to addassets/img/vr-deck/shots/calibrate-03-grid-on-deck.png
    Headset mirror view after the third touch: the key grid sitting on the physical deck.

Why the touches only set where the grid is and how it is turned: the grid's size comes from the deck model, which VR Deck knows from the device type the Stream Deck app reports (20 mm square keys centred in the 118 × 84 mm housing of the MK.2). A controller tip lands a centimetre or so off its target, and a grid scaled from the touches would come out stretched. So the touches need to be close, not exact: the nudge keys do the rest.

To cancel a calibration in progress, hold VR Calibrate for 2 seconds. To redo one, tap it again: the new three touches replace the old entry.

Corsair Galleon 100 SD keyboard: calibrate on the keyboard's outer corners (top-left, top-right, bottom-left), far easier than the Stream Deck module's invisible edge. The module's position inside the keyboard is still a placeholder in VR Deck's table, so expect to nudge.

Fine-tune from inside the headset

Page 2 of either shipped profile is the Nudge page: fourteen VR Nudge keys, each moving the grid one way, plus Home.

  • Move left, right, up, down; lift and lower; spin and tilt each way; size + and −.
  • Steps: 2 mm, 1° or 2 % per press by default, adjustable per key in its inspector.
  • Hold to repeat: the first step on the press, then a step every 100 ms after 0.4 s. Inside a Multi Action a key makes one step.
  • Saved at once: every press is written to the calibration file immediately, and the headset shows a short card with the step applied.
  • The keys dim while the companion is offline, and alert without moving anything while nothing is calibrated.
  • On a deck other than the 15-key MK.2 and original, place single-adjustment VR Nudge keys yourself: the page keys need the 15-key layout.
Screenshot to addassets/img/vr-deck/shots/calibrate-04-nudge-page.png
The Nudge page (page 2) on the deck: fourteen adjustment keys and Home.
Screenshot to addassets/img/vr-deck/shots/calibrate-05-nudge-card.png
Headset mirror view of a nudge in progress: the grid and the HUD card with the step just applied.

One calibration per deck

  • The calibration file holds one entry per deck, stored by the deck's device id. Switching decks switches calibrations, and a deck that has none shows not calibrated until it gets its three touches.
  • With VR Deck keys on two connected decks, the deck you last pressed a VR Deck key on is the active one: Calibrate, Nudge and Size act on the deck they were pressed on.
  • A deck of the same type as a calibrated one borrows that deck's calibration until it has its own; the first nudge on it makes a copy under its own id, so the other deck's calibration is never changed from the borrowing deck.
  • With two calibrated decks connected and nothing else deciding, the overlay follows the deck calibrated last.

What persists

Every deck calibration is stored in %LOCALAPPDATA%\VRDeck\calibration.json, one entry per deck, and loaded at every companion start. Nudges and size changes are saved the moment they are made. Nothing has to be redone after a PC restart as such.

Within a session the overlay also stays on the deck through a recenter. New calibrations are stored in SteamVR's raw tracking frame, which SteamVR's own recenters and room setup do not touch; and when the tracking itself is re-zeroed (a Pimax reset in inside-out mode does that silently), the companion notices every tracked pose jump by the same amount between two ticks and moves the saved pose along with it. The headset shows a short card, Recenter detected: deck overlay kept in place. More on both kinds of recenter on the Pimax page.

The one caveat: the headset's tracking space

The overlay lands on the physical deck only when SteamVR's tracking space comes back where it was.

  • Base-station tracking (Index, Vive, Pimax lighthouse) is fixed by the stations: good day after day.
  • Inside-out tracking (Pimax Crystal in inside-out mode, Quest over Link or Virtual Desktop, Steam Frame) rebuilds its map at power-on. When the room is recognised, the origin comes back and everything is in place. When it is not, the whole space shifts a little and the stored pose is off by that shift. Then it is a nudge or a fresh calibration.
  • Switching between base-station and inside-out tracking is a different space: calibrate once per tracking mode.

After a cold start, look at the deck before you touch anything. If the grid is on it, there is nothing to do. If it drifted, nudge it back with a few presses on the Nudge page, or tap VR Calibrate and touch the three corners again; either takes seconds.

If it drifts at every cold start on an inside-out headset, try the other tracking space: quit the Stream Deck app from its tray icon (closing the window only hides it), set "universe": "standing" in %LOCALAPPDATA%\VRDeck\settings.json, start the app again, calibrate once, and see whether the grid is still on the deck after the next cold start. The standing space is tied to the runtime's room map and may come back more reliably; which space serves inside-out headsets best is still being tested, which is why the default is raw.

Hide, show, cancel

  • VR Show/Hide switches the overlay on and off in the headset. The calibration is kept, so a deck that has not moved comes back where it was. The key reads ON or OFF, or says why there is nothing to show (SteamVR off, not calibrated).
  • Cancel a calibration in progress by holding VR Calibrate for 2 seconds.
  • No deck connected: the companion hides the overlay until a deck is back.

Motion rigs (advanced)

  • With motion compensation (OVRMC) the compensated world is the rig, so the default setting is right and the overlay stays on the deck while the rig moves. (Not yet tested with OVRMC.)
  • Without compensation, set "anchor": "device" (and optionally "anchorSerial") in settings.json before calibrating: the pose is then stored relative to that tracked device, for example a tracker strapped to the rig, and follows it.

Screenshots this page needs

Save each capture under assets/img/vr-deck/shots/ with the file name given, then replace the matching placeholder with the <img> tag written in the HTML comment next to it. Headset shots: SteamVR's mirror view or a headset recording.

  1. calibrate-01-key-blue.png: The VR Calibrate key in blue, reading Calibrate, once SteamVR is running.
  2. calibrate-02-headset-card.png: Headset mirror view: the calibration card and the bullseye at the controller tip, over the deck's top-left corner.
  3. calibrate-03-grid-on-deck.png: Headset mirror view after the third touch: the key grid sitting on the physical deck.
  4. calibrate-04-nudge-page.png: The Nudge page (page 2) on the deck: fourteen adjustment keys and Home.
  5. calibrate-05-nudge-card.png: Headset mirror view of a nudge in progress: the grid and the HUD card with the step just applied.