vrOS
ドキュメント

拡張機能

必要なものだけを追加。それ以外は何も。

vrOSの中核はオーバーレイ、入力、パフォーマンス、プレイスペースです。クリエイター向けの機能は拡張機能として、ひとつずつ有効にします。どれも使うケーパビリティを申告し、あなたが決めるまで停止したままです。

vrOS 2.0.0はまずこの土台を出します。クリエイター向け機能は拡張機能として順次戻ってきます。どれがいつ来るのかは、このページに書きます。

仕組み

別々のプログラムが、あなたの許可で動きます。

縫い込まずに、監督する

サードパーティの拡張機能は独自のプロセスで動きます。クラッシュしても、その拡張機能自身のマニフェストに書かれたポリシーに従って再起動し、vrOSの残りはそのまま動き続けます。組み込みの拡張機能も、同じ規律で監督されるタスクとしてアプリ内で動きます。

同意は、ケーパビリティごとに

拡張機能が動き出す前に、vrOSは要求された内容をわかりやすい言葉で並べます。オーバーレイ、キャプチャ、オーディオ、イベントバス、ネットワーク。ひとつずつ許可でき、あとから設定 → 拡張機能でいつでも取り消せます。新しいものを求めるアップデートは、その一点だけをあらためて尋ねます。

許可の意味をごまかさない

vrOSのAPIが管理するケーパビリティは、vrOSが強制します。ネットワークアクセスは開示であって、サンドボックスではありません。ネイティブプログラムはvrOSに尋ねずにソケットを開けるからです。だからマニフェストがそれを申告し、何かを有効にする前にあなたが目にします。

クラッシュしても消えない状態

拡張機能の状態は、拡張機能のプロセスではなくvrOSのストアに置かれます。クラッシュしても、アプリを再起動しても、PCを立ち上げ直しても、元の場所に戻ります。SteamVRが起動したり終了したりしても、崩れることはありません。

ヘッドセットを外していても動く

vrOSはまずデスクトップアプリで、拡張機能も同じです。OSCメッセージの送信も、Soundboardのパッドを鳴らすことも、SteamVRを閉じたままできます。

アイドルは、本当にアイドル

有効でも何もしていない拡張機能は、タイマーを回さず、ポーリングもせず、再描画もしません。OBS controlがストリームと録画の状態を問い合わせるのは、それを表示するパネルが画面にある間だけです。

拡張機能は自分のPC上のフォルダーからインストールし、同意画面は初回実行の前に出ます。署名付き配布はその先の段階です。

パネル

拡張機能のUIも、同じUIです。

拡張機能はパネルをSlintファイルとして同梱し、vrOS自身が描画します。同じレンダラー、同じテーマで、Webエンジンは一切関わりません。

  • パネルはDashのタブにも、空間に置けるフローティングオーバーレイにもできます
  • 組み込み拡張機能のパネルは、vrOSの他の部分と同じく9言語すべてで出ます
  • オーバーレイパネルはワールド・頭・左右どちらの手にもアンカーでき、再起動後も置いた場所に戻ります
  • VRキーボードは、vrOS自身のパネルと同じように拡張機能のパネルにも入力できます
  • 読み込みに失敗したパネルは、真っ白になる代わりに拡張機能名とエラーを表示します

ラインナップ

何が、いつ来るのか。

4つの拡張機能を、開発する順に並べました。VRChat OSC、OBS control、Soundboardはv2.0.0のローンチに入ります。Twitch chatは最後で、まだ日程はありません。

VRChat OSC

ローンチ時

VRChatのOSC面をひとつにまとめました。入力中インジケーターとサウンド切り替えの付いたチャットボックス、アバターパラメーターの送受信、アバターの変更、inputネームスペース、cameraネームスペース。OSCQueryとmDNSにより、VRChatは拡張機能と待ち受けポートを見つけられます。そのポートは既定でループバックにバインドされるので、ネットワーク上の他の何かがあなたのアバターにパラメーターを送り込むことはできません。チャットボックスのパネルは手首にアンカーします。

OBS control

ローンチ時

ローカルでもリモートでも、いくつでもOBSインスタンスにobs-websocketで接続できます。シーンの切り替え、ストリームや録画の開始と停止、ソースの表示切り替えとロック、統計の確認。コンパクトなディレクターパネルが目の前に浮かび、シーングリッド、ストリームと録画の状態、タリーを表示します。

Soundboard

ローンチ時

エントリーごとの音量とループを持つパッドを、vrOSのオーディオエンジンで再生します。ひとつの音を複数の出力へ同時に送れるので、クリップがヘッドホンと仮想マイクの両方に届きます。パッドはコマンドなので、SteamVRでコントローラーに割り当てられます。

Twitch chat

日程未定

チャットを、他のすべてと並べてパネルに。サインインはデバイスコードフローを使うので、vrOSがパスワードを見ることはありません。順番としては最後です。

組み込みの拡張機能は、ケーパビリティが許可された状態で届きます。サードパーティのものと同じように、設定 → 拡張機能でいつでも取り消せます。

自分で作る

組み込みの拡張機能と同じAPIです。

拡張機能はローカルソケット経由でvrOSと話します。JSON-RPCで1行につき1オブジェクトなので、どの言語でも書けます。ファーストパーティの機能を同じAPIの上に載せているのは意図的です。VRChat OSCが拡張機能APIの上に作れないなら、間違っているのはAPIのほうです。

拡張機能SDKはまだ公開していません。