Em alguns jogos, vejo luzes brilhando através das paredes, mesmo se eu definir a qualidade do vídeo em níveis altos.
Alguns exemplos de jogos que joguei recentemente são Borderlands 2 (explosões de mísseis) e Call of Cthulhu (lanternas; o jogo ainda usa o Unreal Engine 4).
Isso é um bug ou há razões de desempenho?
Exemplo Borderlands 2: https://youtu.be/9bV83qA6_mU?t=419 (algumas vezes, mas rapidamente)
Pergunta de bônus: neste último caso, existe alguma maneira de o traçado de raios ser usado de maneira barata para resolver o problema? Eu acho que o RT caro definitivamente resolveu o problema, mas me pergunto se ele também pode ser usado de forma "barata" para resolver esse problema específico.
lighting
shadows
raytracing
Marcus
fonte
fonte
Respostas:
Expandindo a resposta correta do TomTsagk, achei que poderia ajudar a descrever um pouco mais sobre o porquê dos jogos funcionarem dessa maneira.
A luz nos jogos realmente não "viaja" da fonte, para a superfície, para a câmera, ficando obstruída ao longo do caminho.
Para descobrir o quão brilhante é desenhar cada pixel de uma superfície com base em uma determinada luz, usamos (ou aproximamos) uma fórmula matemática que usa a direção da superfície e a direção deste ponto na superfície até a fonte de luz. É isso, apenas a direção em que ele está brilhando - normalmente não lançamos um raio para verificar se a luz realmente atinge esse pixel, porque fazer isso para cada pixel na tela e verificar o raio em relação a toda geometria detalhada na cena é geralmente ainda é muito caro para jogos em tempo real.
Portanto, por padrão, nenhuma luz do jogo projeta sombras. A direção para uma luz permanece a mesma, mesmo que haja um lançador de sombras no caminho, então a matemática nos dá o mesmo valor de brilho.
Se queremos simular sombras, temos que fazer isso separadamente. Uma maneira comum é com o que é chamado de Mapa das Sombras. Nesta versão, antes de sombrear nossa cena, primeiro renderizamos a cena da perspectiva de cada luz, como se essa luz fosse uma câmera, armazenando a profundidade de cada pixel que ela vê em uma textura fora da tela.
Então, quando sombreamos a cena, podemos comparar a distância matemática desse pixel da fonte de luz versus a profundidade que registramos no pixel correspondente no mapa de sombras. Se a profundidade do mapa de sombras for menor, significa que há outra superfície entre aqui e a luz e, em vez disso, desenhamos esse pixel na sombra.
Existem várias técnicas interessantes para fazer com que essas sombras baseadas em mapas pareçam mais agradáveis, com menos artefatos / aliases, mas vou descrevê-las por enquanto. Basta dizer que eles geralmente também não são livres.
Como isso requer renderizar (até) toda a cena novamente da perspectiva de cada luz - até seis vezes, se for uma luz pontual que brilha em todas as direções {norte, sul, leste, oeste, cima, baixo}, e precisamos re - renderize o mapa das sombras sempre que algo se mover, isso pode ficar muito caro.
Portanto, os jogos geralmente concentram seu orçamento de renderização nas luzes mais importantes da cena - como a luz direcional do sol - para garantir que tenham sombras bonitas. Luzes pequenas, de vida curta e menores, como o flash de uma explosão, são muitas vezes perdoáveis se vazarem um pouco pelos oclusores. Geralmente, isso é mais agradável aos jogadores do que um problema na taxa de quadros devido a um aumento repentino no custo de renderização de toda a renderização e cálculo extra do mapa de sombras. Especialmente se for uma cena de ação movimentada, onde a fluidez é mais importante que a perfeição de pixels.
fonte
Para encurtar a história, isso acontece por razões de desempenho.
Quando há uma luz na tela, por padrão ela brilha em todos os objetos (obstruídos ou não), então o jogo precisaria fazer cálculos extras para ver qual objeto é afetado por quê.
Isso é mais fácil de resolver em objetos estáticos usando iluminação estática e cozida, mas isso não é o mesmo em luzes dinâmicas, como explosões observadas.
Para sua pergunta de bônus, ray tracing e cheap não combinam na mesma frase. A única razão pela qual o traçado de raios não tem sido popular até agora é o desempenho. Supondo que todas as luzes usem o traçado de raios, esse problema seria "resolvido", mas à custa do desempenho.
fonte