特集

VR音ゲー「Beat Saber」で自宅複合現実配信に挑戦

自宅配信の様子。ここでは顔だけを映しているが、普段はゲーム画面をメインで出して、顔は子画面に出している

 前回の記事で、照明を使うことで配信のワイプ映像の画質をがらりと変えられることを解説した(照明だけでここまで変わる。"映える"配信に向け、低コストで自宅をスタジオっぽくしてみた参照)。あの後、少し照明とカメラのセッティングを変えて、いまは上記写真のような映像になっている。配信で他人と差をつけたいなら、導入を検討してほしい。

 今回の記事はその続編的な位置付けとなるが、まずおさらいも含めはじめに伝えておきたいのが、ゲームをプレイするのがPCであれ、家庭用ゲーム機であれ、配信についてはPCを使うのがもっとも柔軟で高いレベルのことができるということだ。それを踏まえたうえで、今回は、もう1つ差がつく配信講座として、「自宅でできる複合現実配信」のやり方を解説したい。

複合現実を実現する「LIV」

 複合現実配信という言葉はあまり耳にしたことがないかもしれない。複合現実というと、Windows Mixed Realityが思い浮かぶが、今回はその話ではない。これから解説する「LIV」というソフトがMixed Realityという言葉を使っているので、本講でもそれに倣う。

 つい先日、VR(仮想現実)を活用したリズムゲーム「Beat Saber」のPlayStation 4(PS4)版が発売された。Beat Saberは、VR HMDを被り、画面奥からこちらに流れてくる矢印の書かれたキューブを、スター・ウォーズのライトセイバーのような光る剣でタイミング良く切っていくゲーム。PC版は2018年5月に発売されていたが、ようやくPS4でも遊べるようになった。インディータイトルながら、累計100万本を売り上げたヒット作だ。

 VRと言うことで、PS4では、PlayStation VRおよびPlayStation Moveを使うし、PC版では、Vive、Oculus RiftあるいはWindows MR対応HMDとモーションコントローラを使う。普通にプレイする、あるいはプレイしてる画面を配信するだけなら、これらのいずれかのプラットフォームでできる。だが、今回は普通の配信を一歩超えて、複合現実に挑戦する。

 その複合現実を実現するのに使うのがSteam用のLIVというソフトだ。使い方を順を追って説明するが、LIVはSteam版しかないので、逆に言うと、この複合現実配信はPS4では不可能だ。

LIVの公式デモ動画

 今回の記事制作にあたり、ハイエンドゲーミングノート「G-Tune NEXTGEAR-NOTE i7940GA1」をマウスコンピューターよりお借りした。本製品は、Core i7-8750H、GeForce RTX 2070、メモリ16GB、NVMe SSD 512GB、そして144Hz表示対応のフルHDパネルを搭載した17.3型ノートだ。

「G-Tune NEXTGEAR-NOTE i7940GA1」。なお、本製品にUSBキャプチャユニットと、Oculus RiftをつなぐにはUSBポート数が足りないので、Hubが必要となる

 PCやVR HMD以外にも、複合現実にはいくつか必要なものがある。その1つがグリーンバックだ。映画のメイキングで、俳優が緑色のスクリーンの前で演技しているのを目にしたことがあるだろう。複合現実配信ではそれと同じ事をリアルタイムで行なう。

 だいぶ大がかりと思われるだろうが、グリーンバックは数千円で購入できる。筆者が購入したものもは、スタンドと背景布で1万円近くかかったが、もう少し安いものもたくさんある。選ぶポイントとしては、背景布の横幅が2m程度、縦幅が2.5m程度以上あるものがほしい。両手を左右に広げると、1m数十cmはあるだろうから、それをカバーするには横幅が2mはいる。縦については、身長プラス足元も映すとなると、2.5m程度はいるという計算だ。部屋によって置けるサイズが制約を受けてくるが、置ける範囲でなるべく大きなものを選んだ方がいい。

