아이 컴포트 모션

Eye-comfort motion

헤드셋에서 멀미를 일으키는 "화면에 붙어 움직이는" 모션과, 편안한 "세상에 고정된" 모션을 가르는 규칙.

다른 이름: Vestibular-safe motionMotion sickness guideline
···
html
<div class="cols">
  <div class="col"><span class="lbl bad">Avoid</span><div class="chip bad" id="badc">Notice</div></div>
  <div class="col"><span class="lbl good">Prefer</span><div class="chip good" id="goodc">Notice</div></div>
</div>
css
body{background:radial-gradient(circle at 50% 30%,#191c30,#0a0a12 72%)}
.cols{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:clamp(20px,8vmin,48px)}
.col{display:grid;justify-items:center;gap:10px}
.lbl{font-size:clamp(9px,2.6vmin,11px);font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.lbl.bad{color:#ff8a8a}.lbl.good{color:#7be0a8}
.chip{padding:clamp(10px,3vmin,16px) clamp(16px,4vmin,24px);border-radius:12px;font-weight:700;color:#fff;
  font-size:clamp(11px,3vmin,14px)}
.chip.bad{background:linear-gradient(135deg,#c23a3a,#7a1f1f);animation:jitter .12s infinite}
.chip.good{background:linear-gradient(135deg,#1e9e64,#136b46);animation:drift 4.5s ease-in-out infinite}
@keyframes jitter{0%{transform:translate(0,0) rotate(0)}25%{transform:translate(3px,-2px) rotate(-2deg)}
  50%{transform:translate(-3px,2px) rotate(2deg)}75%{transform:translate(2px,2px) rotate(-1deg)}100%{transform:translate(0,0) rotate(0)}}
@keyframes drift{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}

귀의 평형 감각(전정 기관)은 "내가 움직이고 있다"는 신호를 따로 보낸다. 눈으로 보는 움직임과 이 신호가 어긋나면 멀미가 난다. 문제는 화면에 딱 붙어서(헤드 락) 사용자를 따라다니는 UI가 갑자기 빠르게 움직이거나, 사용자 의지와 무관하게 시야 전체가 흔들리는 연출이다 — 몸은 가만히 있는데 눈만 움직임을 보는 상황.

안전한 쪽은 세상에 고정된(월드 락) 모션이다. 콘텐츠가 실제 공간의 한 지점에서 자연스러운 속도로만 움직이면, 사용자의 실제 머리 움직임과 시각 정보가 일치해서 편안하다. 급가속·급회전·화면 전체 흔들림은 피하고, 카메라 이동이 꼭 필요하면 순간이동(디스플레이스먼트)이나 페이드로 대체하는 게 정석이다.

데모는 같은 문구를 두 방식으로 비교한다 — 왼쪽은 화면에 붙어 빠르게 흔들리는 "나쁜 예", 오른쪽은 공간에 고정된 채 천천히만 움직이는 "좋은 예"다.

언제 쓰나

카메라·시점을 움직이는 모든 연출에 이 기준을 적용하세요. 특히 로딩 화면, 전환 애니메이션에서 화면 전체를 흔들거나 빠르게 회전시키지 않습니다.