縫い込まずに、監督する
サードパーティの拡張機能は独自のプロセスで動きます。クラッシュしても、その拡張機能自身のマニフェストに書かれたポリシーに従って再起動し、vrOSの残りはそのまま動き続けます。組み込みの拡張機能も、同じ規律で監督されるタスクとしてアプリ内で動きます。
拡張機能
vrOSの中核はオーバーレイ、入力、パフォーマンス、プレイスペースです。クリエイター向けの機能は拡張機能として、ひとつずつ有効にします。どれも使うケーパビリティを申告し、あなたが決めるまで停止したままです。
vrOS 2.0.0はまずこの土台を出します。クリエイター向け機能は拡張機能として順次戻ってきます。どれがいつ来るのかは、このページに書きます。
仕組み
サードパーティの拡張機能は独自のプロセスで動きます。クラッシュしても、その拡張機能自身のマニフェストに書かれたポリシーに従って再起動し、vrOSの残りはそのまま動き続けます。組み込みの拡張機能も、同じ規律で監督されるタスクとしてアプリ内で動きます。
拡張機能が動き出す前に、vrOSは要求された内容をわかりやすい言葉で並べます。オーバーレイ、キャプチャ、オーディオ、イベントバス、ネットワーク。ひとつずつ許可でき、あとから設定 → 拡張機能でいつでも取り消せます。新しいものを求めるアップデートは、その一点だけをあらためて尋ねます。
vrOSのAPIが管理するケーパビリティは、vrOSが強制します。ネットワークアクセスは開示であって、サンドボックスではありません。ネイティブプログラムはvrOSに尋ねずにソケットを開けるからです。だからマニフェストがそれを申告し、何かを有効にする前にあなたが目にします。
拡張機能の状態は、拡張機能のプロセスではなくvrOSのストアに置かれます。クラッシュしても、アプリを再起動しても、PCを立ち上げ直しても、元の場所に戻ります。SteamVRが起動したり終了したりしても、崩れることはありません。
vrOSはまずデスクトップアプリで、拡張機能も同じです。OSCメッセージの送信も、Soundboardのパッドを鳴らすことも、SteamVRを閉じたままできます。
有効でも何もしていない拡張機能は、タイマーを回さず、ポーリングもせず、再描画もしません。OBS controlがストリームと録画の状態を問い合わせるのは、それを表示するパネルが画面にある間だけです。
拡張機能は自分のPC上のフォルダーからインストールし、同意画面は初回実行の前に出ます。署名付き配布はその先の段階です。
パネル
拡張機能はパネルをSlintファイルとして同梱し、vrOS自身が描画します。同じレンダラー、同じテーマで、Webエンジンは一切関わりません。
ラインナップ
4つの拡張機能を、開発する順に並べました。VRChat OSC、OBS control、Soundboardはv2.0.0のローンチに入ります。Twitch chatは最後で、まだ日程はありません。
VRChatのOSC面をひとつにまとめました。入力中インジケーターとサウンド切り替えの付いたチャットボックス、アバターパラメーターの送受信、アバターの変更、inputネームスペース、cameraネームスペース。OSCQueryとmDNSにより、VRChatは拡張機能と待ち受けポートを見つけられます。そのポートは既定でループバックにバインドされるので、ネットワーク上の他の何かがあなたのアバターにパラメーターを送り込むことはできません。チャットボックスのパネルは手首にアンカーします。
ローカルでもリモートでも、いくつでもOBSインスタンスにobs-websocketで接続できます。シーンの切り替え、ストリームや録画の開始と停止、ソースの表示切り替えとロック、統計の確認。コンパクトなディレクターパネルが目の前に浮かび、シーングリッド、ストリームと録画の状態、タリーを表示します。
エントリーごとの音量とループを持つパッドを、vrOSのオーディオエンジンで再生します。ひとつの音を複数の出力へ同時に送れるので、クリップがヘッドホンと仮想マイクの両方に届きます。パッドはコマンドなので、SteamVRでコントローラーに割り当てられます。
チャットを、他のすべてと並べてパネルに。サインインはデバイスコードフローを使うので、vrOSがパスワードを見ることはありません。順番としては最後です。
組み込みの拡張機能は、ケーパビリティが許可された状態で届きます。サードパーティのものと同じように、設定 → 拡張機能でいつでも取り消せます。