From Team Fortress Wiki

This page tells you how to use Oculus Rift's Development Kit. For information about Virtual Reality itself, see Virtual Reality

Starting Guide

If you have never played Team Fortress 2 before, we recommend playing your first game on a monitor, not VR. There are a lot of helpful tutorial messages your first time through but unfortunately the text is very hard to read on the Rift.

Make sure your Oculus Rift is plugged in and turned on before starting Team Fortress 2.

A common error is to make the head strap too tight. It's not a pair of ski goggles - you're not going jogging with it on. Comfort is important, and the right tension helps position the display the correct distance from the eyes.

Another common error is to not use the adjustment wheels on the sides - if using the A vision lenses, most people will want to adjust it all the way out. The Rift ships with them all the way in, so make sure you adjust them so they're all the way clockwise on the left side, all the way counterclockwise on the right side.

In Team Fortress 2 click on Options, then Video, then pick Enable from the Virtual Reality menu.

Make sure you enable the developer console by going to Options/Keyboard/Advanced... and ticking "Enable Developer Console". You can bring it down using the tilde (~) key (for non-US keyboards, it's whatever key is at the top-left above Tab and next to 1). Most of the VR controls are currently on Console Variables or "convars".

Restart the game

Click the "Activate Virtual Reality" button on the main menu.

Although you can just start playing with the default settings, to avoid discomfort it is highly recommended that you calibrate the device for your eyes. See "Calibrating your Inter-Pupillary Distance" below.

If you use the "A" vision lenses in the Rift, you don't need to do anything to let the game know. If you have switched to the "B" or "C" lenses, you will need to set the oculus_lens_type convar to "B" or "C" respectively.

convar to "B" or "C" respectively. If you have any questions or comments about VR mode, please visit the TF2 Virtual Reality forum.

Taking Your Time

VR is awesome and immersive, but it can't fool all your senses all the time. This can lead to something very similar to seasickness or motion sickness, which can lead to nausea, sweating or headaches. Our advice is as follows:

Start slow. For the first few sessions, plan to play for no more than ten minutes in VR.

Calibrate the device for your eyes. Having the correct IPD helps a lot.

Start with some of the characters with slower-paced playing styles, such as Heavy or Medic. Avoid the faster or close-range characters such as Scout, Pyro, or rocket-jumping with the Soldier - they can produce particularly intense experiences in VR.

Stop if you feel unwell. You cannot "push through" motion sickness, it just continues. If it gets bad it can last a long time after you stop playing. As soon as you feel uncomfortable, take the HMD off, take a break and do something else for a while.

Many people find that over multiple play sessions they become used to the effects - they get their "VR legs" - and can play for longer without feeling unwell.

Some lucky folks never get any ill-effects and can play comfortably for many hours.

Calibrating your Inter-Pupillary Distance

Everybody's head is a little bit different. To give you the best experience, we need to set the in-game view to be the same distance apart as your real eyes. To do that, we need to know your Inter-Pupillary Distance (IPD). Most people do not know their IPD, and measuring it with a ruler is very difficult. The Oculus SDK comes with a built-in calibration utility to let you discover your IPD without visiting an optometrist and Team Fortress 2 uses the IPD you calibrate using that tool. To run it either download the Oculus SDK or install "OpenVR" from Tools on Steam and double click on it.

Advanced Settings

The current Rift dev kit uses a fairly low-resolution display. We suggest you turn antialiasing on as high as it will go in the TF2 video settings as this will make the picture far smoother. On most modern graphics cards this will not affect your framerate in these resolutions.

VR works best when you have the highest possible framerate and the lowest possible latency. Going faster than 60 FPS is useful because it reduces the latency accordingly. To reduce latency as much as possible, we recommend:

In the TF2 advanced video settings, make sure "Wait for vertical sync" is disabled.

In the TF2 advanced video settings, make sure "Motion blur" is disabled.

Make sure wait-for-v-sync is not forced on by video card control panel settings.

Disable the "Aero" Windows desktop composition engine. Right-click on your desktop, click "Personalize" and then select one of the "Basic" or "Classic" themes instead of an "Aero" theme. An easy way to tell that Aero is disabled is that your windows don't have that translucent frosted-glass effect on their title bars any more.

Console variables (convars)

There are a lot of options in VR that we are still experimenting with. We have set the defaults to some that most people seem to like, but feel free to experiment and find your own personal preferences. All settings are set via the console and are either commands or console variables. Here is a brief list:

cl_first_person_uses_world_model : for non Oculus-Rift users, they can enable third-person models similar to 'vr_moveaim_mode 7'. Valid values are "0" and "1".

: for non Oculus-Rift users, they can enable third-person models similar to 'vr_moveaim_mode 7'. Valid values are "0" and "1". vr_first_person_uses_world_model : when in VR mode, determines if you use the third-person models or not. "0" uses standard TF2 first person models. "1" is the default value and uses the newer third-person models.

: when in VR mode, determines if you use the third-person models or not. "0" uses standard TF2 first person models. "1" is the default value and uses the newer third-person models. vr_distortion_enable : controls the warping designed to correct for the warped edges of the Oculus Rift display. "1" is the default value. Setting to "0" gives a side-by-side 3D experience without the lens correction, and may make text somewhat easier to read.

: controls the warping designed to correct for the warped edges of the Oculus Rift display. "1" is the default value. Setting to "0" gives a side-by-side 3D experience without the lens correction, and may make text somewhat easier to read. vr_moveaim_mode : options for controlling movement and aim. Modes 0 through 4 are all interesting to try. 5 and above are probably not. Mode 3 is the default. 0: Aiming and steering are coupled on the rift. The mouse steers as well. This is a good mode for use with a control pad. 1: Aiming with the rift, steering with the mouse. This mode may be buggy and "drift" after a while. 2: Steering has a dead zone. Inside the dead zone you aim with the rift and the mouse aims and steers simultaneously. Outside the dead zone aiming and steering are coupled for both the rift and mouse. 3: Steering with the rift, aiming with the mouse inside a dead zone. Outside the dead zone the mouse steers as well. 4: Relative camera control with the rift (no influence on aiming or steering, relative to your character's facing direction). Mouse is as mode 3 combining aiming and steering with a dead zone. 5: Absolute camera control with the rift. Your reference is not tied to your character's orientation so steering with the mouse does not influence the direction in which you look. You must actually turn around to see where you're going if your character turns around. Aiming and steering is coupled and controlled with the mouse. This mode should play well with a wireless controller and could give you a good sense of direction within the map. 6: Relative camera control with the rift. Aiming and steering is coupled and controlled with the mouse. 7: Rift input is not used, so you only get stereoscopic vision. Aiming and steering is coupled and controlled with the mouse. 8 or higher: If you accidentally set an incorrect value the camera may get stuck somewhere causing even the console to not display. It's there if you call it though, so use your blind typing skills to get back to a valid mode. You can also cycle to the next value with the console command "vr_cycle_aim_move_mode"

: options for controlling movement and aim. Modes 0 through 4 are all interesting to try. 5 and above are probably not. Mode 3 is the default. You can bind a key to "vr_reset_home_pos" (default is p). Especially useful in modes 1 and 5 to counteract drift after a while.

vr_moveaim_reticle_yaw_limit : ...

: ... vr_moveaim_reticle_pitch_limit : used by modes 2, 3, 4 to define the size of the "keyhole" in degrees.

: used by modes 2, 3, 4 to define the size of the "keyhole" in degrees. vr_moveaim_mode_zoom : ...

: ... vr_moveaim_reticle_yaw_limit_zoom : ...

: ... vr_moveaim_reticle_pitch_limit_zoom : the same as the above, but used when zoomed (e.g. with the Sniper scope)

: the same as the above, but used when zoomed (e.g. with the Sniper scope) vr_hud_max_fov : controls how much of the screen the HUD covers. Sensible values are 50-70. Bigger means the text is more readable, but some people have trouble seeing the corners. The default is 60.

: controls how much of the screen the HUD covers. Sensible values are 50-70. Bigger means the text is more readable, but some people have trouble seeing the corners. The default is 60. vr_hud_forward : apparent distance of the HUD from your face in inches. The default is 500.

: apparent distance of the HUD from your face in inches. The default is 500. vr_hud_axis_lock_to_world : locks the HUD rotation to the world. It's a bitfield, so add together 1=pitch, 2=yaw, 4=roll. Many people like to set this to "4" - try it out! The default is 0 meaning the HUD is locked to your face.

: locks the HUD rotation to the world. It's a bitfield, so add together 1=pitch, 2=yaw, 4=roll. Many people like to set this to "4" - try it out! The default is 0 meaning the HUD is locked to your face. vr_world_scale : Scales the world up and down by playing with IPD and motion scaling. Very trippy to play with. The default is 1.0

: Scales the world up and down by playing with IPD and motion scaling. Very trippy to play with. The default is 1.0 tf_taunt_first_person : set to 1 to make taunts happen in first person, which is the default for VR. You can set this back to 0 to make them happen in 3rd person instead (just like non-VR mode).

: set to 1 to make taunts happen in first person, which is the default for VR. You can set this back to 0 to make them happen in 3rd person instead (just like non-VR mode). vr_zoom_multiplier : how big you want the Sniper scope to be on the HMD. Default is 2.0.

Behind the scenes convars

These are not useful for actual play, but may be interesting for developers to show some of the differences between VR and non-VR rendering modes.

vr_distortion_enable : set this to zero to turn off the barrel distortion shader. This lets you see what the engine is actually rendering. We then apply barrel distortion and chromatic aberration to counteract the distortion of the Rift lenses.

: set this to zero to turn off the barrel distortion shader. This lets you see what the engine is actually rendering. We then apply barrel distortion and chromatic aberration to counteract the distortion of the Rift lenses. vr_debug_remote_cam : set to 1 to enable the debug camera, which by default points back at your character. Useful for checking out first-person animations.

: set to 1 to enable the debug camera, which by default points back at your character. Useful for checking out first-person animations. vr_debug_remote_cam_pos_x , vr_debug_remote_cam_pos_y , vr_debug_remote_cam_pos_z : controls the position of the debug camera

, , : controls the position of the debug camera vr_debug_remote_cam_target_x , vr_debug_remote_cam_target_y , vr_debug_remote_cam_target_z : controls the point the camera is looking at

(Linux only) Enabling Binaural Audio

OpenAL, which Linux uses for 3d positional audio, has a little known HRTF feature. This distorts sound using pre-measured responses to how sound changes when it bounces off a human head, relative to where it's positioned. Enabling this feature makes sound, when using headphones, appear as though it's actually coming from the object it originated at in 3d space. Example

Unfortunately, for the moment, the version of OpenAL that Steam uses is not recent enough to take advantage of these features, as it was introduced in >=OAL1.14. To use it, you can either use a local runtime, or simply make Steam use your system's OpenAL for games. Here's the instructions on how to do the latter on Ubuntu and Arch Linux:

Ubuntu:

#32-bit sudo apt-get install libopenal1 ln -sfT /usr/lib/i386-linux-gnu/libopenal.so.1 ${HOME}/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libopenal.so.1.13.0 #64-bit sudo apt-get install libopenal1:i386 ln -sfT /usr/lib/i386-linux-gnu/libopenal.so.1 ${HOME}/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libopenal.so.1.13.0 ln -sfT /usr/lib/x86_64-linux-gnu/libopenal.so.1 ${HOME}/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libopenal.so.1.13.0

Arch Linux:

#32-bit ln -sfT /usr/lib/libopenal.so ${HOME}/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libopenal.so.1.13.0 #64-bit - make sure multilib is enabled in your repos sudo pacman -S lib32-openal ln -sfT /usr/lib32/libopenal.so ${HOME}/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libopenal.so.1.13.0 ln -sfT /usr/lib/libopenal.so ${HOME}/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libopenal.so.1.13.0

Finally, once that's set up, we can enable OpenAL's HRTF functionality.

This will enable this functionality system-wide. There is currently no way to control this setting on a per-application basis.



echo "hrtf = true" >> ${HOME}/.alsoftrc

Currently, by default OpenAL only supports HRTF in 44.1KHz. To make sure it works, ensure that your card is running at 44.1KHz, or manually set the frequency for OpenAL like so:



echo "frequency = 44100" >> ${HOME}/.alsoftrc

Unfortunately, we still need to turn off TF2's own software 3d sound, to let it fall back on OpenAL. There are some options to do this:

dsp_slow_cpu : This is the only required change. Set to "1" to fall back to OpenAL 3d sound.

: This is the only required change. Set to "1" to fall back to OpenAL 3d sound. snd_spatialize_roundrobin : Set to "1" to make sure 100% of sounds fallback.

: Set to "1" to make sure 100% of sounds fallback. dsp_enhance_stereo : Environmental reverb. Sound sources may be easier to pinpoint with this disabled, but you're pretty safe setting it to "1".

: Environmental reverb. Sound sources may be easier to pinpoint with this disabled, but you're pretty safe setting it to "1". snd_pitchquality : Ensure that this is set to "1" to have high quality sound enabled.

And that's it! It should now be easy to tell if sounds are coming from in front of you, behind you, above you or below you, and from roughly what distance.

Known Bugs/Missing Features