WebXRゲームパッドモジュール - レベル 1

W3C作業草案,

このドキュメントの詳細
この版:
https://www.w3.org/TR/2025/WD-webxr-gamepads-module-1-20250707/
最新公表版:
https://www.w3.org/TR/webxr-gamepads-module-1/
編集者草案:
https://immersive-web.github.io/webxr-gamepads-module/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/webxr-gamepads-module-1/
フィードバック:
GitHub
編集者:
(Google)
(Google [Mozillaは2020年まで])
(Meta)
元編集者:
(Amazon [Microsoftは2018年まで])
参加:
課題を提出 (公開中の課題)
メーリングリストアーカイブ
W3Cの#immersive-web IRC

概要

この仕様モジュールは、ウェブ上でバーチャルリアリティ (VR) および拡張現実 (AR) デバイスに関連付けられたボタン、トリガー、サムスティック、タッチパッドのデータにアクセスするためのサポートについて記述します。

この文書のステータス

このセクションは、本書が発行された時点での文書の状態について記述します。現在のW3Cの発行物およびこの技術報告書の最新版は、W3C規格および草案一覧でご覧いただけます。

Immersive Web Working Group は、グループがまだ対応していないすべてのバグ報告の一覧を管理しています。この草案は、まだワーキンググループで議論される予定の保留中のトピックの一部を強調しています。これらの課題が有効かどうかを含め、その結果についてはいかなる決定もなされていません。 未解決の課題に対する仕様テキスト案のプルリクエストは強く推奨されます。

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

作業草案としての公開は、W3Cおよびそのメンバーによる承認を意味するものではありません。本書は草案文書であり、随時更新、差し替え、または廃止される場合があります。他の目的以外で、この文書を進行中の作業として引用するのは不適切です。

この文書は、W3C特許ポリシーの下で運営されているグループによって作成されました。 W3Cは、グループの成果物に関連してなされた特許開示の公開一覧を管理しています。そのページには特許開示の方法も記載されています。ある特許がW3Cにとって必須クレームであると判断した者は、W3C特許ポリシー第6節に従いその情報を開示する必要があります。

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

このWebXR Gamepads Moduleは、WebXR Device APIに追加実装するためのモジュールとして設計されており、もともとはWebXR Device APIに含まれていたものがコアとモジュールに分割されました。

1. イントロダクション

バーチャルリアリティ(VR)や拡張現実(AR)アプリケーションを可能にするハードウェアは、現在消費者向けに広く提供されており、没入型のコンピューティングプラットフォームとして新たな機会と課題をもたらしています。没入型ハードウェアと直接やり取りする能力は、この環境においてウェブが一級市民として機能するために不可欠です。WebXR Gamepadsモジュールは、WebXR Device APIおよびGamepads APIにインターフェイスと挙動を追加し、多くのWebXR対応デバイスで入力ソースとして利用できるボタン、トリガー、サムスティック、タッチパッドの状態をクエリできるようにします。

このモジュールはWebXR Device APIへの追加です。

1.1. 用語

このドキュメントではXRという略語を通して、バーチャルリアリティ、拡張現実、その他関連技術で使われるハードウェア、アプリケーション、手法の範囲を指します。例は以下に限定されませんが、含まれます:

それらの重要な共通点は、仮想コンテンツの視点をシミュレートするためのある程度の空間トラッキング機能を持つ点です。

「XRデバイス」や「XRアプリケーション」といった用語は、上記いずれにも一般的に適用されます。本ドキュメントのうちこれらのデバイスのサブセットのみに適用される部分には、適切にその旨が示されます。

XRデバイスには、ボタン、トリガー、サムスティック、タッチパッド入力で没入型体験とやりとりできる追加コントローラーハードウェアが備わっていることがよくあります。これらのデバイスはしばしば空間トラッキングもされ、「モーションコントローラー」や「ハンドヘルドコントローラー」、「トラッキングコントローラー」と呼ばれます。

2. WebXR Device APIとの統合

WebXR Device API API の定義どおり、XRInputSourceXR入力ソース を表します。これはユーザーが仮想空間内でターゲットとなるアクションを行うための入力手段です。例としては、ハンドヘルドコントローラー、光学的にトラッキングされる手、視線ベースの入力手法などがあり、ビューアの姿勢に基づいて動作します。

