「限られたスペックの中で限界まで性能を使用したVRマルチプレイシューター」に、ボイスチャットという負荷重め機能はいかにして導入されたのか。TeleXusを用いた技術挑戦譚

Sponsored Content


一般社団法人コンピュータエンターテインメント協会(CESA)は8月21日から8月23日、「CEDEC2024」を開催した。本イベントは、コンピュータエンターテインメント開発者を対象とした、ゲームに関する技術や知識を共有する国内最大級のカンファレンスだ。

本稿では、CEDEC2024にておこなわれたセッションのひとつ「VRゲーム『ブレイゼンブレイズ』とボイスチャット」の内容を紹介する。本セッションは、MyDearest株式会社のエンジニアリングマネージャーである石川智浩氏、サウンドエンジニア・テクニカルオーディオデザイナーである田中孝氏、株式会社CRI・ミドルウェアよりTeleXus事業推進室の室長である漆畑裕介氏が登壇。石川氏を中心に、VR対戦アクションゲーム『ブレイゼンブレイズ』に、いかにしてゲーム内ボイスチャットを実装したのかを解説した。


『ブレイゼンブレイズ』は、最大3対3の近接格闘バトルを繰り広げる対戦アクションゲームだ。対応プラットフォームは、Steam/Meta Horizon Store。本作は、ガントレットと呼ばれる武装を駆使して殴ったり斬ったり物を投げたりといった超人的なアクションや、それに付随してバトルフィールド内にある建物の破壊などが可能。フィールド環境の利用など、あらゆる手段を駆使して勝利を目指す、セッションに登壇した石川氏の言葉を借りると「VRでできそうな要素を比較的すべて盛り込んだゲーム」となっている。

本作には、ゲーム内の標準機能として、ボイスチャット機能が実装されている。そして本作のボイスチャット機能は、ミドルウェアであるCRI TeleXusを導入することで実現しているというのだ。本稿においては、セッションで解説された『ブレイゼンブレイズ』にCRI TeleXus導入に至った経緯から、実際にCRI TeleXusを用いてボイスチャットを実装するまでの問題とその解決に至った方法について紹介する。


詰め込んだゲームにさらにボイスチャットを詰め込もうとする苦労

まず、VRゲームと『ブレイゼンブレイズ』ならではのポイントについて、石川氏より本セッションの前提として紹介された。『ブレイゼンブレイズ』は、VRヘッドセットMeta Quest 2の対応を主眼において開発されたタイトルである。Meta Questで利用可能なアプリやゲームは、VRC(Virtual Reality Check)と呼ばれる審査を通過しなければ、Meta Horizon Storへの登録ができないという。しかも、VRCの中でもパフォーマンスに関する審査は非常に厳しいという。

そこでまず立ちはだかるのが、Meta Quest 2のスペックだ。Meta Quest 2に搭載されたCPUは、スマートフォンにも採用されているSnapdragon XR2。2019年12月に発表されたCPUである。搭載RAMは6GBで、コア数は8コアだが、ゲームで使用できるRAMは約4GB、使用可能コア数も最大3コアと制限されており、残りのRAMとコアはゲーム側では使用できないそうだ。

なお、本作においてはよりパフォーマンスを出しやすいブーストモードを使用しており、2コアの2.15GHzというスペックの中、さまざまな要素を盛り込んだゲームを作ることになったそうだ。ブーストモードを選択したのは、本作のゲームエンジンがUnityであることが大きな理由とのこと。Unityは、メインスレッドのクロック数が高い方が、パフォーマンスが出やすいという。これらのスペックの中で、常時72~90fpsを維持しなければいけない点が、本作にボイスチャットを実装しつつパフォーマンスを出す上で一番厳しかった部分であるという。


『ブレイゼンブレイズ』は、VRマルチ対戦ゲームを作ろう、という企画から立ち上がったプロジェクトである。そのモックアップ(試作品)を作り、実際にプレイをして浮上したのが、ゲーム内で意思疎通をしたいという問題だ。しかし、この段階ですでにパフォーマンスの厳しさが浮き彫りになっていた。そこでボイスチャットではない、負荷の軽いコミュニケーション方法が導入できないか試されることになった。

ボイスチャット以外のコミュニケーション方法で検討されたものは、テキストチャット、スタンプ、リアクションの3つだ。テキストチャットは、マルチプレイゲームにおいては古くから利用されているコミュニケーション方法だ。しかし、VRゲームではテキストを打ち込むのが難しく、リアルタイムで瞬時に情報を伝えることには向かない。また、固定テキストからの選択では伝えられない可能性があり、激しく動くゲームの中で文字を読むことは酔いにつながるとして除外されたそうだ。


スタンプや身振り手振りで意思を伝えるリアクションについても、固定テキストと同様、伝えられる情報に制限がかかってしまう。たとえば、「右から誰かが回り込んでいる」という作戦情報を、仲間にスタンプやリアクションだけで伝えようとしても、どうしても限界がある。VRにおける遊びとしては重要なものとして、ゲームに採用されたものの、メインのコミュニケーション方法にはなり得なかったそうだ。

そこで、ボイスチャットの導入が、再度検討されることになった。ゲームをしながらボイスチャットをおこなうだけならばDiscordの利用などもあるが、新たに環境を用意しないといけないユーザー側の負担や、知っている人としか使えないという点から、ゲーム内にボイスチャット機能を実装する方向に舵が切られたという。

そしてやはり、ゲーム内にボイスチャットを実装しようとした際に問題となったのが、パフォーマンスだ。VRCのガイドラインには、「リクエストされた表示リフレッシュレートを下回るフレームレートが長時間続かないこと」という要件がある。つまりは、処理落ちは許されないというわけである。



検証と問題の洗い出し、そしてCRI TeleXus導入へ

そこで、ボイスチャットの実装にあたってどんなツールがあり、何を検証すべきかを検討。まず求められたのは、実行中のアロケーションの有無、スパイクしないという2点だ。Meta Quest 2では、少しでもガベージコレクションが行われると、そのタイミングでスパイクしてしまうためアロケーションを起こせないという。そして、スパイクすると処理落ちが発生し、フレームレートが落ちてしまう。VRCを通過するためにこの2点は大きなポイントとなった。その他、処理時間が短く、サポートとの連携が取りやすいという条件も重視された。

そんな条件でさまざまなボイスチャットツールを検証した結果、ボイスチャット機能だけを導入するのであれば、そこまで大変な作業にはならないことがわかったそうだ。中でも、実行中のアロケーションがなく、スパイクが少なく、さらに個別対応してもらえるという、3つの条件が揃っているライブラリとして白羽の矢が立ったのがCRI TeleXusである。


CRI TeleXusとは、オンラインコミュニケーションの拡張を目的としたミドルウェアだ。オンラインゲームやメタバースなど、ネットワーク上でつながるユーザー同士のコミュニケーションをより便利にする機能を提供するものである。本稿執筆時点では、第1段階として2022年8月に正式リリースされたボイスチャット機能を提供。今後、ボイスチャット以外に、テキストチャット、ビデオチャットなどのリアルタイムコミュニケーション向けの機能の展開も予定されているそうだ。なお、クライアント向けのSDKとともに、コミュニケーション機能に必要なサーバー部分もSaaSとして提供する。

漆畑氏によると、CRI TeleXusは、リアルタイムコミュニケーションに特化しており、コミュニケーション空間の拡張を目指しているという。『ブレイゼンブレイズ』のような少人数制のゲームを含め、さまざまなマルチプレイ人数の規模に対応。さらにユーザーのコミュニケーションの支援として、文字起こし機能(提供中)やAI通訳(今後提供予定)など、ユーザー同士の対話をスムーズにするための機能も用意されている。


CRI TeleXusのボイスチャットには、 いくつかの特徴的な機能があり、そのひとつが空間オーディオボイスチャット機能だ。たとえば、ゲーム内に存在するキャラクターの位置情報を利用してボイスチャットに立体音響の処理を加えることで、前後左右から話しかけられているような状況を立体的に演出できる。相手のキャラクターの位置を感じながらコミュニケーションができるのでより臨場感のある会話が楽しめるほか、副次的な効果として複数人から同時に話しかけられたときに音が分離して聞こえやすくなるという。この効果はCRI TeleXusのデモページにて、実際に試すことができるようになっている。


セッションにて紹介されたもうひとつの特徴的な機能が、CRI ADX(関連記事)と連携することによるボイスエフェクトだ。CRI TeleXusのボイスチャット音声に、CRI ADXに搭載されているさまざまなサウンドエフェクトをかけられる機能である。具体的には、洞窟内に入ったときの残響エフェクト、ゲーム内のキャラクターが無線通信をする際には無線風のエフェクトなど、ゲームの臨場感を増すことができる機能だ。上記の処理をおこなっても、追加の負荷が軽く、遅延が増えることもなくボイスチャットができる点もCRI TeleXusの特徴となっている。


CRI TeleXusは、PC(Windows/macOS)のほか、Nintendo Switch/PS4/PS5/Xbox One/Xbox Series X|Sに対応。これらのプラットフォームは、すべてクロスプラットフォーム対応しているとのことだ。そして、ゲームエンジンは、Unity/Unreal Engineに対応。『ブレイゼンブレイズ』に関しては、Unityに組み込むかたちとなっているという。なお、独自ゲームエンジンなどで使用したい場合は、問い合わせしてもらえれば個別に対応してくれるそうだ。

『ブレイゼンブレイズ』へ実際にCRI TeleXusを組み込んでみると……


元々『ブレイゼンブレイズ』は、初期開発段階からCRI ADXを組み込んでおり、ゲーム内のBGMやSFX、ボイスを再生するよう作られていたという。その後、開発が進んで後からボイスチャット機能が必要となり、CRI TeleXusが組み込まれたそうだ。

実際に『ブレイゼンブレイズ』へCRI TeleXusを用いてボイスチャットを組み込むということになったものの、開発側としてはまだいくつかの懸念点があったという。まず、導入のしやすさについては、SDKをインストールすればUnity上ですぐサンプルが起動し、とてもシンプルだったそうだ。ただし、『ブレイゼンブレイズ』では使わない機能なども含まれていたため、まずそれらを削除する対応がおこなわれた。


次の懸念点は、CPUの負荷だ。最重要なことはゲームが安定して動作し、ユーザーが遊べること。まずはエンコード品質を最低設定にし、サウンドエフェクトをかけず、3Dサウンドを使用しないという最低条件で実際に動作するのかを確認したそうだ。

最後の懸念点として上げられたのは、ゲーム性と音量バランスである。『ブレイゼンブレイズ』内でのコミュニケーションとしてのボイスチャットを入れるにあたって、『VRChat』などのVRSNSで用いられるような簡単なミュート機能や自分が喋っていることがわかる機能、そして音像定位でどのキャラクターがしゃべっているのかを識別できるようにしたいと考えていたそうだ。

さらに、ゲーム内のキャラクターの状況に応じて、ボイスチャット音声にエフェクトをかけたいという展望もあったとのこと。たとえば、キャラクターがやられてしまったときに、残響を加えるといったエフェクトをかけたかったという。一方、本作はキャラクターが激しく移動するため、音像定位によって音が移動し過ぎて不自然になるという懸念もあったそうだ。


また、本作にボイスチャットを入れるにあたって、ほかの音との兼ね合いも考えられている。スピード感のある本作は、状況判断に効果音が重要であるため、力を入れて作られたという。一方で、音楽に関してはゲームの状態を表現するために使用しているとのことだ。そして、本作に登場するキャラクター自体にもキャラクターボイスが用意されている。キャラクターボイスとボイスチャット音声が邪魔し合う可能性も考えられたそうだ。ただし、キャラクターボイスは世界観を伝えるために絶対に必要なものとして実装する方向で進められた。

こういった懸念を抱えつつ、実際に前述の最低条件下でテストをしてみた結果、フレームレートが50~60fpsという、よろしくない結果となってしまったそうだ。そこで、開発チームはまずはCPU負荷への対応を開始。元々、本作はボイスチャットを入れるには、Meta Quest 2のスペックではギリギリ過ぎる状況だったため、アプリ側とサウンド側それぞれの処理負荷を見直すこととなった。

アプリ側の処理負荷削減は、発音制御がおこなわれたほか、同フレームにおこなわれる処理を分散。過剰な同時発音も抑制したという。発音制御された一例としてあげられたのは、建物の崩落音や破壊音といった、複数同時に再生される可能性のある音や、銃のヒット音など、非常に短い間隔で複数再生される音、一定間隔で鳴る音などが該当。崩落音・破壊音であれば、同時に破壊されたものはひとつにまとめ、銃のヒット音は、最初の音を鳴らし、鳴らすべき残りの音はある程度間引き、ヒットしたことがわかるということを重視するかたちに調整したそうだ。また、ゲーム内で一定間隔のタイミングで鳴る音に関しては、毎回音を呼び出して鳴らす方法から、ループ再生に変更してゲーム側で制御する方法に調整したという。

一方、サウンド側でおこなった処理負荷削減は、ストリーム再生の禁止とエフェクト処理の調整だ。メディアからストリーム再生をおこなう際に、読み込みが発生する分の負荷を回避するため禁止にしたという。その代わり、『ブレイゼンブレイズ』ではメモリの空きに余裕があったため、ストリーム再生していた音をメモリに波形をロードして再生するという処理に変更したそうだ。ただし、そのためにロード時間を延長。長尺の音やボイス、マルチチャンネルのBGMは、特にロード時間への影響が大きかったとのことだ。

エフェクト処理も、重いエフェクト処理であるリバーブを避け、ディレイに置き換えられた。ほかにも、リアルタイムのダッキング処理(音が聞こえやすくするために音量を自動調整する処理)も禁止にしたそうだ。ダッキング処理の代わりに、事前に各音の音量を調整するという昔ながらの手法で、さまざまな音が同時に鳴ってもちゃんと聞こえるように調整がおこなわれている。


さらに、Unityの最適化もおこなわれたという。Updateを極力呼ばないようにしたり、CRI AtomやCRI ListenerなどのUnityコンポーネントを使用せずにネイティブ寄りの関数を呼ぶ方法、GameObjectの継承を最小にし、無駄な処理の呼び出しを減らす対応が施されたそうだ。

そして、ゲーム中の同時発音数を可能な限り減らす対応もおこなわれている。田中氏によれば、3対3で戦い、周りの物も破壊される本作では、200音くらい使いたいというイメージをしていたそうだが、最終的には20音を切るくらいの同時発音数に着地したという。実際にゲームを動かし、聞こえるべき音が消えていないかを社内ツールで確認し、音の優先度調整などを地道に設定するという、手間のかかった作業によって、さらに処理負荷が削減されている。

MyDearestが用意した社内ツール。どの音がどういう状況なのかを確認できるツールであるそうだ


こういったアイデアを駆使した調整の結果、VRCの審査基準を満たす定常時のフレームレートの維持に成功。しかし、ボイスチャット接続時など、一部のタイミングで世界が停止するという、停止問題が新たに発生。こちらに関しては、ルームに入室してマイクデバイスのオープン処理がおこなわれるタイミングでロックが発生していたそうだ。ただし、この問題自体は根本的な解決はできなかったそうで、現状では入室するタイミングで都度フェードアウトするという手法がとられている。VRCでは、ロード時間やシステムUI表示中にフレームレートが落ち込むことは問題がないため、その部分を使ってうまくVRCの基準を満たしたそうだ。


4つの問題とその解消、CRI TeleXusチームとも連携

停止問題も解決し、これで完璧かと思いきや、さらなる問題が発生してしまう。今度は検証ではなく6人で普通にプレイをしてみると、フレームレートの低下が再び発生。通常の対戦で重い処理が重なる場面で、フレームレートが少し低下してしまったそうだ。

さらに、負荷が大きいタイミングでは、まったくフレームレートが維持できなかったという大きな問題も発覚。本作は、ゲーム中の時間経過で周囲のフィールドが崩落し、バトルできるエリアが狭まるというシステムになっている。崩落の際、バトル可能エリアの外にある建物などが一気に破壊されるようになっており、そのタイミングが特にCPUに負荷がかかっているという。


開発チームは、これらのふたつの問題の解決方法を検討。その結果、ボイスチャットがなければ問題がないということが明らかになった。調整によって、いくらかの処理負荷削減ができたものの、それでもボイスチャットにかかる処理負荷のコストを払いきれていないというわけである。そこで、MyDearest側からCRI TeleXusチームに相談を持ちかけた結果、MyDearestにCRI TeleXusチームが出向し、最適化チームが結成されることになる。

最適化チームは、まず問題点の洗い出しをおこなった。そして、4つの大きな問題点が上げられた。まずは、Opus(オーディオコーデック)のエンコード負荷が高いという問題だ。この問題は、CRI TeleXusのOpusのVer1.3をVer1.5にアップデートすることで改善が見込めそうという話があり、その対応で実際に解決。Opusのアップデート対応によって処理負荷が30%ほど低下し、負荷がかかるとフレームレートが低下する問題に関してはほぼ解決したという。なお、この問題への対応が、4つの問題点の中でもっとも効果的であったそうだ。


しかしながら、依然としてフレームレートが低下するタイミングは存在。2つ目の問題点は、サウンドの別スレッドがメインスレッドを阻害することだった。この問題は、おもに優先順位が制御できず、ほかの優先すべきタスクとサウンドの処理がぶつかり、待ちが発生することによって起こっているものだった。

赤丸の部分が該当するサウンド処理の箇所。この部分が空白部分(処理の間)に埋まることで処理落ちしないことまではわかっていたそうだ。


この問題はアプリ側では対応できないものであったため、MyDearestよりCRI TeleXusチームに優先順位が制御できる機能の実装を依頼。CRI TeleXusチームが快く引き受けたことで対応が完了した。追加された機能で音声送信スレッドの優先度をもっとも低くし、ほかの優先スレッドを阻害しないように調整が施されたという。さらに、音声送信用のバッファサイズをデフォルトの倍に設定。これらの対応によって、ボイスチャットとしては遅延が多くはなっているものの、ゲームプレイに支障がない程度に収めているそうだ。


さらに、前述の機能以外にもCRI TeleXus側からボイスチャット導入のために必要な新たな機能が提供された。まず、CRI TeleXusの定期処理をCRI ADXやCRI Sofdecと同じ定期処理スレッドから分離した。これにより、処理と処理の間にある空きにサウンドの処理を埋め込みやすくなったという。これによって、3つ目の問題でもあった、そもそも定期処理のスレッドが重いという問題も解決した。

そして、CRI TeleXusの定期処理スレッドの優先度を、メインスレッドよりも低く設定。一方で、CRI ADXやCRI Sofdecの定期処理スレッドの優先度はメインスレッドよりも高く設定したそうだ。このような設定を行った理由は、4つ目の問題である「メインスレッドの阻害によるパフォーマンスの低下」と関連がある。メインスレッドとそれ以外のスレッドの間で排他制御によるロックが発生したとき、メインスレッド側がロックの解除を待っている時間分だけメインスレッドの処理が阻害されてしまうらしいのだ。

実際にこれが原因でパフォーマンスが落ちる現象が発生していたという。特に、『ブレイゼンブレイズ』のようにコア数が少ない特殊な状況下では、このロックによる影響が出やすいとのこと。この問題を解決するため、まずメインスレッドが阻害される要因を排除し、ロック自体がかからないように調整された。そもそもなぜロックがかかってしまうのかを調査したところ、CRI ADXで音声の再生・停止・状態更新といった処理を呼び出すと、ロックがかかってしまうことが判明。そのため、ロックがかからないようにCRI ADXをカスタムしてもらい、それをMyDearestのサウンドチームが組み込むことで問題は解消した。
また、キュー名指定再生などでの処理を軽くするため、文字列処理の排除もおこなわれている。


血のにじむような最適化の努力の末、VRCの審査を通過


このように、MyDearestとCRIの連携により最適化が行われ、『ブレイゼンブレイズ』は無事にVRCの審査を通過することができた。MyDearestからCRI TeleXusチームへ無茶振りをした部分もあるそうで、それに見事に対応してくれたことについて、壇上で石川氏は漆畑氏へ感謝を述べていた。

ちなみに、苦労を積み重ねて導入した『ブレイゼンブレイズ』のオンラインマッチにおけるボイスチャットの利用率は、約31%とのこと。また、新規にゲームを始めた際、ボイスチャット設定の初期値を無効にしていると23%、有効にしていると42%という違いがあることが、発売から1か月のデータで明らかになったそうだ。


石川氏は、『ブレイゼンブレイズ』へのボイスチャットの導入自体は楽なものだったという。ただし、プラットフォームの制約から、これまでに述べたとおり最適化には大変な苦労があったそうだ。それでもゲーム性を変えることなく、Meta Quest2の性能限界に挑みつつ、パフォーマンスが厳しい中でもボイスチャットを導入できたのは、CRI TeleXusあってのことだったという。もし最初からボイスチャットを導入する想定をしていれば、もう少し導入が楽だった可能性はあったかもしれないものの、結局はCRI・ミドルウェアの協力なくしては難しかったという。

そして、田中氏は『ブレイゼンブレイズ』は意図せずサウンド処理の限界に挑む作品になったと語る。コアを減らしてオーバークロックするという小コア構成によって、サウンドに優しくない最適化方針となったそうだ。また、田中氏は今後のVRゲームにおいて、サウンド専用のコアが必須であると考えているという。さらに、音の経路探索やより立体的な効果音の再生、OBA(オブジェクトベースオーディオ)を利用した定位音など、最新技術を使ったVRゲームサウンドを目指している模様だ。


最後に、漆畑氏から改めてCRIWAREについての紹介がおこなわれた。『ブレイゼンブレイズ』では、ボイスチャット機能の導入に大いに活躍したCRI TeleXus以外にCRI ADX、さらにゲーム内動画再生にCRI Sofdecが採用されている。CRIWARE各製品のゲームに採用することで、チューニングのみではなく、システム全体を見通した上での最適化まで、さまざまな提案、サポートをしてくれるそうだ。本作のように、もしもゲーム開発の映像・音声周りで悩んでいることがあれば、相談してみるといいだろう。