Como a oclusão ambiental do espaço da tela é implementada?

11

Eu não entendo a explicação da wikipedia.

Para cada pixel na tela, o sombreador de pixel mostra os valores de profundidade em torno do pixel atual e tenta calcular a quantidade de oclusão de cada um dos pontos amostrados.

Como os valores de profundidade dos pixels adjacentes podem lhe dizer algo sobre a oclusão? A oclusão , como eu entendo, acontece quando um objeto A fica na frente de outro objeto B, então você não pode ver o objeto B. Mas por que você agora olha para os pixels de profundidade dos pixels adjacentes ? Quero dizer, você pode ver esses pixels, então não há oclusão. Talvez eu tenha entendido errado a oclusão.

E o que eu também não entendi é o termo kernel em alguns outros tutoriais. O que é um kernel e por que você o usaria para o ssao?

Alguém poderia fazer uma explicação detalhada do algoritmo em relação às minhas perguntas?

Joey
fonte
pense desta maneira: um vinco profundo terá sombras nele.
Alan Wolfe
1
A principal coisa a entender aqui é que estamos tentando calcular a oclusão da luz ambiente, não a oclusão da vista.
Trichoplax

Respostas:

5

A motivação por trás da oclusão ambiental (AO) em geral é aproximar a maneira como as fendas e os cantos são frequentemente sombreados, porque menos luz indireta entra neles. Um exemplo de uma foto do meu escritório - observe o escurecimento ao longo das bordas onde as paredes e o teto se encontram. A sala é iluminada apenas pela luz que entra pela janela e pulando ao redor.

foto demonstrando efeito semelhante ao AO no canto de uma sala

Para simular com precisão esse fenômeno, os renderizadores offline usam técnicas como rastreamento de caminho e mapeamento de fótons. Para fins em tempo real, o pré-calculamos off-line ou o aproximamos de alguma forma.

A oclusão ambiental no espaço da tela (SSAO) baseia-se na observação de que é possível detectar cantos e fendas observando o buffer de profundidade (e possivelmente também os vetores normais) de uma imagem renderizada e, assim, é possível calcular a AO aproximada como um pós- passar. O buffer de profundidade é uma representação grossa da geometria na cena; portanto, ao amostrar valores do buffer de profundidade na vizinhança de um pixel de destino, você pode ter uma idéia da forma da geometria circundante e adivinhar o quanto a AO é escurecida. deveria estar.

diagrama de como o buffer de profundidade representa a geometria, de Bavoil e Sainz (2008)

Este diagrama, de Bavoil e Sainz (2008) , mostra como os valores do buffer de profundidade, interpretados como um tipo de campo de altura, representam uma versão discretizada de alguma geometria. Ao calcular o SSAO para o pixel central, você observaria os valores de profundidade dos pixels adjacentes e os conectaria a alguma fórmula, projetada para produzir um valor mais escuro quando a geometria for mais côncava (como a do diagrama) e mais clara valor quando a geometria é plana ou convexa.

A fórmula usada pelos valores de profundidade é chamada de "kernel" por analogia com os kernels de filtro usados ​​para borrões, detecção de arestas e afins. No entanto, o SSAO é mais complicado do que apenas uma convolução linear dos valores de profundidade. O diabo está nos detalhes. A distribuição das amostras e a fórmula que as processa para gerar o valor da oclusão tem sido objeto de muitas pesquisas na última década, tentando melhorar o realismo e reduzir os artefatos, mantendo um bom desempenho.

Nathan Reed
fonte
5

Como Alan e Trichoplax mencionam nos comentários, o efeito que simula a oclusão ambiental não é a oclusão de uma superfície da câmera, mas a oclusão da superfície do ambiente.

Pense da seguinte maneira: digamos que você tenha uma iluminação uniforme de todas as direções, de modo que a luz total recebida em qualquer ponto chegue ao valor de 1. Se você colocar um plano plano nesse ambiente e olhar para um lado, esse lado receberá 50% dessa iluminação, ou 0,5, porque a outra metade está bloqueada pelo próprio avião. Em outras palavras, qualquer ponto na superfície do avião pode apenas "ver" a luz que vem da metade do ambiente, portanto é metade da luz brilhante. Se você dobrar esse plano em direção ao seu ponto de vista (uma dobra "vale"), diminuirá ainda mais a iluminação de entrada para esse lado do avião, para um valor abaixo de 0,5, porque, novamente, cada ponto do avião "vê" um pouco menos luz vinda do ambiente.

A oclusão do ambiente no espaço da tela funciona mais ou menos procurando essas “dobras” - áreas em que a profundidade muda acentuadamente, conforme definido pela comparação das profundidades dos pixels vizinhos - e escurecendo-as para simular a diminuição da iluminação do ambiente dos pontos.

Noah Witherspoon
fonte