筆者宅に設置したグリーンバック

 このようなグリーンバックの切り抜き処理+合成をクロマキー合成と呼ぶ。クロマキー合成だけなら、じつはXSplitなどの配信アプリでも処理できる。LIVの違いは、VRモーションコントローラの位置をリアルタイムで取得しつつ、カメラの画角に合わせて、ゲーム画面を合成できる点にある。

 それから当然、外部カメラも必要となる。PCのWebカメラでもいけなくはないのだが、画角や解像度を考えると、前回の記事で紹介したような、ミラーレス/一眼レフカメラとキャプチャユニットの利用を推奨する。筆者の場合は、ソニーの「α6300」とAVerMediaの「Live Gamer Extreme GC550」を使っている。カメラについては三脚も必須となる。

ソニー「α6300」
AVerMedia「Live Gamer Extreme GC550」

 なお、LIV開発元では、キャプチャユニットとして、

  • AVerMedia LGX
  • AVerMedia Extremecap U3
  • Elgato HD60 Pro
  • Elgato 4K
  • AVerMedia Live Gamer HD2

での動作確認が取れているとしている。

キャリブレーション

 セットアップの前に、この記事を読みながら設定する読者のため、先にカメラのことを説明しておこう。Beat Saberの場合、カメラの位置を工夫する必要がある。と言うのも、普通の配信ではプレイヤー、つまり自分を正面から撮影するが、それはお勧めしない。そうしてしまうと、Beat Saberでは、飛んでくるキューブが自分には見えるが、視聴者には一切見えなくなるからだ。視聴者にもキューブを見せるには、カメラをプレイヤーの視点と同じ、つまり、自分の背後に設置し、自分はグリーンバックに相対する必要がある。

 それにあわせ、ViveやOculusのセンサーもグリーンバック側に置く。PCも、普通は自分の正面に設置するが、カメラに映り込まないよう、画角の範囲外に置く必要がある。

 では、LIVのセットアップ方法を説明するが、前提として、PCにBeat Saberがインストールされ、ViveあるいはOculus Riftがセットアップされているものとする。なお、残念ながら同じPCでも、LIVは現時点ではWindows MRには対応しておらず、将来の対応予定となっている。

 まず、SteamからLIVをダウンロードする。価格は無料だ。インストールしたら、SteamからLIVを立ち上げる。初回起動時に、仮想カメラのドライバを入れる必要があるので、「Instal」ボタンを押す。

LIVの起動画面。初回起動時に仮想カメラのドライバをインストールする

 ここでSteam VRを起動して、通常のVive/Oculus機器に加え、「LIV」の文字が入ったトラッカーとコントローラのアイコンが表示されていれば、仮想カメラがきちんと動作している証拠だ。

LIVの仮想カメラドライバをインストールすると、SteamVRにLIVの文字が入ったトラッカーとコントローラのアイコンが表示される

 次にLIVの「Launch Compositor」をクリック。左側の「CAMERA」をクリックして、Virtual Cameraが「Device=Static(Virtual)」、「Class=Tracker」になってるのを確認したら、「Add」ボタンを押し、「Device」からカメラを選ぶ。

Launch Compositorから、LIV App Outputを起動。まずはカメラを追加する

 DeviceでLive Gamer Extreme GC550を選択したら、プルダウンメニューから取り込み方式や解像度を選ぶ。同キャプチャユニットの場合、方式はYUV2のみ。解像度は1,920×1,080@60fpsでいいだろう(というか、それ未満の解像度ではエラーが出てしまった)。

 次に一番重要(かつちょっとややこし)キャリブレーションを行なう。「CALIBRATION」をクリックし「Begin Calibration」を押す。縦長のパラメータウインドウが出るので、下の「Start Calibration」をクリックする。

