WebXR 증강현실 모듈 - 레벨 1

W3C 공식 권고안 후보 초안,

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2025/CRD-webxr-ar-module-1-20250425/
최신 공개 버전:
https://www.w3.org/TR/webxr-ar-module-1/
에디터스 드래프트:
https://immersive-web.github.io/webxr-ar-module/
이전 버전:
히스토리:
https://www.w3.org/standards/history/webxr-ar-module-1/
구현 보고서:
https://wpt.fyi/results/webxr/ar-module?label=experimental&label=master&aligned
피드백:
깃허브
에디터:
(Google)
(Google [2020년까지 모질라])
(Meta)
이전 에디터:
(Amazon [2018년까지 Microsoft])
참여:
이슈 등록 (오픈 이슈)
메일링 리스트 아카이브
W3C의 #immersive-web IRC

요약

WebXR 증강현실 모듈은 WebXR 디바이스 API를 AR 하드웨어에서 제공되는 기능으로 확장합니다.

이 문서의 상태

이 섹션은 이 문서가 발행될 당시의 상태를 설명합니다. 현재 W3C 발행물 목록과 이 기술 보고서의 최신 개정판은 W3C 표준 및 초안 색인 https://www.w3.org/TR/에서 확인할 수 있습니다.

Immersive Web Working Group은 아직 그룹에서 처리하지 않은 모든 버그 리포트 목록을 관리합니다. 이 초안은 아직 워킹그룹에서 논의해야 할 미해결 이슈 일부를 강조합니다. 이 이슈들의 결과(유효성 포함)에 대한 결정은 내려지지 않았습니다. 미해결 이슈에 대한 명세 제안 텍스트를 포함한 풀 리퀘스트를 적극 권장합니다.

이 문서는 Immersive Web Working Group에 의해 Recommendation 트랙을 사용하여 공식 권고안 후보 초안(Candidate Recommendation Draft)으로 발행되었습니다. 이 문서는 W3C 권고안이 되는 것을 목표로 하고 있습니다.

공식 권고안 후보 초안(Candidate Recommendation)으로서의 발행은 W3C 및 그 회원사의 지지를 의미하지 않습니다. Candidate Recommendation Draft는 워킹그룹이 후속 Candidate Recommendation Snapshot에 포함할 예정인 변화를 통합합니다. 이 문서는 초안이므로 언제든 업데이트, 대체 또는 폐기될 수 있습니다. 현재 진행중인 작업으로서만 인용하는 것이 적절합니다.

이 문서가 공식 권고안(Proposed Recommendation) 단계로 들어가기 위한 기준은 이 명세서의 모든 기능을 구현한 최소 두 개의 독립적이고 상호운용 가능한 유저 에이전트가 있어야 하며, 워킹그룹에서 작성한 테스트 스위트를 통과하여 사용자 에이전트 테스트를 만족해야 합니다. 워킹그룹은 진행 상황을 추적하기 위한 구현 보고서를 작성할 예정입니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에 의해 생산되었습니다. W3C는 해당 그룹 산출물과 관련하여 제출된 특허 공개의 공개 목록을 관리합니다. 해당 페이지에서는 특허 공개 방법도 안내합니다. 어떤 개인이 필수 특허 청구(essential claim)가 있다고 판단된 특허를 알게 된다면 W3C 특허 정책 6절에 따라 정보를 공개해야 합니다.

이 문서는 2023년 11월 3일 W3C 프로세스 문서의 적용을 받습니다.

마지막 초안 이후 변경 사항은 변경 사항 섹션을 참고하세요.

이 WebXR 증강현실 모듈은 WebXR 디바이스 API를 보완하는 모듈로 설계되었으며, 원래는 WebXR 디바이스 API에 포함되어 있다가 코어와 모듈로 분리되었습니다.

1. 소개

가상현실(VR) 및 증강현실(AR) 애플리케이션을 지원하는 하드웨어가 이제 소비자에게 널리 제공되고 있으며, 몰입형 컴퓨팅 플랫폼으로서 새로운 기회와 과제를 동시에 제시합니다. 몰입형 하드웨어와 직접 상호작용할 수 있는 능력은 웹이 이러한 환경에서 일급 시민으로 제대로 작동할 수 있도록 하는 데 매우 중요합니다. WebXR 증강현실 모듈은 AR 하드웨어에서 코드가 실행될 때 개발자에게 제공되는 기능을 확장합니다.

1.1. 용어

증강현실은 가상 콘텐츠가 현실 세계 환경과 정렬 및 합성되어 사용자에게 표시되는 XR 경험의 일종을 나타냅니다.

XR 하드웨어는 디스플레이 기술에 따라 가산광, 패스스루, 불투명 등으로 분류할 수 있습니다.

