How the player height can be measured

As shown in the last chapter, we’re adjusting the character to the players height – a process we call “Calibration”. In the games we’ve played, the calibration is done at the beginning of the game, asking the player to stand up and look at an object. The game then remembers the height for the rest of the session.

While this is certainly an effective way to measure the player’s height, there are some downsides

Another hurdle until the player can play (may even come with an additional scene load)

Exchanging the headset from one person to another with different height is not supported

Calibration needs to be done properly in this step, otherwise there will be issues throughout the game

What we currently see in many VR games is that until a player is able to actually start a game, he already had to traverse multiple scene changes and loading screens. This especially seems to be the case for multiplayer games.

Our opinion is that the player shouldn’t need to care about this at all because he has a height measuring unit attached to his hat.

So we began experimenting with something we call “Embedded Calibration (EC)”, meaning the game calibrates depending on player actions during runtime with minimal impact on the player.

Before implementing, we collected the different scenarios that can happen to the player. It became clear quickly that EC will NOT work for all use cases – there are simply too many possibilities of players moving, changing, kneeing down, etc..

So we decided on a couple mantras:

EC should cover the most likely use cases

EC must not disturb the player in any way

As this is a competetive game, the player must not have any benefit by faults of EC / misusing EC

For fallback, the game contains a manual calibration as well which will overwrite EC as soon as it’s being used

Scenarios

Highly Likely

The player starts the game in SteamVR, standing up

The player starts the game sitting in front of his desk, and stands up after the game started

The player looks up (which increases the net headset height as the headset is strapped in front of his face and the player “lifts” it by looking up)

The player lowers his head, knees, crawls, whatever

The player puts on the headset after he started the game

Likely

The player stands on his tiptoes

The player exchanges the headset with another person with different size

Unlikely

The player sits / ducks / crawls the whole game (unlikely given the throw mechanic in the game)

The player jumps

Implementing embedded calibration

Considering these scenarios, we implemented EC using the following flow:

An initial calibration is done when the game is started

In defined intervals, the headset measures the player’s height, if the player does not look upwards

If the average of the last x measurements is larger than the currently set player height, the calibration is adjusted accordingly. This includes a small treshhold to compensate small adjustments in the player’s height like him stepping on his tiptoes

Result

This is how the EC looks like in the final game

This simple calibration procedure covers a proper calibration for mostly all scenarios mentioned above. Using the scaling methods described in Chapter one of this series the CameraRig / Playermodels are then properly aligned.

As you might have noticed, the calibration is only done in one direction, which is the player getting larger. The reason behind this is that people don’t shrink, but “grow” by standing up, however they might sit / knee down which obviously should not result in a smaller avatar

Downside of this is that the game cannot detect if the headset is strapped to a smaller person after calibration was performed, so in these cases the players are asked to perform a manual calibration in the game settings.