最適化
グラフィックスメソッド

モバイル用の最適化に関する実用ガイド

このガイドは、新しいモバイルゲームの企画やプロトタイプの作成に困っていたり、または既存のプロジェクトをモバイルデバイス上に実装してスムーズに実行しようと苦労している、モバイルゲームの開発にまだ慣れていない開発者のためのものです。このガイドは、また、古い PC やネットブックをターゲットにした「モバイルゲーム」または「ブラウザーゲーム」を作るすべての人たちに参考となる資料です。

最適化は広範囲に渡るトピックで、最適化の方法はゲームによります。ですから、このガイドは、スムーズな開発の手順を説明するガイドとしてよりもむしろ、入門や参考として読んでいただくことを目的としています。

すべてのモバイルデバイスは等しく作られているわけではない

ここでの情報は、初代 iPad、iPhone 3GS と第 3 世代目の iPod Touch の上で使われている Apple A4 チップセットのレベルのハードウェアを前提としています。Android 側は、Nexus One、または Android 2.3 Gingerbread を実行する Android モバイルのほとんどを意味します。これらのデバイスは、平均すると 2010 年の初期にリリースされました。アプリケーションがよく出回っている市場では、これらのデバイスは旧式で動作が遅いのですが、市場の大部分を占めるためサポートすべきでしょう。

Apple モバイルデバイスの技術的仕様の概要は、 iOS ハードウェアガイド を参照してください。iPhone 3G のような非常に性能の低いモバイルデバイスや iPod Touch の第 1 世代、第 2 世代は性能が極端に限られており、最適化のためにさらに多くのことに注意する必要があります。ただし、これらのデバイスをアップグレードしない消費者がそのアプリを購入するかは疑問です。ですから、無料アプリを作っているのでない限り、古いハードウェアをサポートする価値はないかもしれません。

世の中には、はるかに遅いモバイルも、はるかに速いモバイルもあります。モバイルデバイスの計算能力は、驚くべき速さで増加しています。モバイル GPU の新世代が前世代より 5 倍速くなると聞くことはあります。その進化は PC 産業と比較して、信じられないほど 高速 です。

最終段階としてではなく、設計を考慮して最適化する

英国のコンピューター科学者、マイケル A. ジャクソンのプログラムの最適化ルールは多くの人に引用され紹介されています。

「プログラム最適化の最初のルールは、最適化するな。2 番目のルールは (上級者に限る) まだ最適化するな。」

彼の理論的根拠は、コンピューターがこれだけ高速になっていて、その性能が向上する早さを考えると、何かをプログラムしたら、そのプログラムはたいてい、十分速く動くであろう、というものでした。さらに、過度に最適化しようとすると、かえって複雑にしすぎたり制限が生じてしまったり、不具合を発生させてしまうかもしれません。

ただし、モバイルゲームの開発となると他に考慮しなければいけない部分が出てきます。現在、市場に出回っているハードウェアには、普段私達が慣れているコンピューター(PC)に比べて非常に多くの制限があります。そのため、デバイス上で実行できないようなものを作成するリスクは、最初から最適化して複雑すぎるものを作成するリスクと釣り合います。

このガイドを通じて、最適化が大いに役立つ状況、対して、最適化がただ根拠なく行われる状況を指摘します。

最適化はプログラマーのためだけにあるのではない

アーティストもまた、プラットフォームの限界とそれを回避するための方法を知っている必要があります。そうすれば、彼らは作業をやり直す必要もなく、報われる創造的な選択をすることができます。

  • ゲームデザイン上、雰囲気やライティングをベイクするのではなく、テクスチャに描画する必要がある場合に、アーティストにより多くの責任がかかります。
  • 何かをベイクするときはいつでも、アーティストはリアルタイムレンダリングの代わりに、ベイクできるコンテンツを作るようにします。このようにすることによって、アーティストは技術的な限界を気にせず、自由に作業することができます。

スムーズなランタイムのためにゲームをデザインする

以下の 2 つはゲームパフォーマンスの一般的な傾向を詳述し、ゲームを最適化するために最も適切な方法を説明します。また、すでにゲームを作成中である場合は、最も最適化を必要としているのは何かを直感的に把握する方法を説明します。

早期かつ頻繁に分析する

どのように最適化すればパフォーマンスの大きな向上につながるか、時間の無駄になるかを見極めるのに、プロファイリングは重要な役割を果たします。別のチップ (GPU) でのレンダリングの処理方法のために、フレームのレンダリングにかかる時間は、単純に CPU の消費時間と GPU の消費時間を足したものではありません。2 つを足したよりも長くなります。

もし CPU が処理を遅くしているならば、シェーダーを最適化してもフレームレートを上げることはまったくできません。また、GPU が処理を遅くしているならば、物理演算とスクリプトを最適化してもまったく助けになりません。

多くの場合、ゲームの異なる部分、異なる状況ではパフォーマンスも異なります。つまり、スクリプトのせいでゲームのある部分に全部で 100 ミリ秒のフレームが発生する場合もあるし、また、他の部分では、何かをレンダリングするために同じような減速が発生する場合があります。少なくとも、ゲームを最適化しようとする場合、すべてのボトルネックがどこにあるかを知っておく必要があります。

Unity プロファイラー

Unity の主なプロファイラーは、iOS、Android、Tizen をターゲットとするときに使用できます。それを使用方の基本については、プロファイラーを参照してください。

内部プロファイラー

Andriod と iOS には両方とも、ビルトインの内部プロファイラーがあり、30 フレームごとにテキストを吐き出します。それによって、どの側面 (物理演算、スクリプト、レンダリングなど) がゲームを遅くしているかが把握しやすくなります。ただし、あまり詳細な分析ではありません (例えば、どのスクリプトやレンダラーが原因になっているかを指摘しません)。

  • 処理時間のほとんどがレンダリングに費やされている、とプロファイラーが示す場合は、 レンダリングの最適化 を参照してください。
  • 処理時間のほとんどがレンダリング以外に費やされている、とプロファイラーが示す場合は、 スクリプトの最適化 を参照してください。

プロファイラーの仕組みや使用法に関する詳細は ビルトインプロファイラー を参照してください。

参考資料

最適化
グラフィックスメソッド