この文書では、XRInputSource がボタン、トリガー、サムスティック、またはタッチパッドデータを報告する場合の動作について説明します。これは一般的にはモーションコントローラーですが、ヘッドセットにボタンやトリガー、サムスティック、タッチパッドが搭載されている場合もあります。WebXRデバイスAPIで述べられているとおり、XR デバイスに明示的に紐づかない入力機構(たとえば従来のゲームパッド)はXR入力ソースとみなしてはなりません(MUST NOT)。

2.1. XRInputSource

ボタン、トリガー、サムスティック、タッチパッドのデータは、Gamepad オブジェクトを通して報告されます。このオブジェクトは、関連付けられたXRInputSourceに公開されます。

partial interface XRInputSource {
  [SameObject] readonly attribute Gamepad? gamepad;
};

gamepad 属性は、Gamepad であり、XR入力ソース上のあらゆるボタンと軸の状態を記述します。XR入力ソースに次のいずれかのプロパティが少なくとも一つも存在しない場合、gamepad属性はnullでなければなりません(MUST):

2.2. XRSession

XRInputSource は、接続・切断時にinputSources 配列で報告されます。gamepad の有無がこの配列のいずれかで変化した場合、ユーザーエージェントはWebXR Device APIで定義された入力ソース属性変更への応答アルゴリズムを実行しなければなりません(MUST)。

フレーム更新のリストには、ゲームパッドフレーム更新の適用が含まれるようになります。

ゲームパッドフレーム更新の適用 の手順は、XRFrame frameについて、ユーザーエージェントが以下の手順を実行することを要求します:

  1. XRInputSource で、当該gamepad gamepadframesessionに関連付けられている場合、次を行う:

    1. frametimeにおけるゲームパッドのデータに合わせてgamepadを更新する。

NOTE: これはgamepad オブジェクトが「ライブ」であり、内部状態が毎フレーム更新されることを意味します。また、XRInputSourcegamepadの参照をあるフレームで保存し、後のフレームで同じXRInputSourcegamepad と比較して状態変化をテストすることはできません。なぜならそれは同じオブジェクトだからです。そのため、フレームごとの入力状態を比較したい開発者は当該状態を自らキャッシュすべきです。

3. ゲームパッドAPIとの統合

Gamepad インスタンスは、XRInputSourcegamepad 属性から返されますが、これはGamepad APIで規定されている挙動に加えて、いくつかの追加的な挙動制限があります。

XRInputSource に関連付けられたGamepad は、ユーザーエージェントの選択により、XRセッションが活動していない場合でもnavigator.getGamepads() から取得できる場合があります。これにより、XRデバイスが「通常の」ゲームパッドとして使用可能となります。

Note: [WEBXR-HAND-INPUT-1]で説明されているハンドトラッキングXRInputSource も、ユーザーエージェントがハンド入力ソースをゲームパッドベースのコンテンツと併用できるようにしたい場合、Gamepadを持つことがあります。

Gamepad APIでは、Gamepad データのスナップショットはnavigator.getGamepads() 関数で取得可能とされています。しかしながら、XRInputSourcegamepad 属性から返されたGamepadインスタンスは、 navigator.getGamepads() の配列に含まれてはなりません(MUST NOT)。

3.2. Gamepad

以下のGamepad 属性は、XRInputSourcegamepad 属性から返される場合、次の制約を満たさなければなりません(MUST):

3.3. "xr-standard" ゲームパッドマッピング

"xr-standard" マッピングはGamepad APIで定義され、本仕様での使用のために予約されています。これは、gamepad のボタンや軸のレイアウトが下記表にできる限り準拠することを示します。

マッピングmapping"xr-standard" を報告するためには、デバイスがtargetRayModeとして "tracked-pointer" を報告し、さらに非nullgripSpaceを持たなければなりません。それに加えて、タッチパッドやサムスティックとは別の、少なくとも1つの主要トリガーを持たなければなりません。この主要トリガーは入力ソースの主要アクションをトリガしなければなりません(MUST)。また、主要スクイーズボタンを持つ場合、これも主要スクイーズアクションをトリガしなければなりません(MUST)。これらの要件を満たさない場合は、gamepadmapping属性に空文字列""を報告できます(may)。

ボタン xr-standard マッピング 必須
buttons[0] 主要トリガー はい
buttons[1] 主要スクイーズボタン いいえ
buttons[2] 主要タッチパッド いいえ
buttons[3] 主要サムスティック いいえ

