私はMinecraftタイプのシーンを考えています。ボクセルとは、実際にポリゴンを使用してレンダリングされるブロックの世界を意味します。
ジオメトリシェーダーを使用する場合、ボクセルごとに正確に3つの面(または何でも)を持つことを避けることは困難です。
同じテクスチャの隣接ブロックが多数ある場合、テクスチャのタイルを使用して、VBOアプローチで(縮退)ストリップの三角形をはるかに少なくすることができます。つまり、草のボクセルの6x6の大きな大きな平らな領域がある場合、64個ではなく2個の三角形で上部全体を描画できます。
GSアプローチを使用すると、VBOアプローチでも非常に簡単な、隣接するボクセルによってオクルードされる面の単純なカリングを実行できません。
GSアプローチは試していませんが、隣接するタイルの繰り返しを組み合わせたVBOアプローチは非常にうまく機能しています。要素のインデックスをいじるのは、頂点を繰り返すよりもずっと遅いことがわかりました。ワールドを素敵な小さな立方体に分割する場合、通常、頂点ごとのコンポーネントごとに1バイトだけを使用し、テクスチャ情報と法線(軸に合わせた立方体の面には3つの法線しかありません)などを4バイトにパックします頂点ごとに4バイトで、高速で高速です。
私は6つの顔のそれぞれに別々のVBOを使用しました。明らかに最大3つしか描画する必要はありません。これは、Minecraftスタイルのボクセルの上部で通常使用されるさまざまなテクスチャリングにうまく適合します。なぜなら、各セットでは法線などが均一だからです。
GL_REPEAT
水平軸上にあり、同じアトラス内で90度回転されたバージョンのピックスマップを持つアトラスで垂直に並べられたピックスマップを使用すると、同じ呼び出しで同じVBOを使用して明らかに異なるブロックを大量に描画できることがわかりました。6x6の草地の例では、アトラスの1つの次元でのみ繰り返すため、12個の三角形に分割します。
私はほとんどこれを統合されたグラフィックスチップとモバイルの非常にローエンドで動作するようにしました。