まずはこの画像を見てください。周囲はVRChatのワールド、映っている画面はSatisfactoryというゲーム、そして下には現実世界のキーボードがあります。以前書いた記事「VR空間の中で非VRゲームをプレイするのが面白かった! ~Pico 4 & Virtual Desktop~」でも同様にVR空間で非VRのゲームをプレイしましたが、一つ大きな違いがあります。それは現実世界のキーボードがVRゴーグルを通して見えていること。コントローラーで操作できないようなキーコマンドがたくさんあるゲームでも、これなら難なくプレイすることができます。
デモ
想定する環境
- Virtual Desktop
- Meta Quest 3
- SteamVR(任意)
キーボードをパススルーするために、Virtual Desktopのパススルーの機能を使用します。SteamVRはVRのアプリを実行するために使用するだけなので、SteamVRを使わないソフトでもVirtual Desktopを使えば問題ないと思います。
しくみ
VR空間の映像はこれまで通り、SteamVRを起動してVirtual Desktop経由でHMDへと送信しています。そして今回肝となるのが、OpenKheeboadというソフトです。ゲーム画面のオーバーレイと、キーボードのクロマキー用画像のオーバーレイを行っています。
このアイディアはhideGさんのOpenKneeboardを使うと良いという情報を参考にさせていただきました。
OpenKneeboardというのは元々フライトシミュレーター用のソフトで、VR空間上に別の画面をオーバーレイ表示させるというものです。用途は前回紹介したXSOverlayと似ていますが、OpenKneeboardの便利なのところは、デスクトップ画面だけではなくゲームのウィンドウや、任意の画像ファイルが表示できる点です。さらには表示する位置をVR空間に固定してくれるので、頭や体を動かしても、まるでそこにあるかのような体験が得られます。
そしてその任意の画像をクロマキー用の画像(単色のデータ)にすれば、Virtual Desktopがその色の部分を部分パススルーしてくれるんです。この発想が素晴らしい!
Virtual Desktopの設定
はじめに部分パススルーの設定を行います。Virtual DesktopのSTREAMING→VR PassthroughのEnviromentをチェックして、Configureを押します。
次にクロマキーの色を設定します。ここは好みで設定してもかまいませんが、ゲーム画面の方にこの色の部分があると、意図せずにパススルーしてしまいます。ですのでそのゲームであまり使われない色を選ぶのがポイントです。
今回はR:255 G:0 B:255 のマゼンタにしました。そのほかのパラメーターはこの画面くらいで大丈夫です。
OpenKneeboardの設定
はじめにOpenKneeboardをダウンロードしてインストールします。すでにいろいろと設定してしまって初期の状態がどうだったかわからないので、とりあえず設定すべき個所のみ説明していきます。左側に並んでいるものは今回使わないので気にしないでいいです。左の設定アイコンを押します。
はじめにタブを作成します。タブというのは表示させたいもの1つ1つと連動しているので、今回ケースだと、ゲーム画面とクロマキーの画像の2つが必要となります。まずはゲーム画面を追加するためにゲームを起動します。ゲーム画面が起動したらOpenKneeboardにウィンドウを戻してTabsを押します。
一番下の+ Add a tabを押して、Window Captureを選択します。
すると現在起動しているアプリが表示させるので、表示させたいアプリを選択します。
続いてクロマキー用の画像を設定します。クロマキー用の画像はVirtual Desktopのパススルーで設定したのと同じ色で作ります。適当な大きさのただの単色の画像ファイルでいいです。
用意したらもう一度+ Add a tabを押してFilesを選択し、用意した画像ファイルを選択します。登録したタブは左側の一覧に表示されているので、今回追加した2つが表示されているか確認しましょう。
問題なければ再度左下の設定を押して、Virtual Realityを押します。デフォルトではたぶんViewsに何か登録されてるので、×を押して削除しておきます。次に+を押して追加を行います。
Add ViewではIndependentを選択してAddを押します。
Viewsのところに新しいビューが追加されました。まずはこのビューにゲーム画面(ゲーム画面のタブ)を紐づけます。作成したビューを選択して、Default Tabに先ほど作成したゲーム画面のタブを選択します。
SizeはVR空間上で表示される大きさで、例の場合は4m x 3.5mなので結構巨大な画面が目の前に現れる感じです。画面を下にスクロールすると、Position, Gaze target size, Gaze zoomといった設定項目があります。ここから先が地獄の設定です。この辺は実際にVR画面を覗いて調整していくしかないので、ひたすら自分の好きな位置、角度、大きさになるように調整していくしかありません。頑張ってください。
スライダーがグレーアウトして押せないときは、Recenter nowを押せば動かせるようになります。
キーボードのクロマキーも追加しましょう。先ほどと同様の手順でビューを追加します。以下は参考までに私の環境での設定です。座った状態でテーブルの上のキーボードだけが見える大きさ、角度、距離に調整しました。何度もやり直して使いやすいポジションを見つけました。
VRで確認する
仮設定が終わったら実際にVR空間に入って、位置がちょうどよいか確認しましょう。右コントローラーのMETAボタンを長押しして、正面位置を直しておきます。画面が見つからないという場合は変な位置にあるかも。座ってるときは立ってみてください。表示されている画面の位置がおかしかったらOpenKneeboardの画面に戻って値を調整します。これをひたすら繰り返します。
VR空間で別のゲームができるなんて最高ですね!
ちなみにVRChatでこれをやっても他の人には見えてませんので、あくまで自分専用です。
おまけ
ちょっと便利な設定を伝え忘れていました。設定→Input→キーボードのShow/hideで、画面のオーバーレイをオン・オフすることができるので、何かキーを設定しておくと便利です。
私はキーボードの端っこにあって手探りでも見つけやすい Pause キーを割り当てておきました。これを設定しておけばオーバーレイを消したいときに簡単に消せるので、設定しておくと便利です。