地形に使用するような大きなグリッドメッシュを想像してみましょう。n
1回の描画呼び出しで、たとえば1080p画面の半分をカバーするだけの三角形をレンダリングします。
すべての頂点を溶接し、スムージング/テクスチャリングの継ぎ目がない場合、各三角形には3つの頂点があり、各頂点は6つの三角形に共有されているため、n/2
頂点があります。
これをレンダリングするには、次のことが必要です。
少なくともn/2
何度も頂点シェーダーを実行する
(「少なくとも」頂点結果のキャッシュが非常に大きいためです。場合によっては、既に変換した頂点を追い出し、それを共有する後の三角形で再度必要になるため、頂点シェーダーを再実行します。 。したがって、紙のように見えるほどの節約はありません)
クリップとカリングのn
三角形。
少なくとも1920x1080 / 2または約100万ピクセルのフレームバッファーでラスタライズと補間を行います(テレインが画面の約半分をカバーすると言ったため)。
(「少なくとも」GPUがピクセルのクワッドで動作する方法のため、ポリゴンのエッジのすぐ外側の一部のフラグメントはまだラスタライズされますが、その後マスクされます。つまり、フラグメントを2回処理します。最初にポリゴンを深さバッファーに描画するのに十分な運がない場合、それ自体をオクルードします)
100万以上のフラグメントすべてに対してフラグメントシェーダーを実行します。
〜100万件の結果をフレームバッファーと深度バッファーにブレンドします。
さて、今度はすべての頂点のウェルドを解除3n
して、レンダリングする頂点を用意しました。これは以前の6倍です!私たちのステップは...
頂点シェーダーを実行する 3n
。
(すべての頂点が一度だけ使用されるため、キャッシュによるアスタリスクはありませんが、これはキャッシュが時間を節約できないことを意味します)
クリップとカリングのn
三角形。
少なくとも1920x1080 / 2または約100万ピクセルのフレームバッファーをラスタライズおよび補間します。
100万以上のフラグメントすべてに対してフラグメントシェーダーを実行します。
〜100万件の結果をフレームバッファーと深度バッファーにブレンドします。
...待って、最初のステップを除くすべてのステップは同じです!したがって、GPUが典型的な描画呼び出しで行う作業のほとんどは、使用される頂点の数に直接関係しません。スクリーンカバレッジの量、オーバードロー、および三角形の総数が、コストの大部分を占めています。
それは、頂点が完全に自由であることを意味しません。頂点を共有できる場合、特に頂点シェーダーが複雑であるか、ハードウェアの頂点パイプラインが弱い場合(古いコンソールの場合のように)、キャッシュによってある程度の節約が得られます。ただし、三角形の数に一定の係数をプラスまたはマイナスすると、頂点数が追跡されることを考えると、通常、全体的なメッシュコストの指標としてはそれほど興味深いものではありません。