インデックス付きプリミティブをレンダリングするときの頂点バッファーデータの順序は重要ですか?


14

3Dオブジェクトの三角形を作成しています。計算された順序でバッファに書き込むことができれば、CPUコードが簡素化されます。三角形の頂点は隣接していません。

順不同で書き込みを行うとパフォーマンスが低下しますか?

回答:


12

ここでは、(少なくとも)2つの要素が関係しています。GPUは、インデックス付きプリミティブがレンダリングされるときに、変換後の頂点キャッシュを利用できます。このキャッシュのサイズはさまざまであり、個々の描画呼び出し中に使用されます(私が知っている限り、複数の呼び出しにわたってではないため、そのコンテキストでバッファーデータを変更する頻度は関係ありません)。

このキャッシュを活用するためにデータを整理すると(アルゴリズムの例はこちら)、パフォーマンスが向上することがわかります。ただし、この構成は、各インデックストリプルが最近表示された頂点をできるだけ多く再利用するように、インデックスの順序付けに関係しています。インデックスバッファーを介した三角形もバッファー内にランダムに散らばっていない限り、おそらく特定のシナリオにはほとんど影響しません。この場合、おそらくキャッシュを頻繁に吹き飛ばしています。あなたの質問では、これが事実かどうか明確ではありませんでしたので、言及する価値があると思いました。

問題になる可能性が高いのは、描画中にGPUが頂点データへのメモリアクセスもキャッシュすることです。そのキャッシュのサイズもかなり信頼性の低いサイズであり、これらのインデックスを非常にローカライズされた頂点データに処理する個々のコアでそのキャッシュで高いミス頻度を得ることが考えられます。

それが十分なパフォーマンスの問題を引き起こす可能性があるかどうかについては、アプリケーションの赤旗であり、特にアルゴリズムの読みやすさを犠牲にしてデータをより良く整理するためにアルゴリズムを再設計することです...それは私が答えることができるものではありません。いくつかのシナリオをプロファイルして確認する必要があります。

私は個人的に、読み取り可能で保守可能なコードの側でエラーを出しますが、あなたが引き起こすキャッシュの欠落は、ユーザーが気付くほど重要ではないと思います

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.