Eu pensei que poderíamos reutilizar o mesmo mapa de sombras para todas as luzes. Mas vi um artigo do setor sugerindo que você não pode reutilizar mapas de sombras entre as luzes e precisa usar superfícies separadas.
Precisamos de um mapa de sombras por luz? Ou um para todo o processo?
3d
lighting
shadow-mapping
DeadMG
fonte
fonte
Respostas:
Por "reutilizar o mesmo mapa de sombras", presumo que você queira dizer reutilizar a memória (o destino da renderização). Obviamente, você não pode reutilizar os dados, pois cada luz tem uma visão diferente do mundo. :)
De qualquer forma, sim, você pode reutilizar o destino de renderização, se desejar. Existem algumas ressalvas. Primeiro, obviamente, você deve projetar seu renderizador para que ele precise apenas de um mapa de sombra por vez, o que pode ser inconveniente ou exigir algumas alterações em seu pipeline. Por exemplo, se você deseja usar o mapeamento de sombra em cascata para sua luz solar, pode ser necessário um buffer de espaço na tela para armazenar os resultados das sombras, para que você possa acumular várias fatias sem precisar redesenhar sua cena para cada fatia.
A outra ressalva é que você pode ter desempenho reduzido, porque muitas GPUs mais recentes podem trabalhar em várias chamadas de empate em paralelo (mesmo para diferentes destinos de renderização), mas isso é interrompido se uma chamada de empate precisar do resultado de uma anterior. Portanto, se você tiver vários destinos de renderização de mapa de sombras, a GPU poderá paralelizar (até certo ponto) as chamadas de desenho para desenhar todos os mapas de sombra, paralelizar separadamente as chamadas de desenho que lêem os mapas de sombra e desenham as luzes. Mas se você tiver apenas um destino de renderização, deverá desenhar em série o mapa de sombras A, desenhar a luz A, desenhar o mapa de sombras B, desenhar a luz B, etc. Nas GPUs de ponta, essas operações podem não saturar a GPU individualmente, portanto alguns núcleos serão fique ocioso.
Dado isso, para obter o melhor desempenho, você provavelmente deve ter pelo menos dois destinos de renderização de mapa de sombra e percorrê-los, mas ainda não é obrigatório ter destinos de renderização separados para cada luz individual. Outra maneira é tentar fornecer à GPU algum outro trabalho que ela possa usar para preencher as lacunas - desenhar partículas em um destino de renderização separado, talvez. (E, como em todas as questões de desempenho, YMMV, faça o perfil!)
fonte