Estou curioso para saber como lidar com muitas luzes em uma cena. Dado um mapa muito grande em um RPG, com masmorras (com luzes lá dentro) etc. Eu sei sobre iluminação diferida, mas isso só responde como renderizar muitas luzes. Mas minha pergunta é mais: como não renderizar muitas luzes. É obviamente desejável renderizar apenas as luzes que afetam a cena, mas não conheço uma técnica / algoritmo para arquivar isso. Ninguém quer nem consegue render 500 pontos, apenas porque existe em algum lugar no mapa. Mas não se pode simplesmente pegar uma linha reta da luz para o jogador e testar se há algo no meio. A distância também não parece ser um bom indicador. (Luz solar?)
tl; dr: Como posso descobrir quais luzes afetam a cena para renderizá-las apenas?
Respostas:
Ainda mais simples que volumes delimitadores;
Atribua um raio a cada luz. Quando se trata de renderizar sua cena, basta verificar se a distância entre os objetos da cena e cada luz é menor que o raio da luz. Nesse caso, use a luz; caso contrário, pule-a.
Apenas uma fração mais complicada, dependendo da importância do desempenho:
Você também pode fazer uma espécie de verificação de fase ampla. Basta definir uma grade espacial que armazena alças para suas luzes em uma célula de grade e, em seguida, execute apenas a verificação de distância nas luzes que estão nas células dentro do raio máximo dos objetos da cena.
fonte
A maneira mais simples em que consigo pensar (vamos ser honestos, a única maneira que pensei) é dar a cada luz um volume delimitador . Se o volume delimitador cruzar com o perfil da vista (ou um volume delimitador do perfil da vista), aplique a luz.
Ainda pode haver luzes aplicadas, mesmo que elas não afetem nenhum objeto visível, mas é simples e rápido. A organização inteligente do seu gráfico de cena pode significar que apenas algumas verificações de interseção abatem a maioria de suas luzes (assim como o que é feito para a seleção de objetos).
Algo como o sol não pode ter volume delimitador (para indicar que ele sempre deve ser aplicado).
fonte