1つのタイトルに囚われない柔軟な拡張性
MT FRAMEWORK時代には、その総合開発環境の利便性から多くのタイトルがゲームエンジンを採用したが、それによる問題も生まれた。そのひとつがタイトルに特化したエンジン改良による互換性の喪失だ。例えば、アセットの管理手法などは開発タイトル、開発チームに大きく依存する。それによって多数の追加機能の要望が各チームからエンジン開発陣に集まるが、全ての要望を満たしたアセットブラウザを実装すると、逆に使い勝手は悪くなってしまう。しかし、かと言ってその機能を実装しないわけにもいかず、ついにはタイトルごとに個別機能が実装された"別のゲームエンジン"が大量に生まれることになってしまう。この"別のゲームエンジン"は互いに互換性がなく、アセットや資産の流用が行えなくなってしまっていた。
そこで、その問題を解決するためRE ENGINEが採用したのが各エンジン機能のモジュール化だ。例えば『バイオ7』では、物理演算はHavok、サウンドシステムはWwiseを採用している。もちろんカプコン内製の物理演算ライブラリなども存在するが、『バイオ7』ではアーティストが使い慣れたツールでの開発を重視し、ミドルウェアの採用を決定した。しかし、すでにRE ENGINEで開発が行われている他のタイトルにおいてそれは同様ではない。RE ENGINEにおいては各種内製のライブラリ採用やレンダリングシステムの入れ替え、ミドルウェアのインテグレートなどを選択的に行えるように設計されている。これによりエンジンのコア部分に手を入れずとも、タイトルごとの柔軟な対応を可能としている。もちろんその際、エ ンジンの基礎部分は統一化されているので各種リソースは互換性を保ち、流用することができるというわけだ。
さらにそのRE ENGINEの互換性を大きく補助するのがPythonを利用したマクロ拡張機能だ(B-1)。RE ENGINEがいくら選択的にエンジン機能を設計できるといっても、あらゆる全ての機能を網羅することは難しい。そこでRE ENGINEでは、各種機能にPythonを用いてアクセスできるように多数のAPIを公開。Pythonスクリプトで記述することで、様々なツールを部分的に後付け拡張できるようになっている。特に、Pythonは各種DCCツールで多く採用されていることも後押しとなり、各アーティストがほしい機能をほしい部分に柔軟に追加することが可能になっている。
B-1 Pythonマクロによる機能拡張
RE ENGINE上でPythonマクロを記述している様子。Pythonマクロ用のエディタも用意されている
Pythonからアクセスすることのできる多数のRE ENGINE API。見やすくドキュメント化されており、サンプルも豊富だ
アーティストが作成したPythonマクロ。クリックひとつでMayaからRE ENGINEへエクスポートし、自動でアセット化までしてくれる。そのほか面白いものでは、テレメトリに溜めたユーザーのプレイデータをRE ENGINE上でヒートマップとして表示するマクロなどもある。大小の機能を合わせると現在100種を超えるマクロが存在しており、日々増えていっているそうだ
『バイオ7』を表現可能な最先端グラフィックス
RE ENGINEにおいては、その開発速度と共にもうひとつの進化が求められた。それが最先端のグラフィックス表現だ。RE ENGINEでは開発目標とするタイトルが『バイオ7』というAAAタイトルである。『バイオ7』においては、実写と見紛うほどのフォトリアル表現、かつ完全VR対応でありつつフルHDの60フレーム厳守という、表現・パフォーマンス共に厳しい達成目標が課せられていた。その要望を満たすレンダリングシステムの構築はかなり難易度の高いものだったようだが、RE ENGINEは巧みに実現している。
まずレンダリングシステムには「Clustered Deferred」を採用。多数の部屋を行き来するレベルデザインになっている『バイオ7』では、部屋ごとに配置してあるライトをいかにカリングするかが重要であり、深度方向のライトカリングが可能な「Clustered」はまさにうってつけだったと言える。さらに、PS VRを含めた複数のプラットフォームに対して開発を行う必要のある『バイオ7』においては、パフォーマンス調整のしやすい現行スタンダードの「Deferred」の採用も必然だったと言えるだろう。影計算においても可能な限り削減するため、キャッシュシステムを実装している(C-1) 。
また、『バイオ7』ではホラーを突き詰めることがコンセプトのひとつとなっており、静的・動的なものに関わらず一体感のあるライティングが求められた。それにより採用されたのが「プローブネットワーク」による間接照明である(C-2) 。従来、カプコンではこの間接照明にライトマップ方式を採用することが多かったが、RE ENGINEではそれを完全に排除した。「プローブネットワークを採用することで、これまで問題となっていたキャラクターや背景の間に生まれるライティングの 差異を解決することができました。さらには、ライトマップ作成のための長いベイク時間などを削減することで高速なイテレーションにも一役買っています」と三嶋氏は自信をのぞかせる。プローブネットワークの採用の効果はメモリや処理負荷においても現れている。ライトマップ手法と比べるとプローブネットワークは使用メモリを2/3ほどに削減。さらにはライトマップUVのレイアウトがなくなったおかげで内部的にはインスタンシングレンダリングが可能になり、CPU・GPUの処理負荷軽減にも寄与している。この点はパフォーマンスに高い目標を課せられていた『バイオ7』において非常に重要な効果があったと言えるだろう。
C-1 影キャッシュ
最終的なレンダリングシーン
シーンにおいて使用されている各ライトのシャドウマップ。これらのシャドウマップはキャッシュ化されており、動的な物体(キャラクターなど)が映るまでは更新されない。ゲームにおいてリアルタイムな影の描画は非常に高コストであり、この点を効率化するのはRE ENGINEのレンダリングシステムにおいては非常に重要だったと言える
C-2 プローブライティング
-
最終的なレンダリングシーン
-
プローブネットワークを可視化した画像。プローブ間の接続関係は四面体構造で管理されており、インゲームではBSP-Treeを用いて探査している。また、探査時には1フレーム前の結果を再利用するなどしてパフォーマンス改善も行なっている