「UE4でモバイル向けハイエンドゲームを作るなら今がちょうどいい」1年後を見据えたモバイルゲーム開発【Unreal Fest West ’17】
先月4月15日に開催されたEpic Games Japanによる大型勉強会Unreal Fest West ’17内で、「モバイルゲームにもっとクオリティを!UE4を使ったハイクオリティなモバイルゲーム制作について」と題された講演がおこなわれた。登壇したのは、Unreal Engine 4のコミュニティ界隈ではおなじみの中村匡彦氏。今回の講演では、ハイクオリティなモバイルゲームを作る重要性と、Unreal Engine 4(以下、UE4)で制作したハイクオリティなタイトルを、どのようにモバイル端末に落とし込むかという課題を焦点に、話は進められた。
いま作り始めるのがちょうどいい
まず中村氏は、現在の市場で存在感を見せているUE4製のモバイルゲームを数タイトル紹介。最初に紹介された『Lineage 2:Revolution』は、韓国のみの配信であるにもかかわらず、30日で200億を売り上げていると中村氏は話す。次に紹介された『HIT』はすでに国内配信されているアクションゲーム。App Storeの売上ランキングでも上位に入ることも多い。同作は韓国産であるが、国内向けにカスタマイズされている。
今韓国で話題を集めている『BLADE 2』は、UE4製モバイルゲームのなかでも特にハイクオリティなものになっているという。また前作が『ゼルダの伝説』ライクなタイトルとして注目を集めた『Oceanhorn 2』はUnreal Engine 4で開発されているとのこと。いずれのタイトルも美しく、進化が進むモバイルタイトルのなかでも高いクオリティ水準にあると感じられるだろう。中村氏は、このように、モバイルゲームもハイクオリティなものが求められる時代がきていると語る。
しかし、モバイルゲームを作るうえでは市場も考慮しなければいけない。2017年の3月時点で、全世界のモバイルOSのシェアはAndroidが66%で、iOSが29%、その他のOSが5%となっている。ちなみに日本は世界のシェアのほぼ逆であるとのこと。韓国ではAndroidが81%,iOSが18%となる。iPhone 5S以降のiOSではMetalというグラフィックAPIがあり、現在のUE4でも品質の高い映像表現が可能である。一方、問題となるのはAndroidだ。Androidデバイスは搭載されているGPUとバージョンによって使用できる映像表現が大きく変わる。それゆえに、Androidでは特に事前のリサーチが重要になる。
AndroidはOpen GL ESが多く採用されており、特に重要なのがOpen GL ES 3.1が使えるかどうか。Androidのバージョン5.0(ロリポップ)以降があればOpen GL ES 3.1が基本的に使える。ただしSnapdragon チップセットAdenoの300番台など、格安スマホの一部はこうしたOSでも動かないといった例外があるようだ。世界の市場を見ると、現在Androidで使用されているOSの割合は、5.0以降が66%ほど。1年後には80%を超えるとみられており、中村氏は5.0以降のOSが市場の過半数となる「1年後」に向けて今から開発を始めるのがちょうどいいと力強く主張する。
中村氏は実際にOpen GL ES 3.1とAndroid OS 6.1を搭載した2015年4月発売のスマートフォン「Samsung Galaxy S6 Edge」を使って、デモンストレーションを披露。解像度は720pで動いている。比較的負荷が軽いSequencer Demoは平均30FPS、負荷がかかるShowdown Demoは10から15FPSという結果となった。最適化されていない状態では動作はやや厳しいものの、グラフィックのクオリティは高水準だ。中村氏は「モバイルの描画性能はDirectX 11に近く、工夫によってはPlayStation 4に近いレベルまで表現できるようになっている。つまり、先を見据えた開発が必要になってきている。」と述べた。
また中村氏は新世代グラフィックAPI「Vulkan」についても言及。VulkanはOpen GL 4.5やOpen ES 3.2同等の性能を持ちながら、さらなる実行性能を引き出すというもの。ただ、Unreal Engine 4には対応しているもののVulkanにはAndroid OS 7.0(Nougat)以上でかつGPU OpenGL ES 3.1以上が求められるので、現在はごく一部のハイエンドにしか対応していない。それゆえに中村氏としては「数年後の普及に期待」とのことだ。
モバイル向け最適化の道
次に中村氏はUE4でハイエンドモバイルゲームを作る際のノウハウを紹介。バージョン4.15から実装された新機能「ハイエンドモバイルプレビュー」は非常に便利で、iOSのMetalやAndroidのOpel GL ES 3.1をPC上でエミュレートするというもの。完璧な再現とはいえないものの、実際にモバイル端末に転送する手間を省いて、動作の確認ができるという点で不可欠な機能であるといえる。
またおさえておきたいのがレンダリングの違いだろう。レンダリングは大きく分けて2種類あり、Forward RenderingとDiffered Renderingがある。Forward Renderingでは、画面上に情報を置き再計算するテクニックが全般的に使えないのと、もし使えても動作が重くなってしまうので調整が必要だ。特にScreen Space Reflectionによる反射がおかしくなってしまうので、注意が必要とのこと。またGバッファも基本的には使えない。一方でマルチサンプリングアンチエイリアスが使えるといった利点もある。UE4では基本的にDiffered Renderingが一般的であるが、モバイル時にはForward Renderingとなる。しかし、現在Mobile Differed Renderingが開発中とのことで、将来的な実装が予定されているようだ。アンチエイリアスに関しては、Mobile Temporal AAとMobile MSAAが用意されている。設定をいじらない限り、前者で動くようになっているが、Mobile Temporal AAはジャダーと呼ばれる残像感が出やすい。ゆえに中村氏はForward Renderingを使用する場合はMobile MSAAを推奨している。
バージョン4.15よりトーンマッパーに物理ベースのポストプロセス設定が追加され、発色が変化し、HDRにも対応した。一方、こうした変化はモバイルゲーム開発にも大きく影響した。具体的には4.15以降はかなりグラフィックが暗くなるという。こうした仕様はコンソールコマンド「r.TonemapperFilm 0」を入力することで元に戻すことが可能のようだ。この設定を保持したければ「DefaultEngine.ini」の「SystemSettings」のカテゴリーに「r.TonemapperFilm=0」を入力すればいいとのこと。0にすると被写体深度の効果がでるものの、ポストエフェクトは1にしないと有効にならないので、細かい調整が必要になるようだ。
中村氏は次に、モバイルに落とし込むためのレンダリングの最適化を語った。Mobile HDRはポストエフェクトやライティングのために必要であるが、設定を切ればパフォーマンスが向上するので、2Dゲームなどでは切ってしまってもいいと氏は強調する。またPCでは軽いマテリアルでも、モバイルではそうではないということが多々あるので、シェーダー複雑度をプレビューモードに切り替えてみることが重要だ。
Androidにおいては、UE4はGPUを取得し固有のプロファイルを設定することもできる。
デバイスによって設定を保存し、Low/Middle/Highと振り分ければ、より効率的な最適化ができるようだ。ソフトウェア側だけでなく、「DefaultDeviceProfile.ini」ファイルを直接書き換えることもできる。またUE4にはコンテンツスケールというコンソールコマンド「r.MobileContentScaleFactor」に数字をわたすと、デバイスの起動時の解像度が設定できる。0ならばデバイスのネイティブ解像度、1ならばAndroidなら1280×720、iOSならRetina未満の解像度になる。
デバイスプロファイルやコンソールコマンドで「Material Quality Level」の数字を「0~2」に設定すると、クオリティを切り替えることができる。確認する際は、スケーラビリティ設定のなかから「Material Quality Level」をLow/Medium/Highで切り替えることができる。こうしたクオリティスイッチのノードをうまく利用することで、ゲームの負荷に応じてクオリティを上げたり下げたりできるという。
こうした細かい設定は、プロジェクト設定のなかのレンダリングのカテゴリーのなかの「モバイル」で調整することができる。特に重要なのは前述したようにHDRとMSAAの項目だろう。MSAAを上げると綺麗になるが、負荷が高くなるので注意が必要である。シェーダーを設定する際にも、削減するとロード時間、メモリ、パッケージのサイズも減るが、影表現が犠牲になる点には注意が必要であるようだ。影表現については、変調シャドウは、カスケードシャドウに比べて制約が多いが、見た目もよくパフォーマンスも良好であるので、モバイルに向いているという。
デバイスレベルの設定を上書きするMaterial Quality Overrideも重要で、たとえば、個別に設定したマテリアルを無視して、性能に応じた設定を引き出してくれるという優れものだ。
さっそく中村氏はこうした設定を適用させたうえで、さきほどのふたつのデモを動かした。平均30FPSだったSequencer Demoは40~50を維持し、10から15FPSだったShowdown Demoは15から20FPS程度に上昇し、改善が見られたという。Showdown DemoのFPSが上がりきらなかったのは、ポリゴン数が一時は110万もあったことが理由だという。一方で快適に動作するSequencer Demoのポリゴンが最大時でも30万程度であり、Showdown Demoはポリゴンの多さが負担をかけていたようだ。
ほかにも、カメラ範囲に見えるものだけを集中して描写する「Precomputed Visibility」、サイズと描写距離にあわせてオブジェクトをカリングする「Cull Distance Volume」、複数のアクターを選択してマージすることで負荷を減らす「Merge Actors」などさまざまな手法が紹介された。ちなみに中村氏はSamsung Galaxy S6 Edgeで『HIT』を1時間遊んだところ、バッテリーの消耗は30%程度だったと語った。
UE4は4.15から導入された「サードパーティのデバッガーの統合」によりAndroidのMaliやAdrenoが直接プロファイリングできるようになったり、iOSとAndroidの両方でGPSロケーションサービスが利用可能になったり、モバイル向けにさまざまな新機能が追加されている。最後に中村氏は講演を振り返りつつ「最新のUE4を使えばハイエンドが比較的楽に作れる」と絞めセッションは終了した。
UE4といえば、ハイエンド向けには強いが、スペックやバッテリーなど制限のあるモバイルデバイスに合うイメージはなかった。しかし、バージョン4.15になり、モバイルゲームを作りやすい環境が生まれつつあり、市場にもUE4製のヒットタイトルが生まれている。ゲームエンジンもデバイスも著しく進化する現代では、中村氏が述べたようにモバイルゲームもまた「先を見据えた開発」が必要なのかもしれない。