133 lines
4.6 KiB
Markdown
133 lines
4.6 KiB
Markdown
---
|
|
id: wiki-2026-0508-시각-전정-충돌-visual-vestibular-confl
|
|
title: 시각-전정 충돌 (Visual-vestibular conflict)
|
|
category: 10_Wiki/Topics
|
|
status: verified
|
|
canonical_id: self
|
|
aliases: [Visual-vestibular conflict, Sensory conflict, VR motion sickness]
|
|
duplicate_of: none
|
|
source_trust_level: A
|
|
confidence_score: 0.9
|
|
verification_status: applied
|
|
tags: [vr, perception, hci, motion-sickness]
|
|
raw_sources: []
|
|
last_reinforced: 2026-05-10
|
|
github_commit: pending
|
|
tech_stack:
|
|
language: csharp
|
|
framework: unity-vr
|
|
---
|
|
|
|
# 시각-전정 충돌 (Visual-vestibular conflict)
|
|
|
|
## 매 한 줄
|
|
> **"매 눈은 매 움직임을 보지만 매 inner ear 는 매 정지 상태를 보고할 때 매 brain 의 매 mismatch → motion sickness"**. Reason & Brand 의 매 1975 sensory conflict theory. 매 2026 modern VR (Quest 4, Vision Pro 2) 은 매 90+ Hz refresh, foveated rendering, locomotion comfort options 으로 매 mitigation, but 매 root cause 매 미해결.
|
|
|
|
## 매 핵심
|
|
|
|
### 매 vestibular system
|
|
- **Semicircular canals**: 매 angular acceleration (회전).
|
|
- **Otolith organs (utricle, saccule)**: 매 linear acceleration + 매 gravity.
|
|
- **Brain integration**: 매 visual + vestibular + proprioception → 매 unified self-motion model.
|
|
|
|
### 매 conflict types in VR
|
|
- **Visual motion + vestibular still**: 매 cockpit / vehicle simulator → 매 cybersickness.
|
|
- **Visual still + vestibular motion**: 매 reading in moving car → 매 carsickness.
|
|
- **Mismatched magnitude**: 매 head-locked HUD 의 lag.
|
|
|
|
### 매 응용
|
|
1. VR locomotion design (teleport vs smooth).
|
|
2. Motion-to-photon latency budget (<20ms).
|
|
3. Vestibular adaptation training.
|
|
|
|
## 💻 패턴
|
|
|
|
### Comfort settings (Unity XR Toolkit)
|
|
```csharp
|
|
public class ComfortLocomotion : MonoBehaviour {
|
|
[SerializeField] LocomotionMode mode = LocomotionMode.Teleport;
|
|
[SerializeField] bool vignetteOnTurn = true;
|
|
[SerializeField] float snapTurnAngle = 30f;
|
|
|
|
public void Move(Vector2 input) {
|
|
if (mode == LocomotionMode.Teleport) {
|
|
if (input.magnitude > 0.5f) ShowTeleportArc();
|
|
} else {
|
|
if (vignetteOnTurn && Mathf.Abs(input.x) > 0.1f)
|
|
vignette.intensity.value = 0.6f;
|
|
transform.Translate(new Vector3(input.x, 0, input.y) * speed * Time.deltaTime);
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Foveated rendering hint (OpenXR)
|
|
```cpp
|
|
XrFoveationLevelFB level = XR_FOVEATION_LEVEL_HIGH_FB;
|
|
xrUpdateFoveationFB(session, &foveationProfile);
|
|
// Reduces GPU load → enables 120Hz on mobile HMD → less conflict
|
|
```
|
|
|
|
### Motion-to-photon measurement
|
|
```python
|
|
# High-speed camera (1000fps) measuring HMD pixel response
|
|
# vs IMU motion event timestamp
|
|
def m2p_latency(imu_events, pixel_changes):
|
|
paired = pair_nearest(imu_events, pixel_changes)
|
|
return np.median([p.pixel_t - p.imu_t for p in paired])
|
|
```
|
|
|
|
### Snap turn (reduces conflict vs smooth turn)
|
|
```csharp
|
|
void OnTurnInput(float x) {
|
|
if (Mathf.Abs(x) > 0.7f && Time.time - lastTurn > 0.3f) {
|
|
transform.Rotate(0, Mathf.Sign(x) * 30f, 0);
|
|
lastTurn = Time.time;
|
|
}
|
|
}
|
|
```
|
|
|
|
### Vignette during locomotion (tunneling)
|
|
```hlsl
|
|
// Fragment shader
|
|
float dist = distance(uv, float2(0.5, 0.5));
|
|
float v = smoothstep(0.3, 0.5, dist) * comfortIntensity;
|
|
color.rgb *= 1.0 - v;
|
|
```
|
|
|
|
## 매 결정 기준
|
|
| User profile | Recommended |
|
|
|---|---|
|
|
| 매 VR novice | Teleport + snap turn + tunneling |
|
|
| 매 experienced | Smooth + optional comfort |
|
|
| 매 cockpit (driving sim) | Fixed cockpit reference frame |
|
|
| 매 spectator (seated) | Forced FoV reduction during motion |
|
|
|
|
**기본값**: 매 teleport default + 매 snap-turn 30° + 매 tunneling on.
|
|
|
|
## 🔗 Graph
|
|
- 부모: [[VR/AR]] · [[Perception]]
|
|
- 변형: [[안구 운동 기능 Oculomotor functions]]
|
|
- 응용: [[VR Locomotion]] · [[Cybersickness Mitigation]]
|
|
- Adjacent: [[실재감 Presence]] · [[Motion-to-photon Latency]]
|
|
|
|
## 🤖 LLM 활용
|
|
**언제**: 매 comfort design 의 trade-off 설명 / 매 user instruction 작성.
|
|
**언제 X**: 매 medical diagnosis of vestibular disorder — 매 clinician 필수.
|
|
|
|
## ❌ 안티패턴
|
|
- **Forced smooth locomotion**: 매 onboarding 에서 매 novice 의 매 nausea.
|
|
- **Low refresh rate (<72Hz)**: 매 modern HMD 매 minimum 90Hz.
|
|
- **High latency (>30ms M2P)**: 매 conflict 매 magnify.
|
|
- **Camera control by game (cutscene with movement)**: 매 강한 sickness inducer.
|
|
|
|
## 🧪 검증 / 중복
|
|
- Verified (Reason & Brand 1975 *Motion Sickness*; LaViola et al. *3D User Interfaces 2e*; Meta XR Comfort Guidelines 2025).
|
|
- 신뢰도 A.
|
|
|
|
## 🕓 Changelog
|
|
| 날짜 | 변경 |
|
|
|---|---|
|
|
| 2026-05-08 | Phase 1 |
|
|
| 2026-05-10 | Manual cleanup — sensory conflict theory + Unity XR comfort 패턴 추가 |
|