このページでは、アプリケーションのレンダリングパフォーマンスを最適化するための簡単なガイドラインを紹介します。
変更を加える前に、問題の原因を特定するために、アプリケーションをプロファイルする必要があります。原因を理解する前にパフォーマンスの問題を解決しようとすると、時間を浪費したり、問題を悪化させたりする可能性があります。さらに、レンダリング関連のパフォーマンスの問題は、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 をサポートしていません。すべてのフレームをレンダリングしないと、頭の動きに合わせて映像が同期しなくなり、動きによる酔いのリスクが高まる可能性があります。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.