TriangleStrip と TriangleList のどちらが高速ですか?
私が読んだばかりの興味深いものは次のとおりです。彼が正確に何を作っているかについての詳細はわかりませんが、これによると、彼は TriangleList を使用して約 10 倍のフレーム レートを取得しています。リストにはより多くの頂点データが含まれているため、これは直感に反すると思います。
TriangleList が Strip よりもはるかに高速である可能性がある技術的な理由を知っている人はいますか?
TriangleStrip と TriangleList のどちらが高速ですか?
私が読んだばかりの興味深いものは次のとおりです。彼が正確に何を作っているかについての詳細はわかりませんが、これによると、彼は TriangleList を使用して約 10 倍のフレーム レートを取得しています。リストにはより多くの頂点データが含まれているため、これは直感に反すると思います。
TriangleList が Strip よりもはるかに高速である可能性がある技術的な理由を知っている人はいますか?
トライアングル ストリップはメモリの最適化であり、速度の最適化ではありません。過去のある時点で、システム メモリとビデオ メモリの間のバス帯域幅がデータ集約型アプリケーションの主なボトルネックだったとき、確かに時間の節約にもなりましたが、今ではほとんどありません。また、変換キャッシュは古いハードウェアでは非常に小さかったため、通常のストリップは、不適切に最適化されたインデックス付きリストよりも適切にキャッシュされます。
トライアングル リストがトライアングル ストリップと同等またはそれ以上に効率的である理由は、インデックスです。インデックスを使用すると、ジオメトリと三角形の順序が正しく最適化されている場合、ハードウェアが非常に事前に確認できる方法で頂点を変換およびキャッシュできます。また、多くの縮退した三角形を必要とする非常に複雑なメッシュでは、ストリップはインデックス付きリストよりも遅くなり、より多くのメモリを消費します。
ただし、あなたの例が桁違いの違いを示していることに少し驚いていると言わざるを得ません。
トライアングル リストは、頂点データを簡単にバッチ処理することでドロー コールを節約できるため、ストリップよりもはるかに高速です。描画呼び出しはコストがかかるため、ストリップを使用して節約したメモリは、パフォーマンスの低下に見合わない場合があります。
一般に、インデックス付き三角形リストが優先されます。
ここに簡単なルールがあります。グラフィックス カードにアップロードする頂点の数を数えます。トライアングル リスト (正確にはインデックス付きトライアングル リスト) の頂点数が、トライアングル ストリップと同じデータよりも少ない場合は、実行速度が向上する可能性があります。
両方のケースで頂点の数が非常に近い場合、インデックス リストのオーバーヘッドがないため、ストリップの実行速度が速くなる可能性がありますが、これもドライバー固有であると予想されます。
非インデックス トライアングル リストは、縮退ストリッピングを使用してクワッドあたり 6 頂点のコストがかかるバラバラのクワッドを扱っている場合を除いて、ほぼ常に最悪のケース (三角形ごとに 3 頂点、共有なし) です。その場合、インデックス付きの三角形リストを使用して 4 つの頂点の各クワッドを取得するため、おそらく再び勝つ可能性がありますが、ターゲット ハードウェアでテストする必要があると思います。