Estou pensando em uma cena do tipo minecraft, onde por voxel você quer dizer um mundo de blocos que são realmente renderizados usando polígonos:
Se você usar um sombreador de geometria, será difícil evitar ter exatamente três faces (ou o que for) por voxel.
Se você tiver muitos blocos adjacentes com a mesma textura, poderá usar o mosaico das texturas para ter muito menos triângulos na sua faixa (degenerada) em uma abordagem de VBO. Quero dizer, se houver uma área grande e plana 6x6 de voxels de grama, você pode desenhar o topo inteiro em apenas 2 triângulos em vez de 64.
Com a abordagem GS, você também não pode fazer o descarte trivial de faces ocluídas por voxels adjacentes, o que é muito direto com a abordagem VBO.
Eu não tentei a abordagem GS, mas posso dizer que a abordagem VBO com a combinação de repetição de blocos adjacentes funciona muito bem. Achei que mexer com os índices de elementos era muito mais lento do que apenas repetir os vértices. Se você dividir seu mundo em pequenos cubos, normalmente poderá usar apenas um byte por componente por vértice e até empacotar as informações de textura e os normais (uma face em um cubo alinhado ao eixo tem apenas três normais possíveis) etc. em um quarto byte para criar 4 bytes por vértice, o que é agradável e rápido.
Eu usei VBOs separados para cada uma das 6 faces - você só precisa desenhar no máximo 3 delas, obviamente. Isso se encaixa perfeitamente com as diferentes texturas normalmente usadas nas partes superiores dos voxels no estilo minecraft. Porque para cada conjunto o normal e tal são então uniformes.
Com o uso de pixmaps de mosaico vertical em um atlas GL_REPEAT
no eixo horizontal e com versões rotacionadas em 90 graus dos pixmaps no mesmo atlas, descobri que posso desenhar grandes quantidades de blocos aparentemente diferentes usando o mesmo VBO na mesma chamada. No exemplo da área de grama 6x6, eu o dividiria em 12 triângulos, pois só tenho repetição em uma dimensão no meu atlas.
Eu tenho conseguido que isso funcione na extremidade mais baixa de chips gráficos integrados e móveis, onde GS é apenas algo que eu posso sonhar um dia brincando.