가산광(additive light) 디스플레이 기술을 갖춘 장치는 시스루(see-through)라고도 하며, 투명 광학 디스플레이를 사용하여 가상 콘텐츠를 표시합니다. 이런 장치에서는 사용자가 세션 생성 시 개발자 요청과 관계없이 항상 현실 세계 환경을 볼 수 있습니다.

참고: 이러한 장치는 일반적으로 소프트웨어에서 합성을 수행하지 않고, 투명 디스플레이가 제공하는 자연스러운 합성에 의존합니다.

이러한 장치의 예로는 Hololens 2Magic Leap 장치가 있습니다.

패스스루(pass-through) 디스플레이 기술이 적용된 장치는 불투명 디스플레이를 사용하여 가상 콘텐츠와 현실 세계 환경의 카메라 스트림을 합성합니다. 이러한 장치에서는 현실 세계 환경이 세션 생성 시 개발자가 명시적으로 요청했을 경우에만 표시됩니다.

참고: 이러한 장치는 일반적으로 카메라로 현실 세계 이미지를 수집하고, 해당 이미지와 AR 장면을 소프트웨어에서 합성하여 사용자에게 표시합니다.

이러한 장치의 예로는 모바일폰을 활용한 핸드헬드 AR 및 Varjo XR-3 장치가 있습니다.

불투명(opaque) 디스플레이 기술을 갖춘 장치는 현실 세계 환경을 완전히 가리며, 현실 세계 환경을 볼 수 있는 방법을 제공하지 않습니다.

참고: 이러한 장치는 일반적으로 VR 장치로서 "immersive-ar" 세션을 허용하여 VR 환경에서 AR 콘텐츠와의 호환 경로를 제공합니다.

2. WebXR 디바이스 API 통합

2.1. XRSessionMode

WebXR 디바이스 APIXRSessionXRSessionMode별로 분류합니다. 이 모듈은 "immersive-ar" XRSessionMode 열거형의 사용을 지원합니다.

"immersive-ar" 세션 모드는 세션 출력이 독점적 접근권을 획득하여 몰입형 XR 장치의 디스플레이로 전달되고 콘텐츠가 혼합(blended)되어 현실 세계 환경과 합성됨을 의미합니다.

호환 가능한 하드웨어에서는 UA가 "immersive-vr" 세션, "immersive-ar" 세션 또는 둘 다 지원할 수 있습니다. "immersive-ar" 세션 모드를 지원한다고 해서 UA에 "inline" 세션 지원 요구가 바뀌는 것은 아닙니다.

참고: 즉, "immersive-ar" 세션은 "immersive-vr" 세션이 지원하는 모든 기능 및 참조 공간(reference space)를 지원하며, 둘 다 몰입형 세션이기 때문임을 의미합니다.

다음 코드는 "immersive-ar" 세션 지원 여부를 검사합니다.
navigator.xr.isSessionSupported('immersive-ar').then(supported => {
  if (!supported) { return; }
  // 'immersive-ar' 세션이 지원됩니다.
  // 페이지는 사용자에게 AR 지원을 안내해야 합니다.
}
다음 코드는 "immersive-ar" XRSession 을 가져옵니다.
let xrSession;

navigator.xr.requestSession("immersive-ar").then(session => {
  xrSession = session;
});

2.2. XREnvironmentBlendMode

XR 콘텐츠를 렌더링할 때, XR 합성기현실 세계 환경과 렌더된 픽셀이 어떻게 혼합되는지 파악하는 것이 유용합니다.
enum XREnvironmentBlendMode {
  "opaque",
  "alpha-blend",
  "additive"
};

partial interface XRSession {
  // Attributes
  readonly attribute XREnvironmentBlendMode environmentBlendMode;
};

environmentBlendMode 속성은 XREnvironmentBlendMode 값 중 현재 혼합 방식과 일치하는 값을 반드시 보고해야 하며, 이는 XR 합성기가 수행 중인 방식입니다.

2.3. XRInteractionMode

애플리케이션이 사용자가 상호작용할 수 있는 UI를 그려야 할 때가 있습니다. WebXR은 핸드헬드폰 AR과 헤드셋 AR 등 다양한 폼팩터를 지원합니다. 각 폼팩터에 따라 UI가 위치하는 공간도 달라져야 하며, 예를 들어 폰 AR에서는 UI가 화면에 직접 표시될 수 있고, 헤드셋 AR에서는 사용자가 컨트롤러로 상호작용할 수 있도록 UI가 머리에서 약간 떨어진 위치에 표시될 수 있습니다.

enum XRInteractionMode {
    "screen-space",
    "world-space",
};

partial interface XRSession {
  // Attributes
  readonly attribute XRInteractionMode interactionMode;
};

interactionMode 속성은 현재 세션에서 애플리케이션이 상호작용형 UI를 그려야 할 최적 공간(UA 기준)을 기술합니다.

참고: WebXR DOM Overlays 모듈이 지원된다면 이 시나리오 중 일부에서 활용될 수 있습니다.

2.4. XR 합성기 동작

XR 장치로 콘텐츠를 표시할 때, XR 합성기혼합 방식(blend technique)을 적용하여 가상 픽셀을 현실 세계 환경과 결합해야 합니다. 적합한 기법은 XR 장치디스플레이 기술모드에 따라 결정됩니다.

참고: 알파 혼합 환경 혼합을 사용하는 장치에서 알파 채널이 없는 baseLayer를 사용하면 현실 세계 환경이 완전히 가려지게 됩니다. 이는 개발자 의도라 간주하며, UA는 해당 경우 현실 세계 환경 합성을 중단하여 최적화를 할 수 있습니다.

XR 합성기는 경험 최적화를 위해 추가적인 색상이나 픽셀 조정을 할 수 있습니다. 합성 타이밍은 혼합 방식이나 현실 세계 환경의 출처에 따라 달라져서는 안 되며, 실제 세계 기하에 대한 픽셀 깊이에 의한 오클루전을 수행해서는 안 됩니다. 오로지 렌더 콘텐츠만 현실 배경 위에 합성되어야 합니다.

참고: 향후 모듈에서는 현실 세계 환경과의 자동 또는 수동 픽셀 오클루전이 가능할 수도 있습니다.

XR 합성기는 페이지에 카메라 내재 정보, 미디어 스트림, 현실 세계 기하 등의 추가 정보를 자동으로 제공해서는 안 됩니다.

참고: 개발자는 XR 장치의 카메라에 대해 Media Capture and Streams 명세를 사용하여 요청할 수 있습니다. 다만, 이렇게 해도 해당 카메라 위치와 네이티브 원점 간의 XRRigidTransform을 질의하는 기능은 제공되지 않으며, 현실 세계 환경 뷰와 일치시키는 데 필요한 카메라 내재 정보를 보장된 방식으로 얻는 방법도 없습니다. 때문에 효과적인 컴퓨터 비전 알고리즘 수행이 크게 제약될 수 있습니다. 향후 모듈이나 명세에서 해당 기능이 제공될 수 있습니다.

2.5. 일인칭 관찰자 뷰

많은 AR 장치에는 카메라가 있지만, 이 카메라는 일반적으로 눈과 정렬되어 있지 않습니다. 세션을 비디오 캡처하여 스트리밍하거나 파일로 저장할 때, 카메라 피드를 렌더링된 눈 피드 중 하나와 단순히 합성하는 것은 내부 오프셋이 존재하므로 최적의 방법이 아닙니다. 장치에 따라 재투영이나 기타 기법을 사용해서 스트림을 보정할 수 있지만, 일부는 보조 뷰일인칭 관찰자 뷰를 노출할 수 있으며, 이 뷰의 eye 속성은 "none"입니다.

사이트 컨텐츠는 반드시 "secondary-views" 기능 서술자를 활성화하여 일인칭 관찰자 뷰 수신을 명시적으로 선택(opt-in)해야 합니다.

세션에서 "secondary-views" 기능을 활성화했다고 해서, 일인칭 관찰자 뷰가 모든 프레임에서 조건 없이 항상 제공되는 것은 아니며, 캡처가 진행 중일 때만 해당 프레임의 views 배열에 포함되어 노출됩니다.

XRSession 에서 environmentBlendMode로 노출된 혼합 방식이 있더라도, 일인칭 관찰자 뷰에서는 항상 알파 혼합 환경 혼합을 사용합니다.

사이트 컨텐츠는 어떤 뷰가 일인칭 관찰자 뷰인지 판단하여 각기 다른 혼합 방식에 대응하거나, UI 요소를 다르게 렌더링할 수 있습니다.XRView 객체 중 일인칭 관찰자 뷰에 해당하는 객체는 isFirstPersonObserver 속성이 true를 반환합니다.

partial interface XRView {
  readonly attribute boolean isFirstPersonObserver;
};
대부분의 프로그램에서 보조 뷰 지원은 다음만 처리하면 충분합니다:
let session = await navigator.xr.requestSession("immersive-ar", {optionalFeatures: ["secondary-views"]});
let space = await session.requestReferenceSpace("local");
// 기타 초기 설정
let gl = /* 그래픽 컨텍스트 획득 */;

session.requestAnimationFrame(function(frame) {
  let views = frame.getViewerPose(space);

  // 꼭 `view of views` 반복문을 사용해야 하며,
  // 처음 두~세 개 요소만 직접 접근하면 안 됨
  for (view of views) {
    render(session, gl, view);
  }
});

function render(session, gl, view) {
  // 해당 뷰에 컨텐츠 렌더링
  // 필요하다면 view.isFirstPersonObserver를 사용해 합성 정보 등 구분 가능
}

3. 프라이버시 및 보안 고려사항

AR 모듈의 구현에서는 카메라 이미지를 컨텐츠에 노출해서는 안 되며, 현실 세계와의 모든 합성은 반드시 XR 합성기를 통해 자체적으로 처리해야 합니다. 이 모듈의 추가 확장은 현실 세계 정보(예: 카메라 원시 이미지, 조명 추정 등)를 노출할 수 있으나 반드시 사용자 동의를 필요로 하는 별도의 기능 서술자로 동작을 제한해야 합니다.

확장 대상인 WebXR 디바이스 API와 비교 시, AR 모듈은 environmentBlendModeinteractionMode 속성을 통해 실행 중인 장치의 성격에 대한 추가 세부 정보를 제공합니다. 웹사이트는 "immersive-ar" XR 세션을 시작할 수 있으며, XR 장면 뒤에 현실 세계가 합성됩니다.

이 모듈이 웹사이트에 카메라 이미지를 접근시키지 않더라도, 최종 사용자에게는 이 사실이 명확하지 않을 수 있으므로 UA가 이를 명확히 안내해야 합니다.

변경 사항

2019년 10월 10일 첫 공개 워킹드래프트에서의 변경 사항

4. 감사의 글

다음 인물이 WebXR 디바이스 API 설계에 기여했습니다:

그리고 이 모든 여정을 시작해 준 Vladimir Vukicevic (Unity)에게 특별히 감사 드립니다!

적합성

문서 규약

적합성 요구사항은 설명적 주장과 RFC 2119 용어의 조합으로 표현됩니다. 본 문서의 규범 부분에서 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL”과 같은 키워드는 RFC 2119에 설명된 대로 해석되어야 합니다. 읽기 쉽게 하기 위해, 이 명세서에서 해당 단어들은 모두 대문자로 표기되어 있지 않습니다.

명시적으로 비규범적, 예시, 노트로 표시된 섹션을 제외하면 이 명세서의 모든 본문은 규범적입니다. [RFC2119]

이 명세서 내 예시는 “for example(예를 들어)”라는 말로 도입되거나, class="example"로 규범적 본문과 구분합니다. 예시:

이것은 정보 제공 목적의 예시입니다.

정보성 노트는 “Note(참고)”로 시작하며, class="note"로 규범 본문과 구분합니다. 예시:

참고, 이것은 정보 노트입니다.

적합한 알고리즘

알고리즘의 일부로써 명령형으로 표현된 요구사항(예: "strip any leading space characters"(앞쪽 공백을 제거한다), "return false and abort these steps"(false를 반환하고 단계를 중단한다))은 알고리즘 도입 시 사용된 키워드("must", "should", "may" 등)의 의미로 해석되어야 합니다.

알고리즘 또는 규정 단계로 제시된 적합성 요구는, 최종 결과가 동등하다면 어떠한 방법으로 구현해도 됩니다. 특히, 이 명세서에서 정의한 알고리즘은 이해하기 쉽도록 설계되어 있으며, 성능을 위한 것이 아닙니다. 구현자는 최적화를 권장합니다.

색인

이 명세서가 정의하는 용어

참조 정의 용어

참고 문헌

규범적 참고문헌

[COMPOSITING-1]
Chris Harrelson. Compositing and Blending Level 1. 2024년 3월 21일. CRD. URL: https://www.w3.org/TR/compositing-1/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997년 3월. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/
[WEBXR]
Brandon Jones; Manish Goregaokar; Rik Cabanier. WebXR Device API. 2025년 4월 17일. CRD. URL: https://www.w3.org/TR/webxr/

정보성 참고문헌

[MEDIACAPTURE-STREAMS]
Cullen Jennings; et al. Media Capture and Streams. 2025년 4월 24일. CRD. URL: https://www.w3.org/TR/mediacapture-streams/

IDL 색인

enum XREnvironmentBlendMode {
  "opaque",
  "alpha-blend",
  "additive"
};

partial interface XRSession {
  // Attributes
  readonly attribute XREnvironmentBlendMode environmentBlendMode;
};

enum XRInteractionMode {
    "screen-space",
    "world-space",
};

partial interface XRSession {
  // Attributes
  readonly attribute XRInteractionMode interactionMode;
};

partial interface XRView {
  readonly attribute boolean isFirstPersonObserver;
};