As many of you VR fans / developers know, Owlchemy is very passionate about floors. When it comes to standing VR, our preferred flavor of VR, getting the floor height correctly calibrated is of utmost importance. If you’re standing in VR and your floor is off by more than an inch or two, your sense of presence, your willingness to move about, your comfort level, your perceived height, and your overall level of acceptance that this virtual world is real is reduced heavily.
With seated VR content, the concept of recentering makes sense to align the player to their origin, but with standing VR, the origin absolutely must be the center of the floor area in which they are situated.
To solve floor calibration, there are a number of ways to go about it. The software could tell the user to put their controllers on the floor to obtain an absolute floor height but this would fail on platforms where your floor area is not guaranteed to be within tracking due to the tracker FOV or other occlusion. Another method would be to manually input your height, which can be clunky and prone to terrible user error (do *you* know your exact height? did the height calibration occur when you were standing perfectly straight up?).
With the above options being lack luster and with no built-in ability to find the height of the floor on PlayStation VR, we decided to take things into our own Move-filled hands and design a custom calibration within Job Simulator. Instead of reaching a controller toward the floor and possibly exiting the tracking frustum, we realized that we could simply steal some math from our good buddy Leonardo da Vinci.
It turns out the human wing-span and human height are nearly identical, so if we have the player simply outstretch their arms and pull both triggers, we can obtain their exact height in one shot, without the process even seeming like a calibration step. Behind the scenes, at the moment of calibration we find the current position of the HMD relative to the camera on the Y-axis (since the user is standing) and then we use the player height we’ve calculated to find how high the HMD is from the ground, and use this to calculate the height of the camera from the ground. This gives us our absolute spatial calibration of the world from our previous relative-only space. This calibration method allows us to find the floor and also build a universal calibration for the room instead of for that particular player. Once we save this calibration to disk, unless the tracking camera is moved, any player can play the game and be exactly their real-world height in-game.
While it’s preferable when platforms build this kind of calibration into the system software, this method could technically work to solve floor calibration across any standing hand-tracked VR system, so we felt it would be good to share it with the VR community!