0

静的メッシュとアニメーション化されたメッシュ (アニメーション化された骨格を含む) を使用して 3D グラフィックス アプリケーション (SharpDX を使用) を作成しています。フレームごとに 1 回だけレンダリングされるメッシュもあれば、何度もレンダリングされるメッシュもあります。レンダリングを高速化するために、ハードウェアのインスタンス化を利用する予定です。

インスタンス化されたレンダリング ルーチンとインスタンス化されていないレンダリング ルーチンを実装し、メッシュごとに適切なものを選択するよりも、すべてのメッシュに対して単純にインスタンス化されたレンダリングを使用する方が簡単であることに気付きました。

ターゲット ハードウェアがハードウェア インスタンス化をサポートしていると仮定すると、ハードウェア インスタンス化を使用してすべてのメッシュを描画することに欠点はありますか?それらがフレームごとに 1 回しか発生しない場合でも?

4

2 に答える 2

2

それを行っている間、入力アセンブラーにもう少し作業を与えますが、インスタンス化された/インスタンス化されていない高解像度の球体とタイムスタンプを使用して簡単なテストを行っただけで、ほとんど同じ結果が得られました。

インスタンス化されたバージョンで構造化バッファを使用していることに注意してください(少し検索して置き換えます)。

また、スキニングを使用すると述べているため、潜在的なコストは最小限に抑えられます (頂点シェーダーはかなりの作業を行う必要があるため)。

コメントに従ってシェーダー構造体に追加することを避けるために、StructuredBuffers を使用し、SV_InstanceID または SV_VertexID のいずれかを使用してルックアップを行うこともできます。これは、インスタンスの頂点バッファーごとよりもはるかに柔軟です (後でコンピュート シェーダーの一部の作業をオフセットすることもできます)。ステージははるかに簡単です)。

于 2013-07-09T12:15:55.440 に答える
1

インスタンスバッファーを設定するために追加のバッファーバインディングを導入しているため、少し遅くなる可能性があると考えています。したがって、各メッシュには、1 ~ 2 個 (vb および ib) ではなく、2 ~ 3 個のバッファー (頂点バッファー、インスタンス バッファー、場合によってはインデックス バッファー) をレンダリングする必要があります。

いつものように、エンジンの標準化に役立ち、目立った欠点が発生しない場合は、最適化する必要はありません。知る唯一の方法は、アプリのこれら 2 つのバリアントをプロファイリングすることです。

于 2013-07-09T09:41:05.767 に答える