Oculus Rift User 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.
- 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.
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".
- 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.
- 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.
- oculus_lens_type: which vision lens type you have fitted to the Oculus Rift. Valid values are "A", "B" and "C".
- 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"
- 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.
- 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)
- 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.
- vr_hud_forward: 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.
- vr_neckmodel_up: ...
- vr_neckmodel_forwards: The distances from the center of rotation of your neck to your eyes in inches. If you have an unusually short or long neck you might want to adjust these, but it's a fairly subtle effect.
- 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
- 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).
- vr_zoom_multiplier: how big you want the Sniper scope to be on the HMD. Default is 2.0.
- If multiple people need to use the same machine, you may need to have different calibrations for each of them. The calibration is defined by the following convars, and like all the above settings they can be put into CFG files (e.g.
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. Note - some of these are in an upcoming update and are not yet exposed.
- 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.
- vr_distortion_grow_inside: ...
- vr_distortion_grow_outside: ...
- vr_distortion_grow_above: ...
- vr_distortion_grow_below: these four numbers control how much "overdraw" to do, compared to the reference calibration. Different people have different faces & eye distances, so these are fudge-factors determined by just sticking the Rift on lots of faces, finding where they can see black edges, and increasing these convars until they can't see them any more. The effect of these is most easily seen if you set them to negative values such as -0.25 or -0.5 - they start chopping into your visible area. Note that these change both the rendered frustum (i.e. the view/clip/projection matrix) AND the distortion shader - to see the first set of effects without the second, set vr_distortion_enable to 0. The defaults are 0.2 for inside/outside and 0.0 for above/below.
- vr_distortion_chroma_r: ...
- vr_distortion_chroma_b: these control the amount of chromatic aberration to apply in the distortion shader to counteract the aberration that will then happen in the lenses. The reference calibration is done with green light, and then we eyeball-dial in these values for red and blue to reduce colour-fringing on the edges. With the current display resolution it is hard to be very precise with these numbers, so they are rather subjective, but these values are significantly better than zeros. Defaults are 0.01 for red, -0.02 for blue.
- vr_draw_local_player: set to 0 to switch to the non-VR "viewmodel" rendering of the weapon, arms, etc. These models are highly specialized for the standard monitor view and don't work well in VR.
- 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.
- vr_debug_remote_cam_target_z: controls for the debug camera.
- vr_decapitation_enable: set to 0 to keep the head on your first-person-view character. TF folk do love their hats, but they get in the way when trying to shoot other people and their hats, so we chop the first-person model's head off. Default is 1.
- vr_meathook_enable: set to 0 to not monkey with the position of the first-person model. Without it, animations will push the torso around relative to your view, which ruins the effect of you being in that body. So with it, we move the animated character so they are hanging off your virtual head (controlled by the movement of your HMD). It's easiest to see what this is doing by turning on the debug camera and doing animations such as taunts and reloading. Default is 1.
- vr_neckmodel_disable: the Rift only reports rotation, not translation. But we know it's sitting on your head, on top of your neck. We assume your shoulders are not moving, which means when you rotate your head, your eyes will also translate but some small amount. We model the neck as a simple stick (controlled by vr_neckmodel_up and vr_neckmodel_forwards. The translation effect is subtle, but important. You can see the effect of this by setting this convar to 1. Try standing close to something and then rolling your head from side to side - but be warned, it can be quite unpleasant!
- vr_fov_scale: this scales the view FOV without scaling the rotation or translation. Setting this to any value except 1.0 is an incredibly bad idea and will almost certainly cause nausea - but it's instructive to see what happens when you get your VR calibration wrong!
Known Bugs/Missing Features
- The calibration procedure is difficult to do with some types of glasses on. Do your best! You may also be able to do the calibration without your glasses (yes, it's blurry) and still get reasonable results. Alternatively, ask your optometrist for your IPD and set it directly.
- The calibration procedure only works with the A set of vision lenses. It does not yet work with the B or C sets. If you wish to use those lenses, you can either:
- Calibrate as best you can with the A set in, even though it's blurry. Calibrations done with the A set will work even if you switch to B or C to play the game (your eyes are still the same distance apart!)
- Get your IPD measured by your optometrist and set it directly either with convars or through the calibration screen.
- Some first-person animations do not work, or are glitchy. Gameplay should be unaffected, it just looks odd.
- Spy's backstab.
- Some weapon reloading anims (e.g. Sniper's SMG, Pomson 6000).
- It is currently not possible to use home-built oculus headsets due to TF2 requiring the headtracking hardware for
-vrmode to activate. It may be possible to use these in the future if an option is added to enable 3D mode without requiring the oculus hardware.
- Some weapons are held very low which makes it hard to tell which you have equipped (e.g. Demo's grenade and sticky launchers). Try looking down.
- Custom HUD layouts may interact strangely with VR mode.
- Because of the low resolution, much of the text is very hard to read. In particular the training, loadout and store screens are basically impossible to use in VR.
- Does not work nicely with DirectX8 rendering - you'll need to switch to that new-fangled DirectX9 thing.