En los juegos AAA modernos con entorno abierto y gran cantidad de contenido estático (p. Ej .: crysis), ¿cómo se realiza la eliminación de oclusiones?

19

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.

tigrou
fuente
3
Las preguntas "¿Cómo hizo esto el juego <X>?" Están explícitamente fuera de tema según las preguntas frecuentes . Tal editar esta pregunta para preguntar cómo se puede hacer selectiva de oclusión, en lugar de cómo alguien más lo hace? (Además, proporcionar sus propias respuestas en el cuerpo de la pregunta hace que parezca que está pidiendo una discusión o una lista, en lugar de una respuesta )
Trevor Powell

Respuestas:

13

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.

Bryan Phelps
fuente
Las consultas de oclusión de hardware son en realidad un poco más comunes que "a veces" en estos días; con la posible excepción de algunas GPU móviles, pueden considerarse ubicuas.
Maximus Minimus
¿No son muy lentos?
Quonux
12

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.

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 .

Jovan
fuente
5

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").

Russell Borogove
fuente
1
Si va a traer Quake, también podría traer la tecnología de renderizado de Thief;) - nothings.org/gamedev/thief_rendering.html
Jovan