본문 바로가기
카테고리 없음

WebXR — 설치 없는 브라우저 AR/VR

by SuldenLion 2026. 6. 28.
반응형
WebXR — 설치 없는 브라우저 AR/VR
IT 특수분야 · AR/VR PLATFORM 04 / 06
W3C · Immersive Web

WebXR — 설치 없는 브라우저 AR/VR

앱스토어도, 다운로드도 없다. URL 하나로 AR과 VR을 연다. WebXR Device API는 웹 브라우저가 헤드셋·모바일 AR 하드웨어에 직접 접근하게 해주는 W3C 표준이며, "링크 한 번이면 곧 경험"이라는 웹의 강점을 몰입형 미디어로 가져온다.

WebXR Device API Web Standard JavaScript · WebGL/WebGPU

WebXR이란 무엇인가

WebXR Device API는 웹 브라우저에서 가상현실(VR)과 증강현실(AR)을 구현하기 위한 표준 API다. 과거 WebVR을 대체하며 VR과 AR을 하나의 모델로 통합했고, "XR"은 둘을 아우르는 우산 용어다. 핵심 가치는 단 하나, 마찰 없는 접근성이다. 사용자는 링크를 클릭하는 것만으로 헤드셋을 쓰거나 휴대폰을 들어 즉시 몰입형 콘텐츠에 진입한다.

WebXR은 직접 화면을 그리지 않는다. 대신 기기의 포즈(위치·자세), 입력 컨트롤러 상태, 그리고 그릴 대상인 프레임버퍼를 제공한다. 실제 렌더링은 WebGL(또는 WebGPU)이 담당한다. 즉 WebXR은 "어디를 어떤 각도로 보고 있는지"를 알려주고, 화면을 채우는 일은 그래픽 API에 맡기는 분업 구조다.

📌 한 줄 정의

WebXR은 브라우저가 VR/AR 하드웨어의 포즈·입력·렌더 타깃에 접근하도록 표준화한 API이며, 렌더링은 WebGL/WebGPU가 맡는다. 설치 없이 URL로 몰입형 경험을 전달한다.

세션 모델

WebXR의 모든 것은 XRSession에서 시작한다. 세션 타입에 따라 경험의 성격이 결정된다.

VR
immersive-vr
현실을 가리고 완전한 가상 환경에 몰입
AR
immersive-ar
카메라 패스스루 위에 가상 콘텐츠 합성
2D
inline
일반 웹페이지 안에 미리보기로 렌더

주요 기능 모듈

🛬
Hit Test
현실 표면에 레이를 쏘아 객체를 놓을 지점을 찾는다.
📍
Anchors
가상 객체를 현실 공간에 고정해 위치를 유지한다.
Hand Input
손가락 관절 단위로 핸드 트래킹 데이터를 제공한다.
💡
Light Estimation
주변 조명을 추정해 가상 객체를 환경에 어울리게 비춘다.
📐
Depth Sensing
깊이 정보를 받아 가림(occlusion) 효과를 구현한다.
🎮
Gamepad
VR 컨트롤러의 버튼·축·트리거 입력을 노출한다.

최소 예제 — AR 세션 진입

WebXR 지원 여부를 확인하고 AR 세션을 시작하는 가장 기본적인 흐름이다. 보안상 HTTPS와 사용자 제스처(클릭)가 반드시 필요하다.

// 1) AR 지원 여부 확인
if (navigator.xr) {
  const supported = await navigator.xr.isSessionSupported('immersive-ar');
  startBtn.disabled = !supported;
}

// 2) 버튼 클릭(사용자 제스처)으로 세션 시작
startBtn.addEventListener('click', async () => {
  const session = await navigator.xr.requestSession('immersive-ar', {
    requiredFeatures: ['hit-test', 'local-floor'],
  });

  const canvas = document.createElement('canvas');
  const gl = canvas.getContext('webgl', { xrCompatible: true });
  session.updateRenderState({ baseLayer: new XRWebGLLayer(session, gl) });

  const refSpace = await session.requestReferenceSpace('local-floor');

  // 3) 매 프레임 포즈를 받아 렌더
  session.requestAnimationFrame(function onFrame(t, frame) {
    const pose = frame.getViewerPose(refSpace);
    if (pose) {
      for (const view of pose.views) {
        // view.transform / view.projectionMatrix 로 WebGL 렌더
      }
    }
    session.requestAnimationFrame(onFrame);
  });
});

프레임워크 — 직접 짜지 않는 길

위 코드는 저수준이다. 실무에서는 WebGL과 WebXR을 직접 다루기보다 상위 프레임워크를 쓴다.

도구성격적합한 경우
Three.js범용 3D 라이브러리 (WebXRManager 내장)세밀한 제어가 필요한 커스텀 씬
A-FrameHTML 선언형 (엔티티-컴포넌트)빠른 프로토타이핑, 마크업 친화
Babylon.js풀기능 3D 엔진고급 머티리얼·물리·툴링
PlayCanvas에디터 기반 웹 엔진팀 협업·경량 배포
⚠️ 한계와 현실

WebXR은 네이티브 SDK 대비 기능과 성능에서 뒤처질 수 있다. 브라우저·플랫폼별 지원 편차가 크고(특히 iOS Safari의 AR 지원은 제한적), LiDAR 정밀 메시나 최신 추적 기능에 대한 접근이 늦다. 보안 제약(HTTPS, 권한, 사용자 제스처)도 항상 고려해야 한다.

언제 WebXR을 선택하는가

WebXR이 최적인 경우

설치 없는 즉시 접근 링크 공유·QR 배포 마케팅/제품 미리보기 크로스 디바이스 도달 웹 기술 스택 활용

반대로 최고 수준의 그래픽·추적·성능이 필요한 본격 게임이나 전문 도구라면 네이티브 헤드셋 SDK가 낫다. 그 대표적 사례가 Meta Quest SDK다.


— IT 특수분야 · AR/VR 시리즈 #04 WebXR —
반응형

댓글