xr-standard マッピング 必須
axes[0] 主要タッチパッドX いいえ
axes[1] 主要タッチパッドY いいえ
axes[2] 主要サムスティックX いいえ
axes[3] 主要サムスティックY いいえ

上記表でオプションとなっている入力を持たないデバイスは、buttons またはaxes 配列内のその場所を保持しなければならず(MUST)、プレースホルダーボタンプレースホルダー軸として報告する必要があります。それぞれのプレースホルダーボタンは、 value0pressedfalsetouchedfalseを報告しなければなりません(MUST)。プレースホルダー軸0を報告しなければなりません。プレースホルダーボタンは、配列の最後の要素か、すべて後続がプレースホルダーであれば省略できます(MUST be omitted)。

これらの予約インデックスの後に追加でボタンや軸を公開することもでき、その場合は重要度の高いものから順に掲載するのが望ましいです。また、関連する軸(例えばサムスティックのX,Y軸)はグループ化し、可能であればX,Y,Z順で並べる必要があります(MUST)。

3.4. UA/プラットフォーム予約ボタン

ユーザーエージェントは、可能であれば、信頼されたUIの一部としてスプーフ不可な操作を行うために、少なくとも1つの物理ボタンを予約すべきです(SHOULD)。たとえば多くのコントローラーに存在する「メニュー」や「アプリ」ボタンは、没入型プレゼンテーションから退出する専用ボタンとして指定できます。

さらに多くのXRプラットフォームでは、ホーム環境に戻るなどプラットフォーム固有のアクションのためのボタンも予約しています。

UAまたはプラットフォームにより予約されたボタンは、Gamepadで公開してはなりません(MUST NOT)。また、ユーザーエージェントはXRプラットフォーム内でどのボタンが予約されているか調整に努めるべきです。WebXR Input Profiles Registryが予約ボタン調整の推奨場所です。

3.5. マッピング例

この図は、2つの例示的なコントローラーが"xr-standard" マッピングでどのように公開されるかを示しています。画像は特定デバイスを示すものではなく、参照用です。Simple 'xr-standard' controller and Advanced 'xr-standard' controller

4. セキュリティとプライバシー

WebXR Device APIは強力な新機能を提供しますが、それと同時にユーザーエージェントが軽減策を講じるべき複数の独自なプライバシー、セキュリティ、快適性に関するリスクをもたらします。この話題はWebXR Device APIの一部で詳細に取り上げられています。本モジュールは追加的な考慮を加えますが、WebXR のセキュリティとプライバシー 原則を根本的に変更するものではありません。

4.1. フィンガープリンティング

このAPIはユーザーが利用可能なハードウェアとその能力を記述するため、フィンガープリンティングの追加的な対象となります。完全に回避することはできませんが、ユーザーエージェントは軽減に努めるべきです。WebXR Device APIで定義されているとおり、XRInputSourceXRSession が作成された後にはじめて報告され、このときに機微な情報を公開するため追加的な保護が必要です。加えて本モジュールは、XRInputSourcegamepad.id で文字列識別子を報告しないことを要件とします。

変更点

2019年10月10日 第1公開作業草案からの変更点

5. 謝辞

WebXR Device API仕様の設計には、以下の方々が貢献されました:

また、Vladimir VukicevicUnity)に本プロジェクトの起爆剤となる貢献を特に感謝します!

適合性

文書規約

適合性要件は記述的な断言と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" など) に応じた意味で解釈します。

アルゴリズムや具体的な手順として記述された適合性要件は、最終結果が同等であれば実装方法は問いません。 特に本仕様に定義されるアルゴリズムは理解しやすさを目的としており、性能の高さを目的としていません。 実装者は最適化してもかまいません。

索引

本仕様で定義される用語

参照先で定義される用語

参考文献

規範的な参考文献

[GAMEPAD]
Steve Agoston; Matthew Reynolds. Gamepad. 2025年6月 12日. WD. URL: https://www.w3.org/TR/gamepad/
[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/

参考情報

[WEBXR-HAND-INPUT-1]
Manish Goregaokar. WebXR Hand Input Module - Level 1. 2024年6月5日. WD. URL: https://www.w3.org/TR/webxr-hand-input-1/

IDL索引

partial interface XRInputSource {
  [SameObject] readonly attribute Gamepad? gamepad;
};