Unstable Floor Level on Meta Quest 3 / 3S with Floor Level Tracking Origin
Hi everyone,
our studio is developing a Unity B2B application for Meta Quest 3 and Quest 3S using the Meta XR SDK.
The application uses:
- Hand Tracking only, with no controllers
- Passthrough
- Multiplayer
- OVRManager with Tracking Origin Type = Floor Level
Our application needs to place several virtual objects directly on the physical floor of the room.
We are experiencing an issue that we have not been able to solve: in some sessions, when the application starts, the floor level reported by the headset is incorrect.
The error is significant, approximately 0.5 meters, so virtual objects that should appear on the physical floor are instead positioned noticeably above or below it.
What makes the issue difficult to understand is that it is not consistent.
When the problem occurs, restarting the application usually does not help: multiple sessions started around the same time tend to report the same incorrect floor level. However, at other times, using the same headset in the same physical room, the detected floor level is correct.
We have confirmed that when the floor level is incorrect, the following procedure fixes the issue:
- Close the application.
- Open the Meta Quest system settings.
- Run the procedure to set/calibrate the floor level.
- Restart the application.
After doing this, the floor level reported to our application is correct.
Why this is a problem for our use case
This is a B2B application and many of our users are occasional users who may have never used a VR headset before.
They may not know how to:
- exit the application,
- use the required system gestures,
- navigate the Quest settings.
For this reason, asking the user to leave the application and manually recalibrate the floor through the Quest settings is not really a viable solution.
We know that it is possible to launch procedures related to Scene/Space setup from an application, but performing a complete Scene setup would be unnecessarily complex for our users.
Ideally, we would like to launch from inside our application the same simple floor-level calibration procedure available in the Quest system settings.
Even better, of course, would be for the headset to consistently provide the correct physical floor level without requiring any manual calibration.
Questions
We would really appreciate some help understanding:
- Why can the floor level reported by the headset vary so much between sessions, even when using the same headset in the same room?
- Is there anything we should be doing differently to make the floor position more reliable?
- Is there any API in the Meta XR SDK that allows an application to trigger the Quest floor calibration procedure directly?
- If triggering the system floor calibration is not possible, is there a recommended way to determine or correct the physical floor height from within the application?
- What would be the recommended approach for an application designed for inexperienced users who should be able to obtain an accurate floor level without leaving the app or performing a complex Scene/Space setup?
Any information about how Quest determines the Floor Level tracking origin, why it can become inaccurate, or possible best practices/workarounds would be extremely helpful.
Thanks in advance for your help.
