VR Beta OpenVR Limitations & Observations On this page
OpenVR Limitations & Observations Floatiness in OpenVR
The observed "floatiness" of overlays in OpenVR is not an implementation issue on our end. Overlays are correctly submitted as world-locked.
The behavior is dependent on SteamVR and the specific OpenVR driver used.
There is no further scope for improvement within the OpenVR API constraints.
Underlying API Limitations
OpenVR lacks proper support for mixing head-locked and world-locked composition layers .
More performant OpenVR drivers tend to experience worse world-locked behavior due to how SteamVR handles composition.
Driver-Level Behavior
SteamVR-native headsets (e.g., Valve Index, BigScreen Beyond) handle world-locked overlays better than other headsets.
High-performance OpenVR drivers often opt to let the headset manufacturer’s compositor handle final rendering, resulting in:
Single image per eye submission
SteamVR being unable to enforce world-locked overlays properly
A forced choice between all overlays being head-locked or all being world-locked , degrading quality.
Comparison to OpenXR
Unlike OpenVR, OpenXR allows per-layer tracking space definitions via XrCompositionLayerQuad::space
.
The legacy Oculus API (used by SteamVR for Quest/Rift headsets) enforces a single tracking origin for all layers.
This forces SteamVR to either convert world-locked overlays to head-locked or vice versa , leading to precision issues.
Key Takeaways
useWorldLockedPositions
has no effect on OpenVR.
OpenVR's limitations make OpenXR the preferred API for world-locked overlays.
Users experiencing overlay jitter or floatiness should consider switching to OpenXR where possible .
Appendix: World-Locked vs. Head-Locked Overlays
World-Locked Overlays
These overlays remain fixed in the virtual environment, independent of head movement.
Example: A dashboard display in a racing game that stays in place relative to the car.
Provides a stable and immersive experience, but may exhibit jitter or drift if not well-supported by the VR runtime.
Head-Locked Overlays
These overlays move with the user's head, staying in a fixed position relative to the user's viewpoint.
Example: A HUD element that always appears in the same spot in the player's field of vision.
Ensures that overlays are always visible but can feel unnatural for elements that should be anchored in the virtual world.
Why This Matters
Many modern VR applications rely on a mix of world-locked and head-locked overlays for the best user experience.
OpenXR supports defining different tracking spaces for each overlay, allowing precise control.
OpenVR’s limitations force developers to choose between all overlays being world-locked or all being head-locked, reducing flexibility and visual consistency.