Pergunta

Como eu entendo, o mapeamento de sombra é feito tornando a cena a partir da perspectiva da luz para criar um mapa de profundidade. Então você re-renderiza a cena do pov da câmera, e para cada ponto (fragmento em GLSL) na cena que você calcula a distância de lá para a fonte de luz; Se corresponder ao que você tem em seu mapa de sombra, então está na luz, caso contrário, está na sombra.

Eu estava apenas lendo através de este tutorial Para ter uma ideia de como como fazer mapeamento de sombra com uma luz ponto / omnidirecional.

Nos termos da seção 12.2.2 diz:

.

Nós usamos um único mapa de sombra para todas as fontes de luz

e depois abaixo de 12.3.6 diz:

.

1) Calcule a distância quadrada do pixel atual para a fonte de luz.
...
4) Compare o valor de distância calculado com o valor de mapa de sombra buscado para determinar se estamos ou não na sombra.

que é aproximadamente o que eu declarei acima.

O que eu não recebo é se tivermos assado todas as nossas luzes em um mapa de sombra, então qual luz precisamos comparar a distância para? A distância assada no mapa não deve corresponder a nada, porque é uma mistura de todas as luzes, não é?

Tenho certeza que estou perdendo alguma coisa, mas espero que alguém possa explicar isso para mim.


.

Além disso, se estivermos usando um único mapa de sombras, como podemos misturá-lo para todas as fontes de luz?

Para uma única fonte de luz O mapa de sombra apenas armazena a distância do objeto mais próximo até a luz (isto é, um mapa de profundidade), mas para várias fontes de luz, o que ela contiveria?

Foi útil?

Solução

Você cortou a sentença curto prematuramente:

.

Nós usamos um único mapa de sombra para todas as fontes de luz, criando uma imagem com renderização multipa e realizando um passe para cada luz fonte.

para que o mapa de sombra contenha os dados para uma única fonte de luz por vez, mas eles usam apenas um mapa porque eles rendem apenas uma luz por vez.

Eu acho que isso flui para sua segunda pergunta - a luz é aditiva para que você combine os resultados de várias luzes simplesmente adicionando-as juntas. No caso GPU Gems, eles adicionam diretamente no buffer de quadros, sem dúvida devido ao número relativamente limitado de amostradores de textura de armazenamento disponíveis em GPUs no momento. Hoje em dia você provavelmente quer fazer uma combinação de combinar no buffer do quadro e diretamente no fragmento shader.

Você também aplica geralmente o teste de "Pixel é aceso se for menor ou igual à distância no buffer de sombra, além de um pouco" em vez de igual, devido ao acúmulo de erro de arredondamento de ponto flutuante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top