Unity での GPUInstance の詳細説明

GPUInstance を使用する理由
       GPUInstance テクノロジが存在しない以前は、草や木、草刈りなどのゲームでは、大量のデータが存在することがよくありますが、同時に、位置、回転、色などの小さな違いしかありません。通常のオブジェクトのようにレンダリングする場合、多くの描画命令を使用し、多くのリソースを消費する必要があります. 1 つは、CPU が GPU にデータを送信する回数です (データ バッファーの設定、ステータスのレンダリング、および描画の呼び出しを含む)。 2つ目はGPU上での描画(頂点処理やピクセル描画を含む)で、シーンオブジェクトの改善に伴い、CPUとGPUの両方への負担が大きくなります。合理的な戦略は、描画する必要があるオブジェクト オブジェクトと複数の異なるパラメーターを指定し、パラメーターに従って 1 回の描画呼び出しで描画することです。これは GPU インスタンス化と呼ばれます。

GPUInstance の原理
Gpu Instance は、この問題を解決するために使用されます. 同じグリッドと同じマテリアルを使用するオブジェクトの場合、少数のレンダリング呼び出し (DrawCall) を使用して、同じグリッドの複数のコピーをレンダリングします。 CPU は、さまざまな属性 (位置、サイズ、回転、色など) とその他のインスタンス化マテリアル情報をバッファー (実際には配列) にまとめて、GPU のバッファー領域に送信できます。GPU がこれらのオブジェクトをレンダリングすると、配列の添字であるグローバルな SV_InstanceID が作成されます.各オブジェクトがレンダリングされると、++SV_InstanceID が追加され、各オブジェクトが独自の位置、色、およびその他の情報を取得できるようになります。このIDに。このように、これらのオブジェクトをレンダリングするとき、配列を GPU バッファー領域に渡すために必要な DrawCall は 1 つだけで、多数のオブジェクトをレンダリングできます。

公式リンクはUnity を紹介しています - マニュアル: GPU インスタンス化https://docs.unity3d.com/Manual/GPUInstancing.html GPUInstance の使用方法

1.自動的に結束

        GpuInstance がオンになっている仕様を満たすシーン内のオブジェクトに対して、システムが自動的に Instance バッチ処理を実行します. GameObject に依存するため、当然、ユニティの消去、行列演算などに従うため、デバッグには便利ですが、パフォーマンスが低下します。後者ほど良くない。2019.4で測定したバッチの最大数、Editor PC、最大数は511です。512はバッチを増やします。

その他のテスト参考資料: Unity Instancing batch_Coke with ice without iceの最大数の計算とテスト ブログ - CSDN ブログ

2.手動呼び出し。Graphics.DrawMeshInstancedIndirect などの API を使用するには、自分で演算を計算して削除する必要があります。

  1. 一度にメッシュを呼び出す数は制限されており、最大 1023 モデルです。
  2. シェーダーに対して GpuInstance をオンにする必要があります。オンにしないと、例外が発生します
  3. 属性の割り当ては、MaterialBlockProperties の Array メソッド グループを使用します。
  • DrawInstanceMeshIndirect:

  1. 1回の通話でのコピー枚数に制限はありませんが、
  2. シェーダーはインスタンスを開く必要はありません
  3. より効率的に実行する
  • ドローメッシュ:

  1. この API を使用すると、シェーダーが同じシェーダーを使用し、そのシェーダーに対して GPUInstance が有効になっている限り、自動的にインスタンス化され、バッチ処理されます。

GPU インスタンスのバッチ処理テクノロジは、SkinnedMeshRender をサポートしていませんが、Mesh Render に変換してサポートすることができます. リンクは詳細に読むことができます

Unity の公式オープンソース Animation Instancing: Animation Instancing: SkinnedMeshRenderer | Unity ブログ

Blogger: GPU インスタンシングを使用して、Unity_unity で SkinnedMesh のレンダリングを最適化し、gpu を呼び出して mesh_xoyojank のブログを生成する - CSDN ブログ

静的バッチ処理、動的バッチ処理、SRPBatcher、Unity の GpuInstance - プログラマー募集

U3D 最適化バッチ処理 ~理解する GPU インスタンス化~

GitHub - vanCopper/Unity-GPU-Instancing: Unity GPU のインスタンス化

簡単に言えば GPU インスタンス化 - 基本 (3) bzdww

【GPU事例】エントリーからオーバーロードまで - 知識

Supongo que te gusta

Origin blog.csdn.net/Ling_SevoL_Y/article/details/129841972
Recomendado
Clasificación