Gráficos - Teoria de Shadow Maps Omnidirecionais

Aqui está a explicação passo a passo de como isso funciona no seu pipeline C++ e HLSL:

1. A Fase de Gravação (Renderização do Cubemap)

Quando você gera o shadow cube, você posiciona uma câmera virtual no centro da sua lâmpada e renderiza a cena em 6 direções diferentes (as faces do cubo).

2. A Fase de Leitura (Renderização da Cena Principal)

Quando você vai desenhar o seu cenário final na tela (o frame que o jogador vê), o seu Pixel Shader calcula a iluminação de cada parede. Para saber se a segunda parede recebe luz ou sombra, o HLSL faz o seguinte teste:

  1. Calcula a distância real: O shader mede a distância real entre a lâmpada e o pixel atual da segunda parede (digamos que seja 10 metros).
  2. Amostra o Cubemap: O shader usa o vetor de direção (Lâmpada \(\rightarrow \) Segunda Parede) para ler o valor guardado no seu Shadow Cubemap.
  3. A Comparação: Ele recupera o valor que você "salvou" na primeira fase. O Cubemap responde: "O objeto mais próximo que eu vi nessa direção estava a 2 metros".
  4. O Resultado: O shader compara os dois valores:
Distância Real (10m) > Distância Salva (2m)

Como a distância real é maior, o shader conclui que algo bloqueou a luz no caminho (a primeira parede). Portanto, o pixel da segunda parede é desenhado na sombra.

O Efeito de "Marca Gravada"

A luz não "atravessa" a primeira parede no seu cálculo porque o Shadow Map funciona como um bloqueador de linha de visão. Uma vez que a primeira parede gravou a sua profundidade no Cubemap, ela protege tudo o que está atrás dela (na mesma direção vetorial) de receber a luz daquela lâmpada específica.

Se você mover a segunda parede mais para trás ou para o lado, ela continuará projetando a sombra exatamente no formato da silhueta da primeira parede, pois o vetor de amostragem do Cubemap continuará batendo na "marca" de 2 metros deixada pela primeira parede.

Para deixar o seu sistema ainda melhor, você está enfrentando problemas com Shadow Acne (aqueles artefatos de listras pretas na parede) ou Peter Panning (sombras que parecem flutuar longe do objeto)? Se quiser, posso te mostrar como aplicar um Depth Bias ou fazer um PCF (Percentage-Closer Filtering) no HLSL para suavizar as bordas dessas sombras!