ユニバーサルレンダーパイプライン (URP) のシェーダーは、多くの異なる機能をサポートするために シェーダーキーワード を使用します。その結果、Unity は多くの シェーダーバリアント をコンパイルすることになります。
URP アセット の機能を無効にすると、関連するシェーダーバリアントが自動的に除外 (‘ストリップ’) されます。これにより、ビルドが高速化され、メモリ使用量とファイルサイズが削減されます。
例えば、プロジェクトでディレクショナルライトの影を使用しない場合でも、 Unity はデフォルトでディレクショナルライトの影をサポートするバリアントを加えます。URP アセットで Cast Shadows を無効にすると、これらのバリアントは削除されます。
URP でシェーダーを削除するコードを調べる場合は、Editor/ShaderPreprocessor.cs ファイルを確認します。このファイルは IPreprocessShaders API を使用します。
シェーダーバリアントのストリッピングの詳細は、以下のページを参照してください。
Unity がコンパイルおよびストリップするバリアントの総数をログに記録するには、以下の手順を実行します。
Editor.log ログファイルを開いて ShaderStrippingReport を検索します。Editor.log の場所については、ログファイル を参照してください。シェーダーバリアントの詳細情報をログに記録するには、以下の手順を実行します。
Temp/graphics-settings-stripping.json と Temp/shader-stripping.json を開きます。詳細については、Unity ユーザーマニュアルの以下のドキュメントを参照してください。
デフォルトでは、URP は機能が有効なバリアントと機能が無効なバリアントの両方をコンパイルします。
バリアントの数を減らすには、URP の Graphics 設定 で Strip Unused Variants を有効にし、以下を実行します。
Strip Unused Variants を無効にすると、機能が無効なバリアントを削除できません。これにより、バリアントの数が増える可能性があります。
機能に関連するバリアントを削除するには、ビルド内のすべての URP アセットでそのバリアントを無効にしてください。
ビルドには以下の URP アセットが加えられます。
キーワードごとに 2 組のバリアントが作成されてしまうため、異なる レンダリングパス を使用する URP アセットをビルドに加えないでください。
| 機能 | 機能を無効にする方法 | オフになるシェーダーキーワード | レンダリングパス | |
|---|---|---|---|---|
| Accurate G-buffer normals | URP アセットで Accurate G-buffer normals を無効にします。これは、Vulkan グラフィックス API を使用するプラットフォームには影響しません。 | _GBUFFER_NORMALS_OCT |
ディファード | |
| 追加ライト | URP アセット の Lighting セクション で、Additional Lights を無効にします。 |
_ADDITIONAL_LIGHTS、_ADDITIONAL_LIGHTS_VERTEX
|
フォワード | |
| アンビエントオクルージョン | URP アセットが使用するすべてのレンダラーの Ambient Occlusion Renderer Feature を削除します。 | _SCREEN_SPACE_OCCLUSION |
フォワード、ディファード | |
| デカール | URP アセットが使用するすべてのレンダラーの Decal Renderer Feature を削除します。 | |||
_DBUFFER_MRT1、_DBUFFER_MRT2、_DBUFFER_MRT3、_DECAL_NORMAL_BLEND_LOW、_DECAL_NORMAL_BLEND_MEDIUM、_DECAL_NORMAL_BLEND_HIGH、_DECAL_LAYERS
|
フォワード、ディファード | |||
| sRGB からリニアへの高速変換 | URP アセット の Post-processing セクションで、Fast sRGB/Linear conversion を無効にします。 | _USE_FAST_SRGB_LINEAR_CONVERSION |
フォワード、ディファード | |
| Terrain (地形) の穴 | URP アセット の Rendering セクションで、Terrain Holes を無効にします。 | _ALPHATEST_ON |
フォワード | |
| ライトクッキー | プロジェクト内のすべてのライトから クッキーテクスチャ を削除します。 | _LIGHT_COOKIES |
フォワード、ディファード | |
| ライトのレンダリングレイヤー | ライトのレンダリングレイヤー を無効にします。 | _LIGHT_LAYERS |
フォワード、ディファード | |
| リフレクションプローブのブレンド | Probe Blending を無効にします。 | _REFLECTION_PROBE_BLENDING |
フォワード、ディファード | |
| リフレクションプローブのボックス投影 | Box Projection を無効にします。 | _REFLECTION_PROBE_BOX_PROJECTION |
フォワード、ディファード | |
| レンダーパス | URP アセットが使用するすべてのレンダラーで Native Render を無効にします。 | _RENDER_PASS_ENABLED |
フォワード、ディファード | |
| 追加ライトの影 | URP アセットの Additional Lights セクションで Cast Shadows を無効にします。 | _ADDITIONAL_LIGHT_SHADOWS |
フォワード、ディファード | |
| メインライトの影 | URP アセットの Main Light セクションで Cast Shadows を無効にします。削除されるキーワードは、設定によって異なる場合があります。 |
_MAIN_LIGHT_SHADOWS、_MAIN_LIGHT_SHADOWS_CASCADE、_MAIN_LIGHT_SHADOWS_SCREEN
|
フォワード、ディファード | |
| ソフトシャドウ | URP アセットの Shadows セクションで、Soft Shadows を無効にします。 | _SHADOWS_SOFT |
フォワード、ディファード |
URP Graphics 設定 で Strip Unused Post Processing Variantsを有効にすると、使用しない ボリュームオーバーライド 関連のシェーダーバリアントが削除されます。
例えば、プロジェクトでブルーム効果のみを使用する場合、ブルームバリアントを維持し、他のすべてのポストプロセス関連のバリアントを削除します。
Unity はすべてのシーンでボリュームオーバーライドをチェックするため、ビルドからシーンを削除してもプロジェクト内に保持している限り、バリアントを削除することはできません。
| 削除するボリュームオーバーライド | オフになるシェーダーキーワード | |
|---|---|---|
| ブルーム |
_BLOOM_HQ、BLOOM_HQ_DIRT、_BLOOM_LQ、BLOOM_LQ_DIRT
|
|
| 色収差 | _CHROMATIC_ABERRATION |
|
| フィルムグレイン | _FILM_GRAIN |
|
| HDR グレーディング | _HDR_GRADING |
|
| レンズディストーション | _DISTORTION |
|
| トーンマッピング |
_TONEMAP_ACES、_TONEMAP_NEUTRAL、_TONEMAP_GRADING
|
同時に URP の Graphics 設定で Strip Screen Coord Override Variants を有効にしてください。ただし、多数のディスプレイ (‘クラスター’ ディスプレイ) 上でのポストプロセスをサポートするためにスクリーン座標をオーバーライドする場合は除きます。
XR または VR を使用しない場合は、XR モジュールと VR モジュール を無効にできます。これにより、URP は標準のシェーダーから XR および VR 関連のシェーダーバリアントを削除できます。
カスタムのレンダラー機能 を作成する場合は、FilterAttribute API を使用することで、URP アセット で設定を有効または無効にしたときにシェーダーバリアントを削除できます。
例えば、以下の方法で行うことができます。