Version: 2023.1
言語: 日本語
シェーダーバリアント
シェーダーキーワード

シェーダーバリアントの数の確認

ロギングとプロファイリングツールを使用して、Unity がコンパイルするシェーダーバリアントの数を確認できます。また、ビルド時間を短縮してメモリ使用量を削減するためにバリアントを削除 (ストリッピング) する方法を見つけることができます。以下を行うことが可能です。

エディターが使用するシェーダーバリアントのリストを取得する

エディターがシーンビューとゲームビューで使用する、シェーダーバリアントのリストを生成することができます。これは以下の手順で行えます。

  1. Edit > Project Settings > Graphics を開きます。
  2. Shader Loading の下の Currently tracked: の横で、シェーダーとシェーダーバリアントの数を確認できます。
  3. Save to asset… を選択して、シェーダーバリアントコレクションアセット を作成します。

ビルド時に Unity が作成するシェーダーバリアントのリストを取得する

プロジェクトをビルドした後で、Editor.log ログファイルを開き、Compiling shader を検索すると、Unity がどのバリアントをコンパイルおよび除去しているか確認できます。以下はその例です。

Compiling shader "Universal Render Pipeline/Lit" pass "ForwardLit" (fp)
320 / 786432 variants left after stripping, processed in 6.77 seconds
starting compilation...
finished in 29.72 seconds. Local cache hits 202 (0.24s CPU time), remote cache hits 0 (0.00s CPU time), compiled 118 variants (582.41s CPU time), skipped 0 variants

ユニバーサルレンダーパイプライン (URP) または HD レンダーパイプライン (HDRP) を使用している場合は、Unity がコンパイルおよび除去するバリアントの合計数をログに記録することも可能です。以下を開き、Shader Stripping > Shader Variant Log Level の下で、Disabled 以外のレベルを選択してください。

これにより、Editor.logTotal のログが追加されます。以下はその例です。

STRIPPING: Universal Render Pipeline/Lit (ForwardLit pass) (Fragment) - Remaining shader variants = 640/5760 = 11.11111% - Total = 2657/10169 = 26.12843%

Editor.log の場所については、ログファイル を参照してください。

ランタイムに Unity がコンパイルするシェーダーバリアントのリストを取得する

  1. Edit > Project Settings > Graphics を開きます。
  2. Shader Loading の下で Log Shader Compilation を有効にします。
  3. プロジェクトをビルドする際は、ビルド設定Development Build を有効にします。
  4. Console ウィンドウ で、Edotor を選択し、Full Log [Developer Mode Only] を有効にします。
  5. ビルドしたアプリケーションを起動します。

GPU 用にシェーダーをコンパイルすると、Console ウィンドウに Compiled shader というメッセージが表示されます。

ランタイムでシェーダーが使用するメモリの量を確認する

Memory プロファイラーモジュール または Memory Profiler パッケージ を使用して、シェーダーがランタイムで使用しているメモリの量を確認できます。シェーダーが大量のメモリを使用している場合は、そのバリアントを試しに除去してみることが可能です。

ランタイムでシェーダー欠落を強調表示する

Unity 2022.2 以降では、欠落したシェーダーバリアントをマテリアルが使用しようとする場合に、Unity に強制的にランタイムでピンクのエラーシェーダーを表示させることができます。

  1. Edit > Project Settings > Player を開きます。
  2. Other Settings の下の Script Compilation セクション内で、Strict shader variant matching を選択します。

C# スクリプトでこれを有効にするには strictShaderVariantMatching を使用します。

これを行うと、Unity が、欠落したバリアントとそのキーワードを示す警告をコンソールに表示します。これを ストリッピング 中に使用することで、プロジェクトの必要とするシェーダーバリアントが除去されていないかどうか確認できます。

シェーダーバリアント
シェーダーキーワード