Marcel Zickler acbb1501e7 Rest Frame Positioning | 3 years ago | |
---|---|---|
.. | ||
Extras | 3 years ago | |
Liscense | 3 years ago | |
SicknessReductionTechniques | 3 years ago | |
Extras.meta | 3 years ago | |
Liscense.meta | 3 years ago | |
README.md | 3 years ago | |
README.md.meta | 3 years ago | |
SicknessReductionTechniques.meta | 3 years ago |
This is a collection of programatic techniques to help reduce cybersickness when using head mounted displays.
The following techniques can be found in the Prefabs and Scripts folders. Instructions on how to set them up are given below.
The SingleNose prefab creates a rest-frame for the user.
To use SingleNose, drag the prefab into the scene. SingleNose will detect the main camera in the scene, and attach a virtual nose. Then configure the noses in the Unity Editor with the following options:
The nose model was taken from Poly by Google and can be found here: https://poly.google.com/view/9AUcVMxZLCp
Our implementation was inspired by the following:
Wienrich, Carolin, et al. "A Virtual Nose as a Rest-Frame-The Impact on Simulator Sickness and Game Experience." 2018 10th International Conference on Virtual Worlds and Games for Serious Applications (VS-Games). IEEE, 2018.
The AuthenticNose prefab acts as a rest-frame for the user.
To use AuthenticNose prefab must be used in tandem with the OVRCameraRig asset from the Unity Standard Assets package. Click the “Use Per Eye Camera” box on the OVRCameraRig. Drag the DoubleNose prefab into the scene, and AuthenticNose will automatically attach two nose models, one to each per eye camera. Each nose model is only visible through the corresponding camera, providing a more realistic representation of a human nose. Configure the noses in the Unity Editor with the following options:
The nose model was taken from Poly by Google and can be found here: https://poly.google.com/view/9AUcVMxZLCp
Our implementation was inspired by the following:
Wienrich, Carolin, et al. "A Virtual Nose as a Rest-Frame-The Impact on Simulator Sickness and Game Experience." 2018 10th International Conference on Virtual Worlds and Games for Serious Applications (VS-Games). IEEE, 2018.
The DynamicGaussianBlur script dynamically blurs the user’s vision based on their translational speed. The rotational speed of the camera determines the sigma value used in the gaussian function.
To use DynamicGaussianBlur, attach the script to the main camera, and configure the effect with the following options:
Our implementation was inspired by the following:
Budhiraja, Pulkit, et al. "Rotation blurring: use of artificial blurring to reduce cybersickness in virtual reality first person shooters." arXiv preprint arXiv:1710.02599 (2017).
The ColorBlur script dynamically blurs the user’s vision based on their translational speed. Portions of the image surpassing the specified color thresholds (i.e. brightness) are not dynamically blurred.
To use ColorBlur, attach the script to the main camera, and configure with the following options:
Our implementation was inspired by the following:
Nie, Guang-Yu, et al. "Analysis on Mitigation of Visually Induced Motion Sickness by Applying Dynamical Blurring on a User's Retina." IEEE transactions on visualization and computer graphics (2019).
The DynamicFOV script dynamically reduces the user’s field of view (FOV) based on their translational and angular speed. The rate of change in FOV is calculated with the following formula.
CRate = Abs(angularSpeed * angularSpeedModifier) + (translationalSpeed ∗ translationalSpeedModifier)
To use DynamicFOV, attach the script to main camera in the scene. Then configure the effect in the Unity editor with the options described below.
Our implementation was inspired by the following:
Fernandes, Ajoy S., and Steven K. Feiner. "Combating VR sickness through subtle dynamic field-of-view modification." 2016 IEEE Symposium on 3D User Interfaces (3DUI). IEEE, 2016.
The DotEffect prefab suspends virtual orbs around the user which move at twice the user’s velocity.
To use DotEffect, drag the prefab into the scene, and drag the player Rigidbody into the “player” reference field. The orbs should then appear in the game view window. Then configure the nose in the Unity editor with the following options:
Our implementation was inspired by the following:
Buhler, Helmut, Sebastian Misztal, and Jonas Schild. "Reducing VR sickness through peripheral visual effects." 2018 IEEE Conference on Virtual Reality and 3D User Interfaces (VR). IEEE, 2018.
The HeadSnapper prefab detects when the user’s head rotation speed passes a certain threshold, at which point their perspective is “snapped” in the direction they were turning. After a brief fade to black transition, the camera’s orientation is locked, and then rotated by a specified angle along the y axis. The user’s vision then fades from black so that they can see again.
To use HeadSnapper, drag the prefab into the scene. Then configure the effect with the following options:
Our implementation was inspired by the following:
Farmani, Yasin, and Robert John Teather. "Viewpoint snapping to reduce cybersickness in virtual reality." (2018).
The VisionLock prefab allows users to lock what they are seeing on screen with a button press. While the effect is active, the image users see will not change with head movement. This effect is currently limited in that all objects in the scene which you wish to rotate with the user’s camera must be children of a single parent object, and because physics interactions in the scene are not rotated while VisionLock is active.
To use VisionLock, drag the VisionLock prefab into the scene. Then drag the parent object containing all objects which you would like to rotate with the user’s vision to the Main Parent field in the VisionLock object.
You may then configure the effect with the following options:
Our implementation was inspired by the following:
Kemeny, Andras, et al. "New vr navigation techniques to reduce cybersickness." Electronic Imaging 2017.3 (2017): 48-53.
The VirtualCAVE asset spawns a wireframe cube around the user. This cube follows, and rotates along with the user to simulate a cave automatic virtual environment. To use VirtualCAVE, simply drag the asset onto the user’s virtual camera in the scene. The asset will spawn the wireframe cube at runtime. The following settings can then be adjusted through the editor.
This approach was inspired by the following paper: Nguyen-Vo, Thinh, Bernhard E. Riecke, and Wolfgang Stuerzlinger. "Simulated reference frame: A cost-effective solution to improve spatial orientation in vr." 2018 IEEE Conference on Virtual Reality and 3D User Interfaces (VR). IEEE, 2018.
These can be found in the Utilities folder. These are tools to help set up the techniques.
The FOVUtility allows you to measure the user’s field of view (FOV), as Unity’s Camera.fieldOfView does not currently support head mounted displays.
To use the FOVUtility, first drag the prefab into the scene. A bar will appear in front of the user’s vision. Select diagonal, horizontal, or vertical from the drop down menu to select the type of FOV you would like to measure. Then drag the Stick Horizontal Scale and Stick Vertical Scale slider until the bar reaches the edges of the user’s vision. The Horizontal FOV, Vertical FOV, and Diagonal FOV fields on the game object will update in real time to show you the user’s FOV.