Frustum sacrificando con VBO

8

Tengo terreno renderizado en mi proyecto usando VBO en OpenGL. Me gustaría aplicar un poco de Frustum Culling, pero no tengo idea de cómo acceder a cada polígono como está dibujado para verificar si está a la vista. Creo que aquí es donde entran en juego los octrees, pero no tengo idea de cómo se hace esto realmente. ¿Alguien sabe un buen tutorial sobre cómo hacer esta cosa específica o tiene algún pseudocódigo para mí?

¡Gracias de antemano!

Krankzinnig
fuente

Respuestas:

3

Aquí sería útil más información sobre cómo está almacenando los datos del terreno. ¿Lo estás almacenando en trozos? ¿Estás constantemente reconstruyendo los VBO? ¿Está todo el terreno en un VBO y estás renderizando piezas a la vez?

Intentar eliminar por polígono probablemente introducirá más sobrecarga de la que ahorra. Cuanto más grande sea un trozo de terreno que pueda probar a la vez, más rápido será el sacrificio, con la obvia compensación de precisión. Al final, necesitará hacer algunos perfiles para descubrir cuál es el punto óptimo de esa compensación, por lo que crear un sistema que le permita cambiar dinámicamente cómo se divide su terreno será muy útil.

Jason Morales
fuente
1

Una GPU ya puede eliminar los polígonos por polígono, pero esto sucede en el tiempo de rasterización / configuración que ocurre después del sombreado de vértices (usando sombreadores Vertex / Geometry / Hull / Domain). Esto significa que la GPU todavía puede terminar sombreando vértices de polígonos que terminarán siendo eliminados. Si esto sucede, la GPU habrá hecho mucho trabajo por nada y, por lo tanto, es una pérdida de ciclos de GPU.

Por esta razón, tratamos de no desperdiciar los ciclos de GPU al eliminar la geometría invisible en el lado de la CPU (o en el lado de la GPU usando características DX10 + como DrawIndirect y / o renderizado predicado) en lotes de polígonos simplemente no llamando a dibujar para esos lotes.

Normalmente, ese lote de polígonos se puede representar mediante una esfera o cuadro que rodea a todos esos polígonos. Esta esfera / cuadro delimitador se prueba luego contra el tronco y si toca el tronco, se invoca la llamada de sorteo para esos polígonos. Si no, se salta la llamada de sorteo. Un octree es simplemente otra forma de determinar qué lotes de geometría son visibles, excepto que organiza esos datos de forma jerárquica. Los octrees no son necesariamente adecuados para toda la geometría.

Siguen algunas referencias bastante buenas que explican la técnica de esfera / tronco:

jpaver
fuente