Recentemente, enquanto procurava solucionar o problema da acne das sombras do mapeamento tradicional das sombras, implementei mapas de sombras exponenciais. Ele fez o truque (sem acne), mas ao mesmo tempo introduziu outros erros inaceitáveis.
Para desfoque no mapa de profundidade, uso o desfoque gaussiano com o menor sigma = 1.
Teste para o mapa de sombra:
float occluder = texture(shadowMap lightCoords.xy).r;
float c = 5000.0;
float receiver = lightCoords.z;
float shadow = exp(c*(occluder-receiver));
shadow = clamp(shadow, 0.0, 1.0);
com pequeno fator c c=100.0
:
Sangramento leve inaceitável
com alto fator c c=5000.0
:
Nenhum sangramento leve, mas os detalhes de alta frequência aparecem "inchados".
Não é possível encontrar o sangramento c-light ideal, mesmo quando o c=3000.0
erro de sombra de alta frequência já está lá. Não desfocar o mapa de profundidade ajuda, mas o alias ocorre.
E minha pergunta é - como posso melhorar essa técnica (ESM) ou devo procurar outra? Acho que sombras de boa qualidade com bom desempenho são definitivamente possíveis - como visto em jogos modernos como Witcher 3 ou Fallout 4.