Unityエキスパートによるパフォーマンス改善

Unityでは、皆様の開発課題やUnityに関する質問をチケットベースで応答するサポートサービス(※)のほかに、皆様のUnityプロジェクトをお預かりし、ソースコードレベルでコンサルティングや共同開発を請け負うサポートサービスも提供しています。
※チケットベースで応答するサポートサービスは、Unity EnterpriseやUnity Industryにも含まれています。詳細はUnity EnterpriseおよびUnity Industryの製品ページをご覧ください。
これらのサポートサービスを提供する部門・Unity Studio Productionsは、ゲームプロジェクトのあらゆる段階において、開発の加速、リスクの低減、ランタイムパフォーマンスの最適化、そして難易度の高いプラットフォームへの移植など、様々な開発作業を支援しています。経験豊かな Unity の技術専門家と連携し、困難な開発課題を解決する中で、Unity のポテンシャルを最大限に引き出す事に注力しています。
たとえば、開発プロセスの早い段階で潜在的な問題を特定し、事前に対応することで、スムーズな開発進行を実現することができます。また、Unity エキスパートによる知識共有など、皆様のチーム全体の問題解決スキルを向上させる場も提供しています。Unity Studio Productionsは全世界で約170人以上のスタッフが在籍し、世界中のゲームプロジェクトをサポートしてまいりました。
このサポートサービスを通じて、Unity Japanでは数多くのゲーム開発プロジェクトのパフォーマンス改善を実現してまいりました。その一例をご紹介したいと思います。
事例:アニメ調のバトルシーンを含むスマホ向けタイトル
プロジェクトの課題
人気アニメ作品を題材にしたスマホ向けRPGである依頼対象プロジェクトでは、ほとんどのローエンドデバイスではターゲットフレームの30FPS前後で動作する一方、バトルシーンでは27FPS程度までに低下が発生し、またハイエンドデバイスではサーマル・スロットリングによりフレームレートが60FPS以上から40FPSに低下したり、戦闘効果のレンダリング時には15FPSまで低下するなど、パフォーマンスの低下が顕著に発生しました。このような背景を元に、全般的なランタイムパフォーマンス改善がUnityに依頼されました。
Unity Japanからの提案
依頼を受けたUnity Studio Productionsでは実際にゲームをプレイし、チームでパフォーマンスが気になるところを特定して改善できそうなポイントを洗い出しました。
- バトルシーン進行時の処理落ち:メニュー画面で安定したパフォーマンスでも、バトルシーンに入るとハイエンドとローエンドのデバイスを問わずFPSが落ちる現象が発生
- シーンのロード時間:ローディングの長さを短縮する必要があると判断
- UIと描画周りの最適化:大量のポストエフェクトが使用されていることからUIとレンダリング周りの調査の必要性を判断
上記3つの課題を特定し、最適化を行いました。
成果
CPU 負荷の軽減、メモリ使用量の削減、ロード時間の短縮を達成できました。具体例としては以下が挙げられます。
- ロード時間
- 文化に依存しない文字列比較を使うことでロード中に行われる文字列の処理を最適化。結果的にタイトル画面が表示されるまでの初期ロードに発生するスパイクから190msほど処理時間を削減できました。
- ロード中にチート防止ツールで使われるプレイヤーデータを暗号化するAPIへの呼び出しが多数行われていて、ゲーム起動中に生成される変数に対する暗号と複合の繰り返しが負荷を向上させる弊害がありました。ゲーム中に生成される変数は復号の後にキャッシュしてもセキュリティーの問題がないため、そのデータを辞書でキャッシュするとスパイクを削減できました。バトルのロード中に発生していた暗号処理は約680msから1msに削減できました。
- ポストエフェクト
- 表示されないにもかかわらず常に処理されるポストエフェクトを複数確認しました。それらを適切なタイミングで無効化するとバトル中の平均フレーム時間を数%減少することができました。
- また、複数のパスにフルスクリーンのレンダーターゲットを使用するエフェクトがあり、GPUのキャッシュ効率の悪さがパフォーマンスの問題になっていました。ターゲットのサイズを小さくすることで、平均0.31 FPSの改善が得られた一方、視覚的な劣化は見られませんでした。
- UI
- ゲームに表示されないにもかかわらずアクティブなゲームオブジェクトにキャンバスが存在し、その下に毎フレームに処理を行うコンポーネントがありました。パーティクルやアニメーション関連のコンポーネントが含まれると処理が走るため、それらを無効化すると平均のフレーム時間を4%減少することができました。
お客様の声
この取り組みのおかげで、慢性的に抱えていたFPS・発熱の問題にアプローチできました。改善案の提案だけでなく、実際に修正したソースコードをコミットいただけるところが非常にありがたい内容でした。提案のみだと、修正にかける工数の確保や、具体的な修正方法が解らず行き詰まるなどと作業ハードルが高くなるため、実際に手を動かしてくださる形式はプロジェクトにとって嬉しいものでした。また改善箇所を細かく説明してくださり、その際に質疑や意見交換ができたことでチューニングの知見が得られ、そういった面でも開発メンバーから好評の声を多くもらいました。
お客様独自のプロジェクトニーズに柔軟な対応
このように、ゲームスタジオそれぞれのニーズに柔軟に対応し、ゲームが抱えるパフォーマンス課題を改善に導きます。本サポートサービスにご興味がございましたら、以下よりお問い合わせください。