ロギングとプロファイリングのツールを使用して、Unity がコンパイルするシェーダーバリアントの数を確認できます。また、ビルド時間を短縮してメモリ使用量を削減するためにバリアントを削除 (ストリッピング) する方法を見つけることができます。以下の操作を行うことができます。
エディターがシーンビューとゲームビューで使用する、シェーダーバリアントのリストを生成することができます。手順は以下のとおりです。
プロジェクトをビルドした後で、Editor.log ログファイルを開き、Compiling shader を検索すると、Unity がどのバリアントをコンパイルおよび除去しているか確認できます。
例:
Compiling shader "Sprites/Default" pass "" (vp)
Full variant space: 8
After settings filtering: 8
After built-in stripping: 4
After scriptable stripping: 4
Processed in 0.00 seconds
starting compilation...
finished in 0.03 seconds. Local cache hits 0 (0.00s CPU time), remote cache hits 0 (0.00s CPU time), compiled 4 variants (0.09s CPU time), skipped 0 variants
Prepared data for serialisation in 0.00s
ユニバーサルレンダーパイプライン (URP) または HD レンダーパイプライン (HDRP) を使用する場合は、以下を参照してください。
Unity は、GPU 用にシェーダーをコンパイルすると、Console ウィンドウに Compiled shader というメッセージを表示します。
Memory Profiler モジュールまたは Memory Profiler パッケージを使用して、ランタイムに使用しているメモリシェーダーの量を確認します。シェーダーが大量のメモリを使用している場合は、そのバリアントの除去を試みることが可能です。
Unity 2022.2 以降では、欠落したシェーダーバリアントをマテリアルが使用しようとする場合に、Unity に強制的にランタイムでピンクのエラーシェーダーを表示させることができます。
これは、strictShaderVariantMatching を使用して C# スクリプトでも有効にできます。
これを行うと、Unity が、欠落したバリアントとそのキーワードを示す警告をコンソールに表示します。これをストリッピング中に使用することで、プロジェクトが必要とするシェーダーバリアントが除去されていないかどうかを確認できます。