Version: Unity 6.0 (6000.0)
言語 : 日本語
Assign a channel-packed texture to a URP material
URP のシェーダーマテリアル Inspector ウィンドウのリファレンス

URP のシェーダーバリアントの削減

ユニバーサルレンダーパイプライン (URP) のシェーダーは、多くの異なる機能をサポートするために シェーダーキーワード を使用します。その結果、Unity は多くの シェーダーバリアント をコンパイルすることになります。

URP アセット の機能を無効にすると、関連するシェーダーバリアントが自動的に除外 (‘ストリップ’) されます。これにより、ビルドが高速化され、メモリ使用量とファイルサイズが削減されます。

例えば、プロジェクトでディレクショナルライトの影を使用しない場合でも、 Unity はデフォルトでディレクショナルライトの影をサポートするバリアントを加えます。URP アセットで Cast Shadows を無効にすると、これらのバリアントは削除されます。

URP でシェーダーを削除するコードを調べる場合は、Editor/ShaderPreprocessor.cs ファイルを確認します。このファイルは IPreprocessShaders API を使用します。

シェーダーバリアントのストリッピングの詳細は、以下のページを参照してください。

ビルドに含まれるシェーダーバリアントの数の確認

Unity がコンパイルおよびストリップするバリアントの総数をログに記録するには、以下の手順を実行します。

  1. Graphics 設定ウィンドウ を開きます。
  2. Shader Stripping セクションで、Disabled 以外のログレベルを選択します。
  3. プロジェクトをビルドします。
  4. ログ情報を表示するには、Editor.log ログファイルを開いて ShaderStrippingReport を検索します。Editor.log の場所については、ログファイル を参照してください。

シェーダーバリアントの詳細情報をログに記録するには、以下の手順を実行します。

  1. Graphics 設定ウィンドウ を開きます。
  2. Additional Shader Stripping Settings セクションで、Export Shader Variants を選択します。
  3. プロジェクトをビルドします。
  4. プロジェクトファイルがあるフォルダーで、Temp/graphics-settings-stripping.jsonTemp/shader-stripping.json を開きます。

詳細については、Unity ユーザーマニュアルの以下のドキュメントを参照してください。

機能関連のシェーダーバリアントの削除

デフォルトでは、URP は機能が有効なバリアントと機能が無効なバリアントの両方をコンパイルします。

バリアントの数を減らすには、URP の Graphics 設定Strip Unused Variants を有効にし、以下を実行します。

  • ビルド内のすべての URP アセットで機能を無効にし、機能が無効なバリアントのみを保持するようにします。
  • ビルド内のすべての URP アセットで機能を有効にし、機能が有効なバリアントのみを保持するようにします。

Strip Unused Variants を無効にすると、機能が無効なバリアントを削除できません。これにより、バリアントの数が増える可能性があります。

機能の無効化

機能に関連するバリアントを削除するには、ビルド内のすべての URP アセットでそのバリアントを無効にしてください。

ビルドには以下の URP アセットが加えられます。

  • Graphics 設定 でデフォルトのレンダーパイプラインアセットとして設定した 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_HQBLOOM_HQ_DIRT_BLOOM_LQBLOOM_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 を使用しない場合は、XR モジュールと VR モジュール を無効にできます。これにより、URP は標準のシェーダーから XR および VR 関連のシェーダーバリアントを削除できます。

カスタムのレンダラー機能を使用する場合にバリアントを削除する

カスタムのレンダラー機能 を作成する場合は、FilterAttribute API を使用することで、URP アセット で設定を有効または無効にしたときにシェーダーバリアントを削除できます。

例えば、以下の方法で行うことができます。

  1. [[SerializeField]](https://docs.unity3d.com/ScriptReference/SerializeField.html) を使用して、カスタムのレンダラー機能にブーリアン変数を追加し、URP アセットの Inspector でチェックボックスとして追加します。
  2. ShaderKeywordFilter.RemoveIf を使用して、チェックボックスを有効にしたときにシェーダーバリアントを削除します。

追加リソース

Assign a channel-packed texture to a URP material
URP のシェーダーマテリアル Inspector ウィンドウのリファレンス