この画面が出たら、Start Calibrationを押す

 ここで、HMDを被るよう指示が出るのだが、HMDは頭に載せるだけで、視界は確保しておいた方がいい。モーションコントローラのトリガーを引くと、キャリブレーションが開始される(ちなみに、トリガーを引く指示を出すウインドウがほかのウインドウの背後に隠れていることがよくある)。最初に行なうのは、カメラのレンズにくっつくくらいコントローラを寄せて、コントローラの輪っかの部分の中心が、レンズの中心に合うようにして、トリガーを引く。

 次に、後ろの壁まで歩き、画面右上の位置に表示される「+」印の中央と、やはりコントローラの輪っかの中央の位置を揃え、トリガーを引く。同様に、今度は左下の位置に表示される+印にコントローラを移動し、トリガーを引く。

キャリブレーション手順。まずコントローラの輪っかの中心とカメラのレンズの中心を合わせてトリガーを引く
画面右上の+印にコントローラをあわせてトリガー
最後に左下でもあわせる

 ここでHMDを被ると、画面には、カメラから映し出された自分が見える。そして、手に持ったモーションコントローラに重ね合わせるようにしてCGのコントローラが表示されているハズだ。ただし、じゃっかん本物のコントローラと仮想コントローラの位置がずれていることもあるので、トリガーで「Position」を押し、XYZ軸を微調整する。

LIV App Output上で、手に持ったコントローラにCGのコントローラが合成されている

 Latencyがどのように影響するのかはよくわかっていないが、とりあえずデフォルト設定のままで良さそうだ。

 キャリブレーションが終わって「LIV App Output」というウインドウに表示されているのは、グリーンバックが黒く切り抜かれた映像だ。輪郭の部分の切り取り具合が正確でない場合は、LIVアプリの「KEYING」から「Threshold」(閾値)、「Smoothness」(滑らかさ)を調整できる。

 なお、部屋の明るさが足りないと、絵にノイズが乗り、これが緑色の画素となって、変なところが透過されたりする。また、グリーンバックのシワによって濃淡差が生じ、暗い部分が黒と認識され、逆に透過されなくなることもある。そういったことを防ぐため、前回の記事で紹介したような証明を設置することもお勧めする。

 キャリブレーションは基本的にここまでだが、カメラの画角に対して、グリーンバックの幅が足りない場合、画面端に普通の背景が写ってしまう。そういうときは「CROP & FLIP」をクリックし、上下左右それぞれのピクセル幅を指定すると、その部分が切り抜かれる。

 これを使うことで、グリーンバックの幅が多少短くても大丈夫になるが、クロッピングで切り抜いた部分に移動してしまうと、そこが表示されなくなるので、可能な限りクロッピングに頼らず、グリーンバックの幅を確保したほうがいい。

 調整が終わったら、SAVEを押す。

 LIVアプリに戻ったら、「VIEWFINDER」をクリック。デフォルトで「Enabled」がオンになっているが、これは切っていい。これをオンにすると、HMD内の映像にカメラで撮影した自分が映し出されるが、ほぼ必要ないだろう。

 OUTPUTは、ディスプレイがフルHDの場合、1,920×1,080ドットの60fpsがデフォルトになっていた。これは、クロマキー合成で切り抜いたカメラ映像と、ゲーム画面を合成して、出力する画面のサイズ/フレームレートとなる。ひとまずは、デフォルトで進める。

 これで準備はできたので、「CAPTURE」を選択すると、プルダウンメニューに対応ゲームが表示される。Beat SaberはLIV SDKに対応しているので、ここに表示される。ターゲット解像度は、これもひとまずはフルHDのままでいい。あとは、「Sync & Launch」を押すと、ゲームが起動する。

 なお、LIVアプリの出力画面には文字の透かしが入っている。これについては、LIVのDiscordサーバーに参加し、#remove-watermarkチャンネルに記載されているURLをクリックし、フォームに必要事項を記入すると、5分以内にメールで透かしを削除するためのシリアルが送られてくる。

かなり重い処理となるので設定を下げる必要も

 普通にBeat Saberをプレイできることを確認しよう。HMDから見える映像は普段のBeat Saberとなにも変わりはないが、PC側でアクティブウインドウをLIV App Outputにすると、視点が固定されたゲーム画面のなかに自分がいるのがわかるはずだ。

 ただし、LIV App Outputに合成されているゲーム画面は、前後逆向きになっている。LIVが、標準ではカメラに対してプレイヤーが正面を向いていると想定しているためだ。その対処方法は、Beat SaberかOpenVRプラグインで行なう2通りがあるが、後者の方が楽だ。

 こちらのサイトから、OpenVR Advanced Settings Pluginをダウンロードしてインストールすると、SteamVRダッシュボードアプリに「Advanced Setting」の項目が追加され、ここで画面の向きを自由に変えられるので、左右を180度転換しよう。これで、プレイヤーの向きと視聴者に見える画面の向きが一致する。あとは、XSplitなりを起動し、ソースとしてこのLIV App Outputを指定すれば、複合現実でのゲームプレイを配信できる。

 じっさいにこの環境でゲーム配信を行なってみたのが以下の動画だ。見てくれた人からは多くの驚きの声があがった。

 ただ、1つ問題だったのが、システムの負荷の高さだ。先に紹介したとおり、今回は12スレッドCPUとGeForce RTX 2070という、ノートPCとしてはかなりハイエンドな構成となっている。GPUの負荷は60%前後だが、CPU負荷が90%を超え、ほぼ限界に達する。どうやら、LIVがあまりマルチスレッドに最適化されていないみたいで、コア1はほぼ常時100%に張りついてしまう。そのため、システムが不安定になることがあった。

フルHD 60fpsではCPU負荷が100%近くになってしまった

 生配信では配信の安定性が重要なので、多少は画質などを落とす必要がある。試した限りである程度効果があったのは、

  • 液晶のリフレッシュレートを144Hzから60Hzに下げる(ほとんどの製品ではこれは必要ないが)
  • LIVのOutput解像度を1,280×720ドットに下げる
  • LIVのターゲット解像度を1,280×720ドットに下げる
  • XSplitの配信解像度を1,280×720ドットに下げる
  • LIVのOutputフレームレートを30fpsに下げる
  • XSplitの配信フレームレートを30fpsに下げる

あたりだ。ただ、最後のフレームレートを30fpsに下げるというのは、結構かくついて見えてしまうので、どうしても性能が足りないときの手段という感じで、上から順に試すといいだろう。今回はこれをすべて実施して、CPU負荷は80%台に落ち着いた(これでも高いが)。

 性能面については、LIVの負荷がかなり高いことが影響しているが、同アプリはまだ早期アクセスのベータ版的な状態なので、今後、随時改善されてはいくと思う。

 もう1つ、Beat Saberを起動すると、片方のモーションコントローラが認識されなくなる問題があったが、これについては、SteamVRダッシュボードアプリで、設定→割り当て→トラッカーの管理で「LIVデバイス」を無効にすることで解消できる。

グリーンバック不要なバージョンも

 と言うわけで、複合現実配信を実現するLIVを紹介した。まだ、発展途上な部分もあるが、ひじょうに可能性を感じるアプリだと感じた。

 じっさい、LIV自身の改善に加え、新たな拡張も追加されつつある。その1つが、「LIV Streamkit」アプリで、このアプリを使うと、HMDの画面隅に枠が表示され、そこに視聴者のコメントが表示される。これによって、HMDを外すことなく視聴者とコミュニケーションできる。こちらも無料で、入手はLIV Discordの#get-streamkitチャンネルにあるリンクを辿って、フォームに入力するだけだ。

 また、LIVはKinect v2にも対応しており、こちらを使うとグリーンバックが不要となる。Kinectが終息になったので、やや入手性に難があるが、こちらを使うとプレイヤーの前にPCなどがあっても大丈夫になるので、セッティングはかなり楽になる。

LIV+Kinnect 2によるグリーンバックなしのデモ

 さらに、プレイヤーの位置や動きを読み取って、CGアバターを合成し、VTuberのように振る舞えるプラグインもあるほか、カメラを自由に動かせるようにもなるようだ。

カスタムアバターのデモ

 ゲームの対応については、Beat Saber以外ではあまり有名なものがないのだが、Unityで開発されたものの多くが動作するとのことで、開発元でも数十タイトルの動作確認がなされている。