Mapa de sombra da variação de luz do ponto de desfoque

7

Eu tenho trabalhado na implementação de mapeamento de sombra de variação para o meu jogo. Consegui obter uma luz de ponto trabalhando com o mapeamento de sombra de variação com um desfoque gaussiano aplicado ao mapa de sombra para reduzir o alias. Agora, estou tentando implementar luzes pontuais, mas não sei como adaptar o desfoque gaussiano para trabalhar com o mapa de sombras quando armazenado em um mapa de cubo. Eu procurei por um tempo, mas não consigo encontrar exemplos que usem luzes de ponto. Alguém pode me ajudar aqui?

Telanor
fonte
Eu adoraria ver uma amostra do seu trabalho - talvez até o código-fonte.
ashes999

Respostas:

2

Há um exemplo de como fazer o mapeamento de sombra de variação com luzes pontuais, mas ele usa o mapeamento parabolóide duplo em vez do mapeamento de cubo. O tutorial com o exemplo é mostrado aqui .

Se você deseja lidar com um pouco menos de detalhes que os mapas de cubo, o mapeamento de sombra de variação de DP é mais fácil de codificar e requer duas texturas em vez de seis, economizando um pouco de memória. Você também tem apenas uma costura para esconder.

As luzes pontuais são geralmente o tipo mais difícil de aplicar o mapeamento de sombra (e consomem mais memória), e é por isso que muitos jogos não as usam com tanta frequência.

ChrisC
fonte
Eu já vi esse tutorial, mas estava tentando evitar esse método, pois estava buscando mais métodos que parecessem bons, em vez de serem rápidos o suficiente para um jogo comercial. Parece que eu vou ter que ir por esse caminho de qualquer maneira uma vez que não parece ser qualquer documentação sobre o método Cubemap
Telanor
@ Telanor Se a sua prioridade for "agradável", você sempre poderá aumentar a largura e a altura dos dois destinos de renderização usados ​​para criar o mapa DP. Então você terá uma textura de alta resolução para as sombras.
ChrisC
1

Quando eu implementei isso antes, apenas desfoquei cada face de cubo individualmente, usando um desfoque Gaussiano 2D padrão. Você pode introduzir costuras nas bordas do cubo, porque o borrão não as atravessa, mas, na minha experiência, isso quase nunca é perceptível. YMMV, é claro.

Você provavelmente poderia até fazer um borrão nas bordas do cubo escrevendo um sombreador de borrão que receberia sua entrada na forma de um mapa de cubos e distribuir amostras em torno de um vetor 3D, amostrando um cone de direções. Isso parece complicado e lento, então eu tentaria desfocar cada rosto individualmente primeiro.

Nathan Reed
fonte
Eu não tentei isso especificamente porque parecia que as costuras seriam muito óbvias, mas vou experimentar e ver como fica. Sua segunda sugestão é provavelmente a resposta, mas eu não tenho certeza de como alterar as amostras a fazê-lo, eu realmente não compreender borrões muito bem
Telanor
Depois de trabalhar nos últimos 2 dias, não consegui converter as coordenadas de amostragem 2D em 3D para desfocar o mapa do cubo corretamente, então parece que estou usando o método parabolóide duplo
Telanor
@ Telanor, aqui está um artigo sobre como desfocar o cubo de face cruzada; talvez isso ajude. developer.amd.com/media/gpu_assets/...
Nathan Reed
Eu já vi esse artigo, mas não é suficientemente detalhado para mim. Talvez alguém com muito mais experiência do que eu pudesse implementá-lo apenas lendo uma descrição como essa, mas sou apenas iniciante em programação 3D; Preciso de mais um tutorial para ter alguma esperança de implementá-lo.
Telanor 26/09/11