Development of Motion Sickness Prevention Algorithms (Comfort Settings) in Games
Motion sickness in VR — engineering problem, not user problem. When player says "I'm getting sick", doesn't mean "has weak vestibular apparatus". Means system didn't implement enough vection reduction mechanisms. Correctly implemented Comfort Settings reduce uncomfortable player percentage from 50–60% to 10–15% — and this measurable.
Neurobiology of conflict: where sickness comes from
Brain continuously compares signals from three systems: vision, vestibular apparatus (semicircular channels + otolith organs), proprioception (body position sense). In real movement all three agree. In VR with smooth movement: vision reports movement, vestibular apparatus — stillness. Brain interprets this conflict as poisoning — evolutionary mechanism historically meaning exactly that. Hence nausea.
Comfort Settings task — minimize conflict: either reduce "amount of movement" vision perceives, or synchronize with real body movements.
Tunneling Vignette: main technique
Locomotion vignette (tunneling effect) — most effective tool. During movement peripheral vision beyond certain angle (usually 40–60° from center) closes with darkened overlay. Central vision continues perceiving movement — necessary for gameplay. Peripheral — no, and peripheral most sensitive to vection.
In Unity: two approaches. First — Post Processing Vignette with dynamic intensity through Volume override. At speed > threshold intensity increases through Mathf.Lerp over easeInTime, on stop decreases over easeOutTime. Works for simple cases, but URP Vignette symmetric doesn't give shadow shape control.
Second — Full-Screen Quad on separate UI layer over everything with custom shader computing distance from UV-center and applying smoothstep darkening. Full control: can make shape not round but elliptical (horizontal width larger than vertical — matches natural field of view), can add subtle grain on edge.
Comfort Settings parameters:
-
Vignette Intensity(0.0–1.0, default 0.7) -
Vignette Size(angle degrees, default 50°) -
Enable/Disabletoggle
XRIT 3.x includes ready TunnelingVignetteController — use as base with modifications.
Snap Turn and fixed angle
Smooth camera rotation — second worst after linear movement. SnapTurnProvider does instant fixed angle rotation without continuous. But "instant" can be uncomfortable — sharp picture jump without animation.
Improvement: micro-fade on snap turn. On rotate — instant 30% opacity darkening for 0.05 s, turn, then fade back 0.1 s. Total 0.15 s, player barely notices pause, but picture "jump" vanishes.
Optimal snap turn angles per Meta research: 30° for combat games (need direction precision), 45° for adventures, 60° for casual. Make changeable settings.
Reduce Motion: comprehensive setting
Besides locomotion, discomfort causes:
Camera shake — camera shake on explosions, hits. In VR especially bad: physical headset doesn't shake with virtual camera. Solution: instead camera shake — controller vibration (haptic) + visual effects (colour aberration, brief flash) without Camera Transform movement.
Bob animation — camera sway while walking. Adds realism in flatscreen games, in VR — extra vection source. Default — disabled. Let lovers enable.
Field of View adjustments — some VR games dynamically narrow FOV on acceleration. Extreme measure: at FOV below 80° "looking through tube" feeling arises, itself unpleasant. Use only at very high movement speeds.
Acceleration curves — linear acceleration from 0 to max velocity over 0.3–0.5 s instead instant start. Brain better perceives gradual speed increase than instant start. Realized through AnimationCurve on ContinuousMoveProvider.moveSpeed.
Persistent Comfort Profile
Comfort Settings should save and apply before player puts headset on. Ideally settings set at initial screen on first launch through short onboarding: "New to VR?" → auto-set safest settings. Experienced players — standard.
Profile saves in PlayerPrefs or JSON save-file. On device change (Quest 2 → Quest 3) — part settings may change due different headset FOV; provide flag "reset on headset model change".
| Task | Timeline |
|---|---|
| Basic vignette + snap turn | 3–5 days |
| Full Comfort Settings with UI | 1–2 weeks |
| Comprehensive system + onboarding + profiles | 2–4 weeks |
Cost calculated after existing locomotion system and platform requirements analysis.





