"매 vestibular system 매 시각-전정 mismatch 매 만들면 매 nausea 의 발생". 매 1990s simulator sickness 연구의 매 VR 확장 — 매 2026 매 Quest 3, Vision Pro, Pico 4 Ultra 매 90Hz+ / foveated rendering 으로 매 줄어들고 있지만 매 design choice (locomotion, FOV) 가 매 dominant factor.
매 핵심
매 원인 (Sensory Conflict Theory)
Visual-vestibular mismatch: 눈은 movement 보지만 inner ear 는 stationary 신호 — 매 brain 의 "독 상태" 추정.
Latency: motion-to-photon > 20ms 매 sickness 급증.
Low frame rate: < 90Hz, 특히 dropped frame, 매 trigger.
FOV manipulation: peripheral vision movement 매 강한 vection.
IPD mismatch: 매 잘못된 inter-pupillary distance 매 eye strain → nausea.
Acceleration in virtual locomotion: 매 constant velocity OK, 매 acceleration 의 매 worst.
매 완화 기법
Teleport locomotion: 매 smooth move 보다 매 sickness ~80% 감소.
Tunneling / vignette: peripheral 의 dark mask, vection 줄임.
Snap turn: smooth turn 대신 30~45° 매 step rotation.
Static reference frame: cockpit, helmet rim 등 매 fixed visual anchor.
High refresh + reprojection: 90Hz 이상 + ATW/ASW.
Foveated rendering: 매 GPU budget 매 free up → frame stability.
매 응용
Beat Saber: stationary play, 매 sickness rare.
Half-Life Alyx: teleport + smooth 양쪽 옵션, comfort slider.
Microsoft Flight Sim VR: cockpit anchor, 매 long-session OK.
No Man's Sky VR: smooth locomotion default — 매 highest sickness reports.
💻 패턴
Comfort vignette (Unity URP)
// 매 movement speed 매 따라 매 peripheral mask 매 강도 조절usingUnityEngine;usingUnityEngine.Rendering.Universal;publicclassComfortVignette:MonoBehaviour{ [SerializeField]Vignettevignette; [SerializeField]CharacterControllerplayer; [SerializeField]floatmaxIntensity=0.6f;voidUpdate(){floatspeed=player.velocity.magnitude;floatt=Mathf.Clamp01(speed/4f);// 4 m/s 매 full vignettevignette.intensity.value=t*maxIntensity;}}
// 매 XRI 의 매 TeleportationProvider + arc raycaster 사용usingUnityEngine;usingUnityEngine.XR.Interaction.Toolkit.Locomotion.Teleportation;publicclassTeleportTrigger:MonoBehaviour{ [SerializeField]TeleportationProviderprovider;publicvoidRequestTeleport(Vector3destination){varreq=newTeleportRequest{destinationPosition=destination,matchOrientation=MatchOrientation.WorldSpaceUp,};provider.QueueTeleportRequest(req);}}
Frame timing budget check
// 매 frame budget 위반 매 detect — Quest 3 매 11.1ms@90Hz, 8.3ms@120HzvoidLateUpdate(){floatbudget=1f/Application.targetFrameRate;if(Time.unscaledDeltaTime>budget*1.2f){Debug.LogWarning($"Frame overran: {Time.unscaledDeltaTime*1000f:F1}ms");}}
IPD calibration
// OpenXR 매 user IPD 매 read — 매 잘못 설정 매 nausea 의 hidden causeusingUnityEngine.XR;floatGetIpdMeters(){varhead=InputDevices.GetDeviceAtXRNode(XRNode.Head);head.TryGetFeatureValue(CommonUsages.eyesData,outvareyes);varl=eyes.leftEye.position;varr=eyes.rightEye.position;returnVector3.Distance(l,r);}
Dynamic foveated rendering toggle (Quest 3)
// Quest 3 매 eye-tracked foveation — frame stability 의 강력한 도구OVRManager.eyeTrackedFoveatedRenderingEnabled=true;OVRManager.foveatedRenderingLevel=OVRManager.FoveatedRenderingLevel.HighTop;
매 결정 기준
상황
Approach
Casual / first-time user
Teleport + snap turn default
Action / FPS
Smooth + vignette + snap turn option
Sim (flight, racing)
Cockpit anchor, smooth, 90Hz+ guaranteed
Standing-only experience
거의 sickness-free — Beat Saber model
Seated narrative
Static camera + cuts, no virtual locomotion
기본값: Comfort menu 의 매 모든 option 매 expose — user 가 choose.