このページでは、アプリケーションのレンダリングパフォーマンスを最適化するための簡単なガイドラインを紹介します。
変更を加える前に、問題の原因を特定するために、アプリケーションをプロファイルする必要があります。原因を理解する前にパフォーマンスの問題を解決しようとすると、時間を浪費したり、問題を悪化させたりする可能性があります。さらに、レンダリング関連のパフォーマンスの問題は、CPU または GPU で発生する可能性があります。これらの問題を解決するための方策は全く異なります。ですから、何かアクションを起こす前に、問題がどこにあるのかを理解することが重要です。
Unity Learn サイトの以下の記事は、グラフィックスのパフォーマンスに関する包括的な紹介であり、問題の特定と修正に関する情報が含まれています。Fixing performance problems。もしまだこの課題に詳しくない場合は、このページのアドバイスの前に、この記事を読むことをお勧めします。
通常、CPU のレンダリング時間に最も影響するのは、GPU にレンダリングコマンドを送信するためのコストです。レンダリングコマンドには、ドローコール (ジオメトリを描画するコマン ド) と、ジオメトリを描画する前に GPU の設定を変更するコマンドがあります。このような場合は、以下のオプションを検討してください。
これらのアプローチの多くは、GPU で必要な作業も削減します。例えば、Unity が 1 フレームでレンダリングするオブジェクトの総数を減らせば、CPU と GPU の両方の作業負荷が軽減されます。
GPU がフレームをレンダリングする時間内に作業を完了できない理由は主に 3 つあります。
アプリケーションがフィルレートによって制限されている場合、 GPU はフレームあたり処理可能なピクセル数よりも多く描画しようとしています。このような場合は、以下のオプションを検討してください。
アプリケーションがメモリ帯域幅によって制限されている場合、 GPU はフレーム内で処理できる以上のデータを専用メモリに 読み書きしようとしています。これは通常、テクスチャの数が多すぎるか、テクスチャが大きす ぎることを意味します。このような場合は、以下のオプションを検討してください。
もしアプリケーションが頂点処理によって制限される場合、それは GPU が 1 フレームで処理できるよりも多くの頂点を処理しようとしていることを意味します。このような場合、以下のオプションを検討してください。
レンダリングのフレームレートを削減するとアプリケーションにメリットがある場合があります。 これにより、1 つのフレームをレンダリングする CPU や GPU のコストは削減されませんが、他の操作 (スクリプトの実行など) の頻度に影響を与えることなく、レンダリングする頻度が削減されます。
レンダリングフレームレートは、アプリケーションの一部に対して、またはアプリケーション全体に対して下げることができます。レンダリングフレームレートを下げると、不必要な電力消費を防ぎ、バッテリーを長持ちさせ、CPU 周波数が制限されるまでデバイスの温度が上昇するのを防ぐことができます。これは特にハンドヘルドデバイスで有効です。
プロファイリングによって、レンダリングがアプリケーションのリソースのかなりの割合を消費していることが判明した場合は、アプリケーションのどの部分がレンダリングの恩恵を受けられるかを検討します。一般的な使用例としては、メニューやポーズ画面、入力待ちのターン制ゲーム、自動車 UI のようにコンテンツのほとんどが静的なアプリケーションなどがあります。
入力遅延を防ぐために、入力の間、一時的にレンダリングのフレームレートを上げると、若干、反応が良くなります。
レンダリングフレームレートを調整するには、OnDemandRendering API を使用します。この API は、特に Adaptive Performance パッケージ を使うとうまく機能します。
ノート: VR アプリケーションは OnDemandRendering をサポートしていません。すべてのフレームをレンダリングしないと、頭の動きに合わせて映像が同期しなくなり、動きによる酔いのリスクが高まる可能性があります。