Seleção de Frustum com VBOs

8

Eu tenho terreno sendo renderizado no meu projeto usando VBOs no OpenGL. Gostaria de aplicar algum Frustum Culling, mas não tenho idéia de como acessar cada polígono como está desenhado para verificar se ele está à vista. Eu acho que é aí que as octrees entram em cena, mas não tenho idéia de como isso é realmente feito. Alguém conhece um bom tutorial sobre como fazer essa coisa específica ou tem algum pseudocódigo para mim?

Agradeço antecipadamente!

Krankzinnig
fonte

Respostas:

3

Mais informações sobre como você está armazenando os dados do terreno seriam úteis aqui. Você está armazenando pedaços? Você está constantemente reconstruindo os VBOs? Todo o terreno está em um VBO e você está renderizando partes de cada vez?

Tentar selecionar por polígono provavelmente introduzirá mais sobrecarga do que economiza. Quanto maior a quantidade de terreno que você pode testar de uma só vez, mais rápido será o abate, com o óbvio trade-off de precisão. No final, você precisará fazer alguns perfis para descobrir qual é o ponto ideal dessa troca, portanto, será muito útil criar um sistema que permita alterar dinamicamente como o terreno é dividido.

Jason Morales
fonte
1

Uma GPU já pode selecionar os polígonos por polígono, mas isso acontece no tempo de rasterização / configuração, que ocorre após o sombreamento do vértice (usando os sombreadores Vertex / Geometry / Hull / Domain). Isso significa que a GPU ainda pode acabar sombreando vértices poligonais que acabarão sendo descartados. Se isso acontecer, a GPU terá feito muito trabalho por nada e, portanto, será um desperdício de ciclos da GPU.

Por esse motivo, tentamos não desperdiçar os ciclos da GPU selecionando a geometria invisível no lado da CPU (ou no lado da GPU usando recursos do DX10 +, como DrawIndirect e / ou renderização predicada) em lotes de polígonos, simplesmente não chamando draw para esses lotes.

Normalmente, esse lote de polígonos pode ser representado por uma esfera ou caixa que envolve todos esses polígonos. Essa esfera / caixa delimitadora é então testada contra o frustum e, se tocar no frustum, a chamada de empate é invocada para esses polígonos. Caso contrário, a chamada de desenho será ignorada. Uma octree é simplesmente outra maneira de determinar quais lotes de geometria são visíveis, exceto que organiza esses dados de maneira hierárquica. Octrees não são necessariamente adequados para toda a geometria.

Seguem algumas boas referências que explicam a técnica esfera / frustum:

jpaver
fonte