【Unite Tokyo 2018】『ミリシタ』の"13人ライブ"を実現した最適化プロジェクト「AKANE大作戦」の全貌が明らかに……!


マルチプラットフォーム向け統合開発環境「Unity」を提供するユニティ・テクノロジーズ・ジャパンは、5月7~9日の3日間、Unityに関する国内最大のカンファレンスイベント「Unite Tokyo 2018」を、東京国際フォーラムで開催している。
 
Unite Tokyo 2018は、Unity本社からゲームエンジンを開発している精鋭スタッフが来日するほか、国内のエンジニアやUnityユーザーも登壇し、様々なジャンルでUnityの最新機能の解説をはじめとしたテクニカルな講演やブース出展が数多く行われる。
 
本稿では、5月8日10時50分より行われた、「なんとっ!ユナイト!ミリシタをささえる『AKANE大作戦』とは?」についてのレポートをお届けしていく。
 
なお、本講演には、バンダイナムコスタジオ リードプログラマの池田早人氏、プログラマーの加藤政樹氏が登壇。『アイドルマスターミリオンライブ!シアターデイズ』(以下、『ミリシタ』)開発時の出来事を中心に、「AKANE大作戦」と銘打たれた最適化プロジェクトで様々な問題点をエンジニアたちがどのように解決してきたかについての話を展開した。
 
【講師紹介】

▲バンダイナムコスタジオでリードプログラマを務める池田早人氏(写真右)と、プログラマーの加藤政樹氏(写真左)。
 
1996年にハードエンジニアとしてナムコに入社した池田氏は、『ミリシタ』ではクライアントエンジニアのまとめ役として、進行管理やプロジェクトのバージョン管理(Perforce)などを担当している。講演の冒頭では、まず池田氏が『ミリシタ』のゲーム概要を紹介した。
 
本作は、バンダイナムコエンターテイメントがiOS/Android向けに2017年6月より配信を開始した、アイドルライブ&プロデュースゲームである。765プロライブ劇場(シアター)を舞台に、プレイヤーは765ミリオンオールスターズのアイドルたちをプロデュースしていく。ステージでのライブやお仕事、劇場でのコミュニケーションを通じてアイドルと「もっとふれあえる」要素が盛りだくさんとなっているゲームだ。
 

▲ライブシーンでは自分の好きな5人のキャラを選んで配置できるのだが、今回の講演では、如何にしてこのライブシーンを最適化して実装したかということに言及した。
 
『ミリシタ』では、1キャラを約10000ポリゴンで作成。そのほか、衣装テクスチャは1024×1024の1枚であることや、ステージデータをどのように作成しているかについても下記の通りに紹介された。
 


▲ステージテクスチャは、1024×1024の2枚をベースに演出用に小さいものを組み合わせて使っているとのこと。
 
続いて、ポストエフェクトと解像度について説明。「フレア」と呼ばれる光を被せるエフェクトは元々入っているものが高品質でモバイルでは重くなってしまうため、独自に軽量化したシェーダーを実装しているという。また、解像度は基本1280×720、iPadなど縦横比が4:3の際には960×720と、720をベースに作っていると紹介した。また、GPU性能が低い端末向けに低解像度モードを用意したうえでMSAAをかけることでジャギーが目立たないような工夫もしている。
 

▲解像度については、現在iPhone Xへの対応も行っているとのこと。
 
どのキャラが、どの位置で、どんなダンスモーションを、どのような表情で口を動かしているかなど、全てのデータが入った「タイミングシート」をUnity用として新規に作成。これは、元々家庭用ゲームでも採用されているものであるという。
 

▲リリース時は最低限の機能しか実装されていなかったが、運営を経てアーティストやデザイナーの意見を取り入れながら現在も改善を行っている。
 
また、一部の曲はユニットを組んだメンバーの位置で歌うパートが異なる「歌い分け」が用意されている。アイドル毎にボーカルが収録されているため、全ての組み合わせで聴こうとすると、1曲2分半として計算しても約1500年は必要になると膨大な数字が発表された。
 

 
続いて、開発スケジュールが発表された。ここで、本講演のテーマである「最適化プロジェクト」はリリースの約5ヶ月前から始まったことが明かされた。
 

 
池田氏は、「何故、最適化プロジェクトが必要になったのか」について、当時は端末確認を最新機種のiPhoneでしか行っておらず、iPhone5やAndroid端末でスムーズに動かなかったと説明。これは、一見単純なようでありながらもモバイルゲーム開発の現場ではよく見られる失敗だと注意喚起を促した。
 
しかし、当時の開発メンバーは機能実装で手が一杯だったため、開発チームとは別ラインで動けるスペシャルチームを結成する必要があるとの判断で最適化プロジェクト「AKANE大作戦」の立ち上げに至った。
 

 
AKANE大作戦では、最終的に平均FPSを60に近付けることを目標に、まず大きく分けて下記の4点を達成することを目指した。


 
そのために、「プロジェクト設定の見直し」、「3D描画部分の高速化(CPUとGPUを効率良く見ていく)」、「2D描画部分の高速化(CanvasからSpriteへ、透明部分の無駄な描画はないか、イメージのアトラス化など)」、「スパイクさせない工夫(GCをしない、させない、やらせない)」という4点からアプローチを行うこととなる。
 
また、目標達成にあたりポリシーとして「ビジュアルのクオリティを下げないこと」を大前提に、ギリギリまでエンジニアで頑張ることが掲げられていたという。これは、今後発売される新たな端末でビジュアルが見劣りしてしまわないよう高品質のものを維持したかったと池田氏は語った。


▲行った改修が数値にどのように反映されているかについては、UnityProfilerのほかSnapdragon Profilerなどを使用して必ず確認していたという。特に、日本の端末は発熱によるクロックダウンへの保護が早い、海外の端末は中々落ちないといった傾向は知っておいた方が良いとのこと。
 
改修のアイデアについては、プロジェクトメンバー全員でアイデア出しを行ってリスト化、優先順位を付けて実装とテストを繰り返していったという。テストを行うにあたって、頭で考えるだけでなく、可能性がありそうなものからなさそうなものまで、とにかく手を動かして何度もトライすることが重要であると池田氏は話した。
 

▲P→D→C→Aを繰り返す際には、最適化項目をオン/オフができるようにしておくと作業がスムーズになることや、数多くいるキャラの中でも負荷の重いキャラを選択して計測することがオススメされた。
 
そのほか、Unityに関しては新機能の追加を待つのもひとつの手であることや、リリース後にUnityのバージョンを上げるのは苦難の道となることなどが紹介された。『ミリシタ』では、現在もポストエフェクトの改修やマテリアルの統合など日々最適化を継続化しているという。
 


 
その後、運営を続けるにあたって「13人ライブ」の話が挙がった際には、検証用プロジェクトを作成したところ思ったより大きな問題も起こることなく、3ヶ月弱という期間で完成させられたとの話も。池田氏によると、これは日々最適化を続けてきた功績によるところが大きく、小さな積み重ねが大きな結果に繋がると最適化の重要性を説いて話をまとめた。
 


 
ここからは加藤氏が登壇し、最適化についての具体的な事例を紹介。
 
描画負荷対策をするにあたっては、先ほど池田氏も述べた通り作ったモデルはそのまま使用しているためアセットの作り直しなどは行っていない。そこで加藤氏は、今回、サブメッシュ統合という手法を用いたことを発表した。
 

▲1キャラあたりで見ると大幅に改善されているわけではないが、ライブシーンでは5人のキャラが表示されるので効果はてきめん。
 
『ミリシタ』では、キャラのモデルが頭部と身体に分かれている。今回は、その中でも身体を形作る、服・スパンコール・肌・キャラカラーについて説明された。
 

▲キャラカラーは、リストバンドやアクセサリーなど、そのキャラの特徴を表す小物などに使われている。
 

▲これらのパーツをひとつにまとめて表示したいが、一度サブメッシュとして独立したものをまとめるのは難しいという。
 
そもそも、モデルとメッシュ、サブメッシュはデータとしてどのように分かれているのか。加藤氏は現状の把握を行うために、頂点構造の違いやマテリアルの違いから下記のような分かれ目になっていると推測したと説明した。
 

 
さらに、一般的な描画論として描画を行うには、形状に関連する「頂点バッファー」と「インデックスバッファー」、色に関する「マテリアル」が必要となる。なお、マテリアルについては今回の講演と関連性がないため割愛されている。
 

 
その中で加藤氏は、頂点バッファーとインデックスバッファーがどのようなものかを考えたとき、サブメッシュ指定が必要なものはインデックスバッファーに関わるもの、必要ないものは頂点バッファーに対応するという考えに行き着いたという。
 

 
これを『ミリシタ』で考えたとき、後から輪郭線やマテリアルを組み合わせた大きなインデックスバッファーを追加すれば、部分描画と形状全体の描画を使い分けられるのではないかと思いチャレンジしてみたところ、これが成功。ただし、サブメッシュだけを追加しただけではダメで、マテリアルの配列を拡張し、りんかく線だけのマテリアルを追加することで成功を収められたとの話だった。
 

 
講演では、実際のソースコードも公開されたので下記に掲載していく。
 

 
次に現在、使用には至っていないものの「マテリアルLOD」を実装する過程でUnityのコマンドバッファーを研究し、結果的にキャラの描画をより細かく整理できるようになったという。その過程について発表を行った。
 

▲マテリアルLODとは、近距離では別々に表現していたサブメッシュを遠距離でひとまとめにするという手法だ。
 
加藤氏は、ここでも先ほど紹介したサブメッシュ統合が必要になること、Command Bufferならサブメッシュ単位での描画が可能なことなどを順序立てて説明し、最終的にスキニングを動かしたまま描画をオフにするためにはRenderer.materials[]を空にする必要があると説明した。
 

▲サブメッシュ統合を行うことでリフレクションなどの効果は失われるが、遠距離の際に表示するため問題にはならないと判断したという。



SkinnedMeshRendererの描画をoffにする方法についてもソースコードが公開された。





こうして改善を行った結果が下記の通りだ。




最後に加藤氏は、こうした成果を得られたのはネイティブ実装の知識があったからだと語る。『ミリシタ』担当前はPS4版の「アイドルマスター」シリーズを担当していたことから、家庭用ゲームの知識が身に付き、今回のケースに応用できたと説明した。

このことから、ゲームエンジンを使ってクオリティと開発効率を上げていくことは大事だが、自分で作ろうと思えば作れるものを検討することでUnityをより使い込むことができると結論付け、講演の締めとした。
 
(取材・文 編集部:山岡広樹)
 

Unite Tokyo 2018

 
■『アイドルマスター ミリオンライブ! シアターデイズ』
 

App Store

Google Play

公式サイト

公式Twitter



©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 
株式会社バンダイナムコエンターテインメント
https://www.bandainamcoent.co.jp/

会社情報

会社名
株式会社バンダイナムコエンターテインメント
設立
1955年6月
代表者
代表取締役社長 宇田川 南欧
決算期
3月
直近業績
売上高2896億5700万円、営業利益442億3600万円、経常利益489億5100万円、最終利益352億5600万円(2023年3月期)
企業データを見る
ユニティ・テクノロジース・ジャパン

会社情報

会社名
ユニティ・テクノロジース・ジャパン
企業データを見る