Version: Unity 6.0 (6000.0)
言語 : 日本語
URP での SRP バッチャーのトラブルシューティング
URP における CPU でのレンダリング処理の削減

URP でゲームオブジェクトと SRP バッチャーとの互換性を排除する

まれに、特定のゲームオブジェクトと SRP バッチャーとの互換性を意図的に排除したい場合があります。例えば、SRP バッチャーと互換性がない GPU インスタンスシング を使いたい場合です。全く同じマテリアルで多数の同じメッシュをレンダリングする場合、GPU インスタ ンシングの方が SRP バッチャーよりも効率的な場合があります。GPU インスタンシングを使用するには、以下のいずれかの対応が必要です。

  • Graphics.RenderMeshInstanced を使用する
  • SRP バッチャーの互換性を手動で排除し、マテリアルの GPU インスタンシングを有効にする

ゲームオブジェクトから SRP バッチャーとの互換性を除くには、2 つの方法があります。

  • シェーダーを非対応にする。
  • レンダラーを非対応にする。

ヒント: SRP バッチャーの代わりに GPU インスタンシングを使用する場合は、プロファイラー を使用することで、SRP バッチャーよりも GPU インスタンシングの方がアプリケーションに対する効率が確実に高くなります。

シェーダー互換性の排除

手書きシェーダーと Shader Graph シェーダーのどちらも、SRP バッチャーとの互換性をなくすことができます。ただし、Shader Graph を頻繁に変更して再コンパイルする Shader Graph シェーダーの場合は、レンダラーの互換性を排除する 方が簡単です。

Unity シェーダーを SRP バッチャーに非対応にするには、シェーダーソースファイルを変更する必要があります。

  1. 手書きシェーダーの場合は、シェーダーソースファイルを開きます。Shader Graph シェーダーの場合は、Shader Graph のコンパイル済みシェーダーソースコードを新しいシェーダーソースファイルにコピーします。Shader Graph の代わりに、新しいシェーダーソースファイルをアプリケーションで使用します。
  2. シェーダーの Properties ブロックに新しい マテリアルプロパティ の宣言を追加します。UnityPerMaterial 定数バッファで新しいマテリアルプロパティを宣言しないでください。

マテリアルプロパティには何もする必要がありません。UnityPerMaterial 定数バッファに存在しないマテリアルプロパティを用意するだけで、そのシェーダーと SRP バッチャーとの互換性はなくなります。

注意: Shader Graph を使用する場合、Shader Graph を編集して再コンパイルするたびに、このプロセスを繰り返さなければならないことに注意してください。

レンダラー互換性の排除

各レンダラーと SRP バッチャーとの互換性を排除できます。それには、レンダラーに MaterialPropertyBlock を加えます。

URP での SRP バッチャーのトラブルシューティング
URP における CPU でのレンダリング処理の削減