Motion sickness is a large issue in VR especially in games that involve a first person controller. At Babilin Apps we have experimented with a few techniques to allow users to experience VR without the motion sickness. To solve this issue, we had to consider the reason for motion sickness. Motion sickness occurs because the body’s motion sensing system are out of sync. In VR the viewer’s eyes see motion but the ears and the sensory nerves do not. This can cause headaches and discomfort after brief use.
For Oculus Rift
The Static Skybox
To solve this issue, we created a static particle system that gets affected by the viewer’s rotation but not by the translation movements of the character controller. The particles make it seem as if the environment is moving around the player rather than the player moving around the environment. Often, this simple trick is enough to significantly reduce discomfort in VR games.
Next we had to create another system for people that were more sensitive to movement. By default, developers use a controller for the player movement. This poses two issues:
1. Acceleration and deceleration are causes of motion sickness in VR games.
2. There is no way to optimize the movement (We will get to this part later)
To eliminate the issue with acceleration, we developed a simple gaze based movement. We used the default Navmesh agent as the player controller and we baked a navmesh in the scene. This made it possible for the player to move based on gaze without the need to accelerate or decelerate. However, it causes some disorientation because you cannot see the path that the names agent will take.
To fix this we used a simple line renderer and passed the points from the navmesh agent path. This poses some issues on uneven terrain but for most cases it works decently.
Then we created different navigation methods. When using a controller, you can’t actively pick how you want to navigate. With a gaze base controller, you can tailor the movement style to the viewer’s sensitivity of motion. So we developed two additional motion types.
On sensitivity level 2, the character walks in steps. Teleporting incrementally to the destination. This method eliminates motion but still has a sense of walking.
On sensitivity level 3 the character teleports to the selected location. This method is desirable for people who are extremely motion sensitive.
We have attached a link to the package below and we hope that this can help future development projects. Please leave feedback on things you would like to see added or improved.
To Use :
1. Add the VR Motion prefab to your scene
2. Create a navigation mesh on your terrain
3. Create a seperate layer for the terrain and specify it in the inspector
*Note* Make sure that the camera in the StaticSkyBox only renders the Particle System