Note: This is an article of a mulit-article series. If you haven’t read the previous parts, we would encourage you to start at the Overview
Chapter 3: tbd
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
- 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
- The player stands on his tiptoes
- The player exchanges the headset with another person with different size
- 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
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.
Next chapter coming soon…