Dos ideas que tengo en mente:
1) La escena se representa en un búfer invisible, utilizando modelos de baja resolución y bajo recuento de polígonos (o incluso utilizando solo volúmenes delimitadores como cubos o esferas). Luego se verifica el búfer para saber qué es visible o no. Antes de renderizar la escena de baja resolución, se podría aplicar un sacrificio de frustum para eliminar la mayor cantidad de objetos posible.
2) Se ejecuta una herramienta en el mapa estático y realizará un trazado de rayos complejo (y, por lo tanto, lento) para saber para algunas posiciones 3D en el mapa qué es visible y qué no. Toda esa información se almacena de manera eficiente que puede ser utilizada posteriormente por el usuario en tiempo de ejecución (p. Ej .: un octree). Esta solución solo funcionaría para mallas estáticas (p. Ej .: edificio) que no mueven objetos.
Respuestas:
La respuesta de Jovan es excelente, pero solo quería agregar que a veces hay soporte de hardware para hacer la pregunta "¿Realmente esta geometría renderizó píxeles?" (su idea # 1) Estas se llaman consultas de oclusión: este es un buen artículo de GPU Gems sobre ellas aquí
Esto es bastante similar a su idea # 1, excepto que no necesita un búfer invisible, y puede ser más eficiente o más simple que verificar el búfer. El artículo vinculado hace un gran trabajo profundizando en cómo funcionan las consultas de oclusión de hardware.
El Unreal Engine aprovecha las consultas de oclusión de hardware en las plataformas que lo admiten, además de otras técnicas como ver el sacrificio del frustum y calcular previamente qué geometría estática está ocluida.
fuente
Killzone utiliza esta técnica y se detalla en su presentación Practical Occlusion Culling en PS3 . También usan portales para áreas interiores.
Una cosa a tener en cuenta sobre los grandes mapas al aire libre es que la simplificación de la malla es tan importante como el sacrificio de oclusión, por lo que a menudo se utiliza alguna variación de los campos de altura con el mapeo de geometría. Aquí hay un buen artículo que cubre el sacrificio también. GPU Gems 2 tiene una implementación de la misma .
fuente
Al menos los dos primeros juegos de Quake usaron la estrategia 2; No sé si los motores idTech todavía lo usan. El mundo accesible se divide en espacios convexos organizados en una estructura de datos de árbol ("partición de espacio binario"), y para cada nodo en el árbol hay un vector de bits que representa qué otros nodos son visibles desde ese nodo ("conjunto potencialmente visible").
fuente