WebXR Body Tracking — 全身トラッキング関節を点と線で可視化
WebXR Lab

WebXR Body Tracking — 全身トラッキング関節を点と線で可視化

WebXR Body Tracking proposal の body-tracking feature を使い、XRFrame.body の関節姿勢を確認する実験。PICOなど対応ブラウザでの実機検証に使います。

難易度

上級

所要時間

約5分

フレームワーク

素のHTMLWebGL

対応デバイス

PICOWebXR対応ヘッドセットデスクトップ
XでシェアB!はてブする
LabVR動作チェック

WebXR Body Tracking検証Lab

このデモですること: XRFrame.bodyの全身関節が取得できるかを見る

WebXR Body Tracking proposalのbody-tracking featureを要求し、取得できた関節を点と線で可視化する検証デモです。PICOなど対応ブラウザで、アバター制御の前にセッション開始、frame.body、関節pose取得を切り分けます。

まず試す端末

PICO + Motion Tracker / WebXR対応ヘッドセット

デモを開くと、Immersiveセッションに入る前に「対応チェックの事前判定パネル」が表示されます。非対応の環境では理由が表示されて停止するため、サイレントに失敗することはありません。

PICO

Lab

PICO Browser / PICO Web AppとMotion Tracker設定でbody-tracking featureを確認。

その他XR

要実機確認

WebXR Body Tracking proposal対応の有無をrequestSession結果で確認。

Desktop

プレビュー可

UIとWebGLプレビューのみ。実際のbody-tracking評価は対応ヘッドセットが必要。

体験フロー

  1. 1対応ヘッドセットで必要なトラッカー設定を済ませ、HTTPSで配信されたデモURLをブラウザで開く。
  2. 2「対応チェック」でimmersive-vr / immersive-arの対応を見て、まずimmersive-vrでXR開始する。
  3. 3HUDのframe.body、body.size、tracked jointsを見ながら、体を動かして関節点とボーン線が更新されるか確認する。

動かなかった時の見方

body-trackingが使えない場合はrequestSessionのエラー、frame.body: null、tracked joints: 0のどこで止まったかを記録します。デスクトップではWebGL表示の確認までを正規のプレビュー扱いにします。

合格ライン

合格ラインは「XRセッションが開始する」「frame.bodyがavailableになる」「主要関節の点と線が動く」「失敗時にエラー名やnull状態がログで読める」です。

ヘッドセットに送る

ヘッドセットのブラウザ(Quest Browser / PICO Browser)でカメラまたはQR読み取りからこのコードを開くと、デモの全画面ページに直接入れます。

https://www.bangeo.net/demos/webxr-body-tracking

WebXR Body Tracking proposal の body-tracking feature を要求し、XRFrame.body から取得した全身関節を点と線で表示する実験です。

このデモはアバター制御の完成形ではありません。まず requestSession() が通るか、frame.body が返るか、関節ごとの getPose() がどれくらい取れるかを実機で切り分けるための最小サンプルです。

通常プレビュー

WebXRのbody-tracking featureを要求し、取得できた関節をWebGLの点と線で表示します。

全画面でデモを開く →Meta Quest / PICO では全画面リンクから開くと権限確認が安定します。

試せること

  • immersive-vr / immersive-ar の対応状態を確認する
  • requiredFeatures: ["local-floor", "body-tracking"] でXRセッションを開始する
  • XRFrame.body の有無、body.size、追跡できた関節数をHUDで見る
  • 取得できた関節位置をWebGLの点と線として表示する

学べること

Body Trackingは、通常のヘッドセット姿勢やコントローラー入力よりも端末依存が強い機能です。

セッション開始時に body-tracking feature が許可されても、各フレームで常に全関節が安定して取れるとは限りません。実装側では frame.bodynull になる場合、XRBody.get() が返らない関節、frame.getPose()null を返す関節をそれぞれ分けて扱う必要があります。

javascript
const session = await navigator.xr.requestSession("immersive-vr", {
  requiredFeatures: ["local-floor", "body-tracking"],
  optionalFeatures: ["hand-tracking"],
});
javascript
const bodySpace = frame.body.get("hips");
const pose = frame.getPose(bodySpace, referenceSpace);

対応環境

環境状態
PICO Browser / PICO Web AppLab / Motion Tracker設定を含む実機検証向け
その他のWebXR対応ヘッドセット要実機確認 / proposal対応の有無に依存
Meta Quest Browser要実機確認 / 通常はHand Trackingやcontroller入力を別ルートとして用意
デスクトップChromeUI表示とWebGLプレビューのみ
iOS Safari非対応

実機で確認すること

Body TrackingはWebXR全体のproposalですが、ブラウザや端末で同じように使える標準機能として扱える段階ではありません。実際の可否はOS、ブラウザ、対象デバイス、外部トラッカーや権限の設定に依存します。

PICO DeveloperのWebXRドキュメントでは、PICO Motion Trackerを使ったWebXR Full Body Trackingへの対応が案内されています。そのため、PICO Browser / PICO Web App はこのデモを試す有力な検証環境です。

実機で見る時は、まず immersive-vr で確認してください。MRパススルーが必要な場合だけ immersive-ar を選びます。requestSession() が失敗した場合は、エラー名とメッセージをログで確認します。

実装メモ

  • XRモード: immersive-vr 優先、immersive-ar は選択式
  • 必須機能: local-floor, body-tracking
  • 任意機能: hand-tracking
  • 描画: WebGLで床グリッド、関節点、主要ボーンを描画
  • フォールバック: 非対応時はログに失敗理由を表示

注意点

WebXR Body Tracking ModuleはCommunity Group Draftの段階です。API名、関節名、許可フロー、プライバシー要件、ブラウザ実装は変わる可能性があります。公開デモや制作案件では、Body Trackingが使えない場合の通常VR表示、コントローラー操作、Hand Tracking表示などを別ルートとして用意しておくのが安全です。

関連リンク