la recherche de techniques acceptables de cartographie des ombres de qualité

8

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:

entrez la description de l'image ici

Saignement léger inacceptable

avec un facteur c élevé c=5000.0:

entrez la description de l'image ici

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.0et 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.

narthex
la source

Réponses:

2

Bref, oublie ça. J'ai fait des recherches et je vais en fait:

  • échantillonner ESM en utilisant l'échantillonnage de Poisson à la manière PCF (merci Bart Wronski pour la grande application Générateur d'échantillons de Poisson) et étendre cela à la technique PCSS (pénombre variable). Rendre à la texture.
  • éventuellement un flou sensible à la profondeur pour adoucir - EDIT pas si vite cette option ne fonctionne pas comme prévu, tant pis. Au lieu de cela, la rotation du noyau PCF semble fonctionner correctement.

Et tant pis, pas beaucoup de discussion ici.

narthex
la source