開発者必見 Unreal Fest「Robo Recallで使われている最新のVR開発テクニックをご紹介」レポ
4月15日に行われた「Unreal Fest West 2017」の最後のセッションでは、エピック・ゲームズ・ジャパンのサポートエンジニア、岡田和也(通称、おかず)氏による「Robo Recallで使われている最新のVR開発テクニックをご紹介!」が行われた。「Robo Recall」自体はソースコードが公開されていて、3月に開催されたGDCでも関連セッションが行われたが、日本語で、しかも開発チームから得られた未公開の情報を交えてセッションを行うのは今回が初めて、ということで多くの聴講者が集まった。
GDCの後にEpic Games本社に行って開発チームと情報交換をしてきた岡田氏。VRヘッドセットをかぶってるのは趣味なので質疑応答で突っ込まないで!(笑)
「Robo Recall」は去年のOculus Connect 3で発表され、今年3月にリリースされたVRシューティングアクション。Oculus TouchをOculusアカウントに紐づけしている人ならば無料でダウンロード可能。紐づけしていないと3000円になるので注意が必要だ。暴走したロボット軍団を排除するために出撃し、部位破壊やテレポートを駆使して立ち向かうという内容になる。詳細は別記事のレビューを参照していただきたい。
●関連記事
・Oculus Touch専用「Robo Recall」レビュー 脳汁大爆発な全VRファンが遊ぶべきAAA級ゲーム
MOD作成キット付属でドキュメントも日本語化されました、ということで、非常に京都らしいMODが披露(笑)
「Robo Recall」の前に制作されていたVRデモ、「Showdown」「Bullet Train」における取り組みも再公開。「Showdown」では影や建物内部の簡略化が行われた。
「Bullet Train」では、つかんで放り投げたアイテムの挙動の調整やテレポートシステムなどを搭載した。
「Robo Recall」では開発期間がなんと1年に延び、総員16名体制。なおプログラマーはうち2名がインターンだったことが後で明かされている。
「Bullet Train」でのテレポートは特定位置に行く、というシステムだが、その後、プレイヤーをどこに向けるかが問題となった。というのも、移動後もその方向に向いていると方向転換をしなければならないが、センサーの問題が出てくるため、テレポート後は基本的にフィールドの中央を向くシステムとなっていた。「Robo Recall」では任意の方向指示が可能になり、センサーへの誘導指示も行われるようになった。
本作では敵ロボットの部品などをつかんでインタラクトができる、というのも売り。つかめるオブジェクトできるものは円状のUIが表示される。ただし、なんでもかんでもインタラクトできると際限なく作りこまないといけないため、重要性の低いアイテムはPhysXの物理処理で行っている。
敵弾を弾いたり、敵ロボットを引きちぎる、というインタラクションを実現するための処理。敵弾すり抜け防止のための接触判定はUE4.14で実装されたCCD(連続したコリジョン検出)で実現している。
視点の上下移動が容易な、VRならではの高低差を活かしたゲームフィールドを採用。
VRではスケール感も重要! 大きすぎても小さすぎても違和感が出てしまう。ただし、岡田氏は大きいのも小さいのもOKだとのこと。をいをい!(笑)
モデルのチェックはVR実機で行うことと同時に、リファレンスとなる背景のスケール感も大事ということで……。
本作ではGoogle マップのジオメトリをスケール感のリファレンスとして使用(そのまま使うのは規約違反なのでモデルは改めて作成)。聖地巡礼マップも提供する予定だそうだ(笑)。
影をリアルで描くと処理が重いので……という技法は「Showdown」から使われているが、今回は回転する扇風機の影をマテリアル制御で実現。こっちのほうが処理が軽いそうだ。
CapsuleShadowをつかった簡易影も採用。影の重なりも表現可能だ。
「Robo Recall」での窓は、視差射影マッピングを使用。このあたりはModkitで見られる。
後半はゲームそのものを制作するときのテクニック、というか指標。「Robo Recall」は、いわゆる「VR Ready PC」よりも若干低めのスペックを想定して作られている。
まず大事なことは、想定環境を考慮したレギュレーションを作ること。最初に何も考えずに作ると、調整に苦労する。特に常時ハードの上限スレスレな描画が必要となるVRでは、余裕を持ったレギュレーションを設定しておくべきだろう。
レギュレーションの設定は、まず基準レベルを作ってみてそこから算出するのがベストだろう、とのこと。「Robo Recall」ではレギュレーションチェックは週に1度QAが行っていた。
VRではフレームドロップしちゃいけない、というのが大前提。しかし、処理が遅いと45FPSに固定されてしまう。それの解決方法が、VRのエミュレーションを使うこと。これでヘッドセットの着脱なしにゲームのチェックができるというのが利点(ただし、最終チェックは絶対実機でやることが大前提)。
レンダリング方式の選択もVRでは重要。リッチな画像と描画速度・処理負荷はトレードオフ。2画面を同時に描画するInstanced Stereoscopic Renderingも有効で、CPU処理負荷が14%、GPUも7%改善した。
カリング領域を事前に計算しておくことでランタイムコストの軽減が可能。ただし、動くオブジェクトばかりだとあまり意味はないのでゲーム内容を考慮して使うといいだろう
ブループリントは通常はバーチャルマシン(VM)を経由して実行するため、処理コストがかかるが、あらかじめネイティブ化することでVMを通さず実行でき、時間を浮かせることができる。ただしネイティブ化すると実行ファイルに内包されるため、ファイルが肥大化するので注意。
ブループリントとC++の理想的なバランスをとることが重要。プログラマの負担を上げないことも大事です。
Tickイベントという「毎フレーム呼ばれるイベント」は、処理がつながってなくても呼ばれるため、これが多いと処理コストが増えてしまう。切ったり、呼ばれる頻度を下げるなどして対応すること。
ロボットの部位破壊に必要なインタラクション用のコンポーネントも、1部位につき3つあるので部位が増えれば増えるほど処理コストが増大、当然ながらすべてのロボットにこれらがあるわけで……。
で、処理速度を稼ぐために、その場にいるインタラクションのできるロボットにだけインタラクションのコンポーネントをつけることで、GameThreadが約半分になるという効果に。
遠いオブジェクトは左目で見ても右目で見ても視差はそんなに変わらない、というわけでその手法を使った「Monoscopif Far-Field Rendering」が現在モバイルで実験的機能として提供されている。
まとめ
Epic Gamesのタイトルはアセットやソースコードが提供されているものも多いため、こういう観点でプログラムを覗いてみることでより深い理解ができるはずだ。なお、本公演のスライドは後に公開される予定なのでチェックしてみてほしい。
(Reported by Shogo Iwai)
●関連リンク
・Unreal Engine
・Unreal Fest West 2017
・Robo Recall