座標系

本プロジェクトで扱う空間と規約を定める.数値はすべてメートルとラジアン(CLI とシナリオ ファイルの euler のみ度).

1. 空間

空間 定義
ドライバ空間 ドライバが DriverPose_t で報告する空間.qWorldFromDriverRotation は単位四元数,vecWorldFromDriverTranslation は 0 とする.したがって ドライバ空間 = SteamVR raw 空間(TrackingUniverseRawAndUncalibrated).
standing 空間 シャペロン設定(ルームセットアップ)で定まる床原点の空間.VRChat をはじめ多くのアプリはこれを使う.vrdummy_probe chaperone [size_m] が IVRChaperoneSetup で standing 原点 = raw 原点,正方形のプレイエリア(既定 3 m × 3 m)を書き込みコミットする.vrdummy_e2e と vrdummy_viewer も起動時に同じ設定をコミットする.
seated 空間 同様に seated 原点 = raw 原点に設定する.

ドライバは HMD に固定のトラッキングユニバース ID(Prop_CurrentUniverseId_Uint64,既定 0x5652444D,default.vrsettings の universe_id)を報告する.SteamVR はシャペロン設定をこの ID をキーに config/chaperone_info.vrchap へ保存するため,一度コミットすれば SteamVR を再起動しても standing 空間とプレイエリアが保持され,「ルームセットアップを実行してください」の通知も出ない. ID を変えると別のユニバースとして扱われ,再度コミットが必要になる.

実機 HMD との共存

実機(PICO 4 など)のストリーミングドライバは独自のユニバース ID を報告するため,設定は chaperone_info.vrchap 内で別エントリになり,通常は互いに干渉しない.ただしシャペロンを 書き込むツール(vrdummy_probe chaperone,vrdummy_e2e,vrdummy_viewer)は「アクティブな HMD のユニバース」に書き込むので,実機がアクティブな状態で実行すると実機のルームセットアップを 上書きする.これを防ぐため,各ツールはアクティブな HMD の Prop_CurrentUniverseId_Uint64 が ダミーの ID と一致しない限り書き込みを拒否する(vrdummy_probe chaperone --force で強制). steamvr_e2e.ps1 は実行前に Steam/config/chaperone_info.vrchap を .tmp/chaperone-backup/ に複製するので,必要ならそこから手で戻せる.

実機と併用してトラッカーだけを使う場合(hmd_enable: false)はダミーの HMD が存在せず ユニバース ID も設定されないため,standing 原点は実機のルームセットアップに従う.フィーダの pos は raw 空間の値なので,実機の standing 原点が raw からずれているぶん,アプリから見た位置は ずれる.vrdummy_probe chaperone-state で standing 原点の raw からのオフセットを確認できる.

フィーダのコマンド(pos,rot,euler,プリセット)はすべてドライバ空間の値である.

2. 軸と向き

SteamVR の規約に従う.右手系.

3. デバイスの原点

デバイス 報告する点 備考
HMD 両眼の中点 shouldApplyHeadModel = false.vrserver の頸部モデルによる位置補正を受けない.左右の眼は Prop_UserIpdMeters_Float から ±IPD/2 を X にずらした位置
コントローラ コントローラの基準点(/pose/raw) 単位回転のとき +X 右,-Z 前.グリップ・エイムの派生ポーズは入力プロファイルに定義しない(版 1)
トラッカー トラッカーの基準点 役割(腰・足など)は SteamVR 側またはアプリ側(VRChat はキャリブレーション時の位置)で決まる

4. プリセットの配置(preset <name> [height_m],既定 1.7 m)

名前 HMD 両手 トラッカー 0 / 1 / 2
stand (0, 0.93h, 0) (∓0.2, 0.53h + 0.15, -0.3) 腰 (0, 0.53h, 0),左足 (-0.1, 0.05, 0),右足 (0.1, 0.05, 0)
tpose (0, 0.93h, 0) (∓0.41h, 0.82h, 0),手は ±90° ロール 同上
sit (0, 0.26h + 0.40h, 0) (∓0.2, 0.26h + 0.1, -0.3) 腰 (0, 0.26h, 0),足 (∓0.1, 0.05, -0.4)

5. 投影と表示

6. VRChat との対応