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
フィードバック:
GitHub
編集者:
(Google)
(Google [2020年までMozilla])
(Meta)
前編集者:
(Amazon [2018年までMicrosoft])
参加方法:
課題を作成 (公開中の課題)
メーリングリストアーカイブ
W3Cの #immersive-web IRC

概要

WebXR拡張現実モジュールは、WebXR Device APIにARハードウェアで利用可能な機能を追加します。

この文書の位置付け

このセクションは、公開時点でのこの文書の位置付けについて説明しています。現在のW3C出版物の一覧および本技術報告書の最新版は、W3C標準・草案インデックス(https://www.w3.org/TR/)でご覧いただけます。

Immersive Web作業グループは、未対応バグ報告の一覧を管理しています。このドラフトは、作業グループで今後議論される保留中の課題のいくつかを強調しています。これらの課題の妥当性も含めて結論はまだ出ていません。 保留中の課題に対する仕様案のプルリクエストを強く推奨します。

この文書は、Immersive Web作業グループによって、勧告トラックを用いて候補勧告草案として公開されました。本書はW3C勧告となることを意図しています。

候補勧告として公開された文書は、W3Cおよびそのメンバーによる保証を意味しません。 候補勧告草案は、作業グループが次回候補勧告スナップショットに含める予定の変更点を反映しています。 この文書はドラフトであり、随時更新・置換、または廃止される可能性があります。進行中の作業以外として本文書を引用するのは不適切です。

この文書が勧告案段階に進むための基準は、本仕様の全ての機能を実装した最低2つの独立かつ相互運用可能なユーザーエージェントがあり、作業グループが策定したテストスイートのユーザーエージェントテストを合格していることです。作業グループは進捗を追跡する実装報告書を準備します。

この文書は、W3C特許ポリシーに基づき活動するグループによって作成されました。W3Cは、同グループ成果物に関してなされた公開特許開示リストを管理しています。そのページには開示方法の案内も含まれています。ある個人が本質的請求(Essential Claim(s))を含む特許を認識した場合、その情報をW3C特許ポリシー第6節に従って開示しなければなりません。

この文書は、2023年11月3日付W3Cプロセス文書に従って管理されます。

前回ドラフトからの変更点については、変更点セクションを参照してください。

このWebXR拡張現実モジュールは、WebXR Device APIに追加するモジュールとして設計されており、元はコアおよびモジュールに分割される前のWebXR Device APIに含まれていました。

1. イントロダクション

仮想現実(VR)および拡張現実(AR)アプリケーションを可能にするハードウェアは、現在、消費者が広く利用できるようになり、没入型の計算プラットフォームとして新たな機会と課題を提供しています。没入型ハードウェアと直接インタラクションできる能力は、ウェブがこの環境の中で第一級の市民として機能するために不可欠です。WebXR拡張現実モジュールは、開発者がARハードウェア上でコードを実行する際に利用可能な機能を拡張します。

1.1. 用語

Augmented Realityは、仮想コンテンツが現実世界の 環境と位置合わせされ、合成されたXR体験の一分類を指します。

XRハードウェアは、表示技術に基づいて分類できます:加算型ライトパススルー、および不透明

加算型ライト表示技術を持つデバイス、別名「シースルー」は、半透明の光学ディスプレイを使用して仮想コンテンツを提示します。これらのデバイスでは、ユーザーは常に 現実世界の 環境をセッション作成時に開発者の要求に関係なく見ることができます。

注: このようなデバイスは通常ソフトウェアでコンポジット処理を行わず、半透明ディスプレイによる自然な合成に依存します。

例としては、Hololens 2Magic Leapなどのデバイスがあります。

パススルー表示技術を持つデバイスは、不透明ディスプレイを利用し仮想コンテンツと 現実世界の環境のカメラ映像を合成します。これらのデバイスでは、現実世界の 環境は、開発者がセッション作成時に明示的に要求した場合のみ表示されます。

注: この種のデバイスは通常カメラを介して現実世界の画像を収集し、ARシーンとソフトウェアで合成してユーザーに表示します。

例としては、携帯電話による手持ち型モバイルARや、Varjo XR-3デバイスがあります。

不透明 表示技術を持つデバイスは、現実世界の環境を完全に隠し、現実世界の環境を表示する方法を提供しません。

注: このようなデバイスは通常VRデバイスで、ARコンテンツの互換性パスを提供する目的で"immersive-ar" セッションを許可しています。

2. WebXR デバイスAPI統合

2.1. XRSessionMode

WebXR デバイス APIXRSessionXRSessionModeに基づいて分類しています。このモジュールにより、"immersive-ar" XRSessionMode 列挙型の利用が可能です。

"immersive-ar"セッションモードは、セッションの出力が排他的アクセス没入型XR デバイスディスプレイに与え、コンテンツがブレンドされて現実世界の環境と共に表示されることを示します。

対応ハードウェアでは、ユーザーエージェントは"immersive-vr""immersive-ar"セッション、または両方をサポートできます。追加の"immersive-ar"セッションモードをサポートしても、ユーザーエージェントが"inline"セッションをサポートする要件は変わりません。

注:これは"immersive-ar" セッションが"immersive-vr"セッションと同じ機能やリファレンス空間をサポートすることを意味します。両方とも没入型セッションであるためです。

以下のコードは"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を描画するのに最適な空間(ユーザーエージェントによる判定)を示します。

注: WebXR DOM Overlaysモジュールがサポートされていれば、一部の場合に使用可能です。

2.4. XR合成エンジンの動作

コンテンツを XRデバイスに提示する際、XR合成エンジンは、仮想ピクセルと現実世界の環境を組み合わせる適切なブレンド技法を適用しなければなりません。適切な技法は、XRデバイス表示技術モードに基づきます。

注: アルファブレンド環境ブレンドを行うデバイスで、アルファチャンネル無しのbaseLayerを使うと、 現実世界の環境が完全に隠されます。これは開発者の意図と見なされ、ユーザーエージェントは 現実世界の環境の合成を最適化のため一時停止する場合があります。

XR合成エンジンは、体験最適化のために追加の色やピクセル調整を行う場合があります。合成のタイミングは、ブレンド技法 現実世界の環境のソースに依存してはなりません。ただし、ピクセルの深度と現実世界のジオメトリによるオクルージョン処理を行ってはならず、レンダリングされたコンテンツのみが現実世界の背景上に合成されます。

注: 将来のモジュールで、 現実世界の環境との自動または手動によるピクセルオクルージョンが可能になる場合があります。

XR合成エンジンは、カメラインストリンシクスやメディアストリーム、現実世界のジオメトリ等の追加情報へのアクセスについて、ページに自動的に権限を与えてはなりません。

注: 開発者は、既存のMedia Capture and Streams仕様を通じてXR デバイスのカメラにアクセスする要求は可能ですが、これにはXRRigidTransformでカメラの位置と ネイティブ原点の間の情報を問合せる仕組みはありません。また、 現実世界の環境のビューと一致するために必要なカメラインストリンシクスを取得する方法も保証されません。そのため、効果的なコンピュータビジョンアルゴリズムの実行は大きく制限されます。今後のモジュールや仕様でその機能が追加される場合があります。

2.5. 一人称オブザーバービュー

多くのARデバイスにはカメラが搭載されていますが、カメラは通常目と一致していません。セッションの映像をストリーミングやファイル保存のためにキャプチャする際、カメラ映像を単純にレンダリングされた目の映像と合成するだけでは内部オフセットが生じ最適ではありません。デバイスによってはリプロジェクションなどの工夫を行うことがありますが、セカンダリビュー、すなわち 一人称オブザーバービューを公開する場合があり、このビューのeye"none"です。

サイトのコンテンツは、"secondary-views" 機能記述子を有効化することで、一人称オブザーバービューの受け取りを明示的に選択する必要があります。

一人称オブザーバービューに対応したセッションで"secondary-views"機能を有効化しても、セッションのすべてのフレームで無条件に一人称オブザーバービューが有効になるわけではなく、キャプチャが行われているフレーム時のみ、そのビューがviews配列に公開されます。

XRSessionenvironmentBlendModeによりブレンド技法が公開されている場合でも、一人称オブザーバービューは常にアルファブレンド環境ブレンドを使用します。

サイトのコンテンツは、どのビューが一人称オブザーバービューかを知って、異なるブレンド技法への対応や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`を使う
  // 最初の2つや3つの要素だけ直接参照しない
  for (view of views) {
    render(session, gl, view);
  }
});

function render(session, gl, view) {
  // viewに対してコンテンツをレンダリングする
  // 必要があればview.isFirstPersonObserverを使って
  // 合成情報を区別する
}

3. プライバシーとセキュリティに関する考慮事項

ARモジュールの実装は、カメラ画像をコンテンツに公開せず、XR合成エンジンで独自実装として現実世界との合成処理を行う必要があります。 このモジュールのさらなる拡張で現実世界の情報(生カメラフレームやライティング推定など)を公開する場合でも、ユーザー同意が必要な追加 機能記述子によって制御しなければなりません。

WebXR Device API拡張との比較において、ARモジュールはenvironmentBlendModeinteractionMode 属性を通じて、実行されているデバイスの性質に関するいくつかの追加情報のみを提供します。ウェブサイトはXRセッションを"immersive-ar" として開始でき、XRシーンの背後で現実世界とブレンドする動作となります。

このモジュールによってウェブサイトがカメラ画像にアクセスできなくても、エンドユーザーにはわかりにくい場合があるため、ユーザーエージェントは明示することを推奨します。

変更履歴

2019年10月10日「First Public Working Draft」からの変更点

4. 謝辞

以下の方々がWebXR Device API仕様の設計に貢献しています:

そして、この全ての冒険に火をつけてくれたVladimir Vukicevic (Unity)に特に感謝いたします!

適合性

文書の慣習

適合性要件は、記述的な主張とRFC 2119の用語を組み合わせて表現されます。 規範的部分で使われる “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” はRFC 2119の記載通りに解釈されます。 可読性のため、本仕様ではこれらの単語はすべて大文字で表記されていません。

本仕様の全テキストは、明示的に非規範的と示されたセクション・例・注記を除き、規範的です。[RFC2119]

本仕様の例は「例えば」で始まるか、class="example"を付して 規範文から区別されています。例えば:

これは参考例の一例です。

参考注記は「注」で始まり、class="note"で規範文から区別されています。例えば:

注: これは参考注記です。

適合アルゴリズム

アルゴリズムの一部として命令形で書かれた要件(例えば "先頭のスペース文字を除去せよ" や "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;
};