Récemment, en cherchant à résoudre le problème de l'acné des ombres de la cartographie des ombres traditionnelle, j'ai mis en œuvre des cartes d'ombres exponentielles. Il a fait l'affaire (pas d'acné du tout) mais en même temps a introduit d'autres erreurs inacceptables.
Pour le flou de la carte de profondeur, j'utilise un flou gaussien avec le plus petit sigma = 1.
Test de la carte fantôme:
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);
avec un petit facteur c c=100.0
:
Saignement léger inacceptable
avec un facteur c élevé c=5000.0
:
Aucun saignement léger mais les détails à haute fréquence semblent "gonflés".
Impossible de trouver un saignement C optimal - la lumière apparaît même à c=3000.0
et une erreur d'ombre haute fréquence est déjà là. Ne pas brouiller la carte de profondeur aide mais un alias se produit.
Et ma question est - comment puis-je améliorer cette technique (ESM) ou dois-je en chercher une autre? Je pense que des ombres de bonne qualité avec de belles performances sont certainement possibles - comme on le voit dans les jeux modernes comme Witcher 3 ou Fallout 4.