Artefacts de cartographie des ombres

8

J'ai joué avec le mapping d'ombres dans OpenGL en utilisant des textures de profondeur. La texture de la profondeur est fine et je peux la cartographier sur la scène mais j'ai des objets étranges à l'arrière de l'objet:

Sphère projetant une ombre, avec des artefacts à l'arrière

Ma question est de savoir ce qui cause cela et comment puis-je y remédier?

Le shader de fragment que j'utilise est assez simple (j'ai supprimé la couleur pour plus de simplicité au cas où vous vous demanderiez pourquoi il n'y a pas de bleu ici):

in vec4 vShadowCoord;

uniform sampler2DShadow shadowMap;

out vec4 fragColor;

void main()
{
    float bias = 0.005;
    float visibility = 1.0;
    if (texture(shadowMap, vec3(vShadowCoord.xy, vShadowCoord.z / vShadowCoord.w)) < (vShadowCoord.z - bias) / vShadowCoord.w)
        visibility = 0.25;

    fragColor = vec4(visibility);
}

Modifier: comme demandé, capture d'écran exemple de travail minimum qui utilise uniquement le code ci-dessus (pas de couleur).

Même sphère, moins la couleur

Blarglenarf
la source
1
Pouvez-vous confirmer si le code affiché (avec bleu supprimé) provoque également les artefacts? Si vous avez réduit le code, afficher l'image du code réduit aidera à exclure tous les détails non pertinents et à mettre en évidence le problème.
trichoplax
Oui, je me suis dit que je prendrais une capture d'écran avec de la couleur, sinon ça a l'air encore plus laid :)
Blarglenarf
Je peux comprendre cela, mais comme c'est la laideur avec laquelle vous demandez de l'aide, vous pourriez avoir une meilleure chance que quelqu'un voit le problème si vous incluez également la capture d'écran qui correspond au code.
trichoplax
1
C'est suffisant. J'ai ajouté une capture d'écran supplémentaire.
Blarglenarf
Avez-vous essayé de jouer un peu plus avec le parti pris?
cifz

Réponses:

11

Ce problème ressemble à des artefacts d'acné de carte d'ombre standard. De plus, l'équation d'éclairage de votre est incomplète ou erronée. La lumière ne doit pas influencer les visages avec les normales à l'opposé. Cela signifie également qu'avec une équation appropriée, le côté "sombre" de la sphère ne devrait pas avoir d'artefacts d'acné.

Il existe trois sources d'artefacts liés à l'acné:

  • La première source d'acné est la précision de la carte d'ombre. Assurez-vous que les plans proches et éloignés de la lumière projetée par l'ombre sont aussi serrés que possible. Tous les objets avant le plan proche peuvent être crêpés, car leur profondeur exacte n'est pas importante.
  • La deuxième source d'acné est la résolution de la carte d'ombre. Pour une lumière directionnelle, vous devriez faire des cartes d'ombre en cascade avec au moins 3 cascades de 1024x1012 pour une distance d'ombre d'environ 100-200 m. Il est difficile de couvrir une distance d'ombre similaire avec une seule carte d'ombre avec une projection uniforme.
  • La troisième source d'acné est un filtre de carte d'ombre large comme PCF, car l'utilisation d'une seule valeur de comparaison de profondeur en profondeur à travers un noyau large est insuffisante. Il existe de nombreuses méthodes pour y remédier, mais aucune n'est robuste.

Pour résumer, un tronc serré avec quelques cascades et quelques ajustements de biais est suffisant pour faire fonctionner le boîtier général (lumière directionnelle). Commencez à peaufiner en désactivant le filtrage des ombres et à ajuster le filtrage uniquement lorsque les cartes d'ombres de base sont suffisamment robustes.

En plus du biais de profondeur constante (que vous utilisez actuellement), vous devez également ajouter un biais de profondeur de pente et un biais de profondeur de pente max. Les deux peuvent être implémentés en tant qu'état de rendu ou en tant que code de shader lors du rendu de la shadowmap. Le biais de profondeur de pente est simplement une valeur de biais magique mise à l'échelle par un point (normal, lightDir).

Il existe d'autres méthodes intéressantes et la plupart d'entre elles sont mises en œuvre dans l'excellente démo: Matt Pettineo - "Un échantillonnage de techniques d'ombre" .

  • Inverser l'abattage pendant le rendu de la carte d'ombre (échange l'acné contre le panoramique de Peter).
  • Le mappage d'ombres décalé normal fait des merveilles pour les problèmes de biais, mais nécessite d'avoir des normales de sommet autour pendant l'ombrage.
  • Les méthodes basées sur la variance (ESM, VSM, EVSM) éliminent complètement les problèmes de biais, mais présentent d'autres inconvénients (fuite de lumière et / ou problèmes de performances).
Krzysztof Narkowicz
la source