私の現在のレンダリングの実装は次のとおりです。
- すべての頂点情報を三角形ではなく四角形として保存します
- 三角形の場合は、最後の頂点を繰り返すだけです (つまり
v0 v1 v2 v2
) lines_adjacency
ジオメトリ シェーダーに関する頂点情報を渡す- 四角形か三角形かを確認し、次のように出力します
triangle_strip
このルートを選択した理由は、ワイヤーフレーム シェーダーを実装していて、四角形を対角線なしで描画したかったからです。しかし、それ以来、私はその機能を破棄しました。
単純な描画に戻りGL_TRIANGLES
、ジオメトリ シェーダーを式から除外する必要があるかどうかを考えています。しかし、それで考えさせられました...パフォーマンスの観点から、実際により効率的なものは何ですか?
- 平均して、私のシーンは四角形と三角形が同じ量で構成されています。
- すべての三角形で描画すると、四角形ごとに 6 つの頂点、三角形ごとに 3 つになります。
- lines_adjacency で描画すると、クワッドごとに 4 つの頂点、三角形ごとに 4 つの頂点を意味します。
- (これはインデックス付きの描画であるため、頂点バッファーは両方で同じサイズです)
したがって、頂点の比率は 9:8 (三角形 : lines_adjacency) です。
インデックス付きの描画では、各頂点が (インデックスごとに 1 回ではなく) 頂点シェーダーによって 1 回だけ処理されると仮定するのは正しいでしょうか? その場合、三角形の描画はより効率的になります (追加のジオメトリ シェーダー ステップを実行する必要がないため)。唯一の欠点は、インデックスが余分なメモリをわずかに消費することです。
次に、頂点がインデックスごとに 1 回処理される場合、頂点シェーダーがより集中的なライティング計算を実行している可能性がある一方で、ジオメトリ変換が非常に単純であることを考慮すると、lines_adjacency メソッドを使用してエッジを確認できます。
以上が私の質問の要約です: 頂点はインデックス付きの描画でどのように扱われるのでしょうか? また、単純なジオメトリ シェーダーを含めると、どのようなパフォーマンスへの影響が予想されるでしょうか?