Solutions for yaw drift
The gradual accumulation of error in rotation around the y-axis (yaw) has been one of the main issues I've struggled with while developing for the Rift. There are a number of possible solutions, but each has drawbacks. I'd be curious to hear what the community has come up with, and what I've left out or overlooked. Here are the approaches I'm aware of:
Magnetometers: The Rift SDK has functions to take advantage of the magnetometers in the hardware and stabilize the yaw to the magnetic field around the player. This requires frequent calibration, as the field can shift over time and changes over short distances. Automatic calibration is less intrusive to the play experience, but does not give good results if the player turns only slightly during the calibration period.
Manual yaw control: In many shooters, it's possible to just ignore drift by merging the native yaw turning controls and head tracking. This has the side effect of having the player always move in the direction his head is pointing. It isn't practical for situations where head tracking must be independent of player orientation, like in vehicles.
Reset button: Most Rift demos have a key to reset the yaw to the current orientation. Though not ideal, it's often a good idea to include a reset binding in games, especially to correct for the large yaw offset if the player was looking to the side when the game started.
Contextual actions: Specifically, one could assume the the player is facing mostly forward when firing the weapon in a shooter, or performing any other kind of attack. Re-centering during these actions can keep yaw drift to a minimum, but might introduce some confusion. This is my preferred solution currently, though it's difficult to tell if it would hold up in wider testing, especially for players that don't understand that the correction is happening.
Just wait: It's possible that yaw drift will be a solved problem in hardware in the consumer version if the Rift. Most solutions for positional tracking could determine absolute yaw, much how pitch drift is currently solved by measuring gravity with the accelerometers.
Magnetometers: The Rift SDK has functions to take advantage of the magnetometers in the hardware and stabilize the yaw to the magnetic field around the player. This requires frequent calibration, as the field can shift over time and changes over short distances. Automatic calibration is less intrusive to the play experience, but does not give good results if the player turns only slightly during the calibration period.
Manual yaw control: In many shooters, it's possible to just ignore drift by merging the native yaw turning controls and head tracking. This has the side effect of having the player always move in the direction his head is pointing. It isn't practical for situations where head tracking must be independent of player orientation, like in vehicles.
Reset button: Most Rift demos have a key to reset the yaw to the current orientation. Though not ideal, it's often a good idea to include a reset binding in games, especially to correct for the large yaw offset if the player was looking to the side when the game started.
Contextual actions: Specifically, one could assume the the player is facing mostly forward when firing the weapon in a shooter, or performing any other kind of attack. Re-centering during these actions can keep yaw drift to a minimum, but might introduce some confusion. This is my preferred solution currently, though it's difficult to tell if it would hold up in wider testing, especially for players that don't understand that the correction is happening.
Just wait: It's possible that yaw drift will be a solved problem in hardware in the consumer version if the Rift. Most solutions for positional tracking could determine absolute yaw, much how pitch drift is currently solved by measuring gravity with the accelerometers.
