Tunnelling is a powerful VR comfort tool. But great VR requires lots of experimentation and tweaking. Comfort solutions vary wildly depending on what works in a given project, what suits that project, and what suits individual users. As such, the golden rules are:
- Make sim-sickness reduction part of the core of your project, not just added on top. This might mean more than just tunnelling.
- Give your users as many project-appropriate options as possible, with solid defaults.
- Be prepared to feel sick so your users don't have to.
That said, below are various tunnelling settings that can work well for particular project types. These are best used as starting points, as a good implementation will require fine-tuning and flexibility for users. It's also best not to limit yourself to these starting points, as you may find a completely unexpected way to improve your solution.
Vehicles
Vehicles (cars, spaceships etc) have a major benefit - the cockpit. This gives users two things. Firstly, a static reference frame to ground them. Secondly, a clear indication of direction of motion. Users know that when they press "forward", they will move in the direction the vehicle points.
- Motion Transform should link to the vehicle itself.
- Motion Settings: At minimum, use Angular Velocity. Smooth, slow vehicle acceleration generally causes more sim-sickness than fast, abrupt acceleration; in this case using Acceleration may well help. In all cases, allowing users to turn on Acceleration and Velocity modes is recommended.
- Background: For many users, COLOR will be sufficient in vehicles. However SKYBOX or CAGE modes are a good default to provide a strong grounding effect.
- Masking: Using MASK mode and masking the cockpit is generally effective. This increases grounding by retaining more static objects while decreasing distraction by reducing visual change when the effect is active.
First Person - Thumbstick Movement
First person games using thumbsticks/WASD to move are very challenging in terms of sim-sickness. Generally there is no static reference frame, and directional ambiguity. The two major causes of sim-sickness in this case is rotation, and not knowing the direction of movement.
Consider adding a clear visual indicator of the player's forward direction. For example, the green arrow in the VRTP_Example scene (although this is overly intrusive!). Specific implementation will depend on how direction is determined - for instance, do you use HMD direction, player object rotation, an average of both or something else?
- Motion Transform should be the player object.
- Motion Settings: Generally Angular Velocity and Acceleration should be used at minimum. Allow users to turn on Velocity mode as well if desired.
- Background: Usually SKYBOX or CAGE is a good default as COLOR may be insufficient for some players. Consider allowing COLOR and/or BLUR mode for players with higher sim-sickness tolerance.
- Masking: It can be useful to use MASK mode to mask objects attached to the player - for instance body and guns. Direction indicators should generally be masked. Some players will find that WINDOW mode provides a stronger grounding by adding the constant static reference that first person games usually lack - however this is usually too intrusive to be default. PORTAL mode can also be a useful option if portals are placed intelligently in the world.
- Fake Cockpit: If your experience would benefit from a fixed frame of reference, like a cockpit, but wouldn't make sense in-world, consider CAGE_OVERLAY mode to render a "fake" cockpit in the periphery.
First Person - Wand-Directed Movement
Wand-directed movement is when the player moves in the direction they are pointing. In this case direction can be clearer, and generally there is no artificial rotation. Most of the guidelines for thumbstick motion apply, but there are some other considerations.
- Motion Settings: Acceleration is the most important mode here, but consider using Velocity for maximum effect.
- Background: While usually less intense than thumbstick, SKYBOX and CAGE are still good defaults for most players.
- Masking: See Thumbstick Movement. Masking the pointer object can be very important to maximise directional information.
First Person - Physical Movement
This includes techniques such as running on the spot, arm-swinging and grab-and-pull locomotion. In these cases, direction is generally clear and physical motion can help many players. Most of the guidelines for wand-directed motion apply, but there are some other considerations.
- Motion Settings: See Wand-Directed Movement. Consider using Velocity by default as well, as for some techniques - especially grab-and-pull - motion happens in sharp bursts and this will help the effect respond well.
- Background: See Wand-Directed Movement. BLUR can again work well for less sensitive players, and can feel "right" with the kinds of motion involved.
- Masking: See Wand-Directed Movement. This depends heavily on project. For example, masking hands in arm-swinging and grab-and-pull can be effective, but a stronger grounding can be achieved with WINDOW mode. Consider using WINDOW mode with the provided Window mesh, and disabling the effect entirely when not moving. This can be particularly effective with grab-and-pull, making it very clear that the world is moving, not the player.
Comfort Calibration
Where possible, we recommend implementing a dedicated "Comfort Calibration" mode in your project, so users can easily dial in their preferred settings for VRTP and/or other comfort solutions.
This should be a simple level where users can use the locomotion system while easily switching between comfort presets in-game, without returning to the menu. This allows quick comparison of settings and their effects.
It should be as easy as possible to toggle between presets. For example, remapping the primary/secondary fire buttons to next/previous preset, or placing physical buttons in-world to select presets.
Multi-Camera Setups
VRTP works fine when a scene has multiple cameras - for instance used to switch between first-person and third-person views. However, the singleton instance references will only point to one of the cameras. As such, you must store instance references for each camera manually if interacting with the effect from code.
Additionally, the TunnellingMaskObject and TunnellingMaskObjectMobile scripts use the singleton references, and as such cannot be used. Use the AddObjectToMask() and RemoveObjectFromMask() methods manually to manage masking.