デフォルトでは、Unity のランタイムシェーダーのロードの動作は以下の通りです。
この動作の利点は、シェーダーバリアントのための GPU メモリ使用量やロー ド時間が前もって発生しないことです。欠点は、グラフィックスドライバーがシェーダープログラムを GPU 上に作成し、追加の作業を行わなければならないため、バリアントが初めて使用されるときに、目に見えるストールが発生することです。
パフォーマンス集中時の目に見えるストールを避けるために、Unity はグラフィックスドライバーに対して、シェーダーバリアントが最初に必要とされる前に GPU 内に作成するよう指示します。これは 事前準備 と呼ばれます。
注意: 事前準備の実行方法を選択する前に、グラフィックス API のサポートに関する注意事項を確認してください。DX12、Vulkan、Metal などの最新のグラフィック API では、実験的なShaderWarmup API のみが完全にサポートされています。なぜなら、これにより、頂点形式を指定できるからです。他の方法を使うと、ストールを修正することなく、作業と GPU メモリを無駄にすることになります。
以下のような方法で事前準備を行うことができます。
注:
Unity がシェーダーバリアントデータを作成して GPU に送信するためのプロファイラーマーカーは Shader.Parse
です。シェーダープログラムを GPU にアップロードして、GPU が必要な作業を実行するのを待つためのプロファイラマーカーは、CreateGPUProgram
です。
Unity Profiler の使用方法については、アプリケーションのプロファイル を参照してください。