Nos jogos AAA modernos com ambiente aberto e muito conteúdo estático (por exemplo: crysis), como é realizado o abate de oclusão?

19

Duas idéias que tenho em mente:

1) A cena é renderizada em um buffer invisível, usando modelos de baixa resolução e baixa contagem de polígonos (ou mesmo usando apenas volumes limitados, como cubos ou esferas). O buffer é então verificado para saber o que é visível ou não. Antes de renderizar a cena de baixa resolução, poderia ser aplicada alguma seleção de frustum, para remover o máximo de objetos possível.

2) Uma ferramenta é executada no mapa estático e executará um traçado de raio complexo (e, portanto, lento) para saber, para algumas posições 3D no mapa, o que é visível e o que não é. Toda essa informação é então armazenada de maneira eficiente, que pode ser usada posteriormente pelo usuário em tempo de execução (por exemplo: uma octree). Esta solução funcionaria apenas para malhas estáticas (por exemplo: construção) que não movessem objetos.

tigrou
fonte
3
As perguntas "Como o jogo <X> fez isso" estão explicitamente fora de tópico, conforme as Perguntas frequentes . Talvez edite esta pergunta para perguntar como você pode fazer a seleção por oclusão, em vez de como outra pessoa faz isso? (Além disso, fornecer suas próprias respostas no corpo da questão faz sentir como você está pedindo uma discussão ou uma lista, em vez de uma resposta )
Trevor Powell

Respostas:

13

A resposta de Jovan é ótima, mas só quero acrescentar que às vezes há suporte de hardware para fazer a pergunta "Essa geometria realmente renderizou pixels?" (sua ideia nº 1) Essas são chamadas consultas de oclusão - este é um bom artigo sobre GPU Gems sobre elas aqui

Isso é bastante semelhante à sua ideia nº 1, exceto que você não precisa de um buffer invisível e pode ser mais eficiente ou mais simples do que verificar o buffer. O artigo vinculado faz um ótimo trabalho detalhando como as consultas de oclusão de hardware funcionam.

O Unreal Engine utiliza consultas de oclusão de hardware em plataformas que o suportam, além de outras técnicas, como a seleção de frustum e o pré-cálculo de qual geometria estática está ocluída.

Bryan Phelps
fonte
Atualmente, as consultas de oclusão de hardware são um pouco mais comuns do que "às vezes" - com a possível exceção de algumas GPUs móveis, elas podem ser consideradas onipresentes.
Maximus Minimus
eles não são muito lentos?
Quonux 29/04
12

1) A cena é renderizada em um buffer invisível, usando modelos de baixa resolução e baixa contagem de polígonos (ou mesmo usando apenas volumes limitados, como cubos ou esferas). O buffer é então verificado para saber o que é visível ou não. Antes de renderizar a cena de baixa resolução, poderia ser aplicada alguma seleção de frustum, para remover o máximo de objetos possível.

Esta técnica é utilizada pelo Killzone e está detalhada na sua apresentação Practical Oclusion Culling on PS3 . Eles também usam portais para áreas internas.

Um aspecto a ser lembrado sobre os grandes mapas externos é que a simplificação de malha é tão importante quanto o descarte de oclusão, portanto, algumas variações dos campos de altura com o mapeamento de geometria são frequentemente usadas. Aqui está um bom artigo que aborda o abate também. A GPU Gems 2 possui uma implementação .

Jovan
fonte
5

Pelo menos os dois primeiros jogos do Quake usaram a estratégia 2; Não sei se os motores da idTech ainda o usam. O mundo acessível é dividido em espaços convexos organizados em uma estrutura de dados em árvore ("partição de espaço binário"), e para cada nó na árvore há um vetor de bits que representa quais outros nós são visíveis nesse nó ("conjunto potencialmente visível").

Russell Borogove
fonte
1
Se você estiver indo para trazer Quake, você pode também trazer tecnologia de renderização do ladrão;) - nothings.org/gamedev/thief_rendering.html
Jovan