패스스루

Passthrough

헤드셋 바깥 카메라 영상을 실시간으로 눈앞에 보여줘서, 가상 UI를 실제 방 위에 겹쳐 놓는 것.

다른 이름: Mixed reality passthroughVideo see-through
···
js
const root=document.body;
const wrap=document.createElement('div');
wrap.style.cssText='position:absolute;inset:0;perspective:600px;overflow:hidden;background:linear-gradient(180deg,#1c1d2c 0%,#101018 55%,#0a0a10 100%)';
root.appendChild(wrap);
const floor=document.createElement('div');
floor.style.cssText='position:absolute;left:-40%;right:-40%;bottom:0;height:60%;'
 +'background-image:linear-gradient(rgba(140,150,210,.35) 1px,transparent 1px),linear-gradient(90deg,rgba(140,150,210,.35) 1px,transparent 1px);'
 +'background-size:40px 40px;transform:rotateX(72deg);transform-origin:bottom;opacity:.55';
wrap.appendChild(floor);
const noise=document.createElement('div');
noise.style.cssText='position:absolute;inset:0;background:repeating-linear-gradient(0deg,rgba(255,255,255,.025) 0 1px,transparent 1px 3px);mix-blend-mode:overlay';
wrap.appendChild(noise);
const badge=document.createElement('div');
badge.textContent='PASSTHROUGH';
badge.style.cssText='position:absolute;top:14px;left:14px;padding:4px 10px;border-radius:999px;background:rgba(255,90,90,.18);'
 +'border:1px solid rgba(255,120,120,.5);color:#ffb3b3;font:700 10px/1 system-ui;letter-spacing:.08em;animation:blink 1.6s ease-in-out infinite';
wrap.appendChild(badge);
const panel=document.createElement('div');
panel.innerHTML='<div style="width:70%;height:8px;border-radius:4px;background:rgba(255,255,255,.25);margin-bottom:8px"></div>'
 +'<div style="width:45%;height:8px;border-radius:4px;background:rgba(255,255,255,.25)"></div>';
panel.style.cssText='position:absolute;left:50%;top:52%;transform:translate(-50%,-50%);width:min(58%,220px);padding:18px;border-radius:16px;'
 +'background:linear-gradient(160deg,rgba(255,255,255,.16),rgba(255,255,255,.03));border:1px solid rgba(255,255,255,.22);'
 +'backdrop-filter:blur(8px);box-shadow:0 24px 44px rgba(0,0,0,.55)';
wrap.appendChild(panel);
const style=document.createElement('style');
style.textContent='@keyframes blink{0%,100%{opacity:1}50%{opacity:.4}}';
document.head.appendChild(style);

완전히 가려진 VR과 달리, 패스스루는 헤드셋 외부 카메라가 찍은 실제 주변을 실시간으로 렌더링해 사용자가 여전히 자기 방(소파, 책상, 다른 사람)을 볼 수 있게 한다. 그 위에 가상의 창·버튼·알림을 겹쳐 띄우는 것이 혼합현실(MR) UI의 기본 형태다.

패스스루가 있으면 "여기가 현실 공간인지 가상 공간인지"를 UI가 명확히 구분해줘야 한다 — 가상 요소는 그림자, 약간의 발광, 유리 재질처럼 현실과 구분되는 시각적 단서를 갖는 경우가 많다. 또한 현실 세계가 바로 보이므로 완전 몰입보다 안전성 면에서 유리해, 짧은 작업이나 협업 시나리오에 자주 쓰인다.

데모는 격자 바닥과 방 벽으로 단순화한 "패스스루 방" 위에 반투명 UI 패널을 띄운다. 방은 살짝 흔들리는 카메라 노이즈로, 그 위 UI는 선명한 렌더링으로 대비시켜 "촬영된 현실 위의 가상"이라는 느낌을 만든다.

언제 쓰나

짧은 작업, 걸어 다녀야 하는 작업, 다른 사람과 같은 공간을 공유하는 상황에 적합합니다. 가상 요소는 현실과 구분되는 재질을 줘서 혼동을 줄이세요.