2.4.8 L'artefact en ligne d'ombre

2.4.8.1 Quel est le problème ?

Les gens trouvent souvent un problème ennuyeux lors de l'application de modèles modificateurs de normale à des objets. Il est dit qu'une image vaut un long discours, et cela s'applique ici. Cette image montre deux cas où ce problème apparaît :

Quelque fois, des lignes ombrées apparaîssent sur certains objets
Quelque fois, des lignes ombrées apparaîssent sur certains objets

Comme vous le notez, il y a deux artefacts évidents dans l'image. La sphère a une ombre rectiligne qui semble non naturelle, et le maillage a une ombre non rectiligne alors qu'elle est supposée en avoir une.

Bien que les artefacts semblent assez différents dans leur nature, ils sont, en fait, causés par le même problème.

L'image attendue
L'image attendue

On pourrait s'attendre à quelque chose comme cette image (ne faites pas attention à la partie claire sous le maillage de triangles; ce sera expliqué plus tard).

2.4.8.2 Quelle en est la cause ?

Commençons par la sphère avec sa normale perturbée, parce que c'est le plus simple à expliquer.

Test de ligne d'ombre avec les normales modifiées
Test de ligne d'ombre avec les normales modifiées

Cette image montre graphiquement ce qui arrive.

Le problème arrive sur le "côté obscur" de l'objet, c'est à dire la face qui ne "voit" pas la source de lumière.

Bien que la normale de surface pointe en s'éloignant de la source de lumière (c.a.d. son angle est >90 degrés avec la source de lumière), la normale des points perturbés pointe vers elle (c.a.d. son angle est <90 degrés) et donc, en accord avec le vecteur de normale, la source de lumière devrait éclairer le point en question.

Toutefois, quand il fait son test d'ombre, POV-Ray voit que le rayon de test coupe la surface (dans ce cas, la surface de la même sphère, mais de "l'autre côté"). Alors il décide que la surface en question ombre le point en cours, et donc que la source de lumière ne l'illumine pas.

C'est ce qui cause l'ombre rectiligne exactement où la normale de surface (non perturbée) est exactement à 90 degrés de la source de lumière.

Le problème avec le maillage est plus difficile, mais très similaire (et causé par exactement le même problème).

Test d'ombre d'un maillage de triangles
Test d'ombre d'un maillage de triangles

Cette image montre graphiquement ce qui arrive.

Bien qu'il n'y ait pas de perturbation de normale explicite, le fait que la surface soit un maillage de triangles adoucis signifie qu'il y a une perturbation de normale implicite.

Dans le but d'obtenir une apparence adoucie, chaque sommet a un vecteur de normale et le vecteur de normale de tout point de la surface est calculé par interpolation des vecteurs de normale des sommets.

Là le problème arrive quand la ligne d'ombre doit passer à travers un triangle et que la normale non perturbée de ce triangle pointe en s'éloignant de la source de lumière. Comme vu dans la figure, un triangle qui est proche de la source de lumière ombrera le point du triangle en cours (ce n'est pas nécessairement le triangle adjacent, mais si le maillage est fermé, un triangle ombrera sûrement le point en question).

Cela signifie que ce triangle infortuné sera complètement ombré, provoquant un artefact triangulaire sur la ligne d'ombre du maillage.

La ligne d'ombre correspond au maillage non adouci
La ligne d'ombre correspond au maillage non adouci

L'image sur la gauche montre plus clairement pourquoi la ligne d'ombre du maillage de triangles adoucis est comme elle apparaît sur la première image de cette page.

L'objet à gauche est le même maillage de triangle, mais avec des triangles plats, et l'objet sur la droite est le même objet que celui sur l'image en début de page.

Notez comment les triangles ombrés du maillage plat correspondent exactement aux artefacts dans la ligne d'ombre du maillage adouci. La raison de ceci a été expliquée dans la figure précédente.

2.4.8.3 Ce problème peut-il être résolu ?

Et comment corriger le problème dans la seconde image au début de cette page ?

Premièrement, ne pensez pas que c'est un défaut de POV-Ray. Ce n'est pas un défaut, mais un réel problème causé par le modèle d'illumination utilisé par le moteur de rendu qui est assez difficile à contourner. Ce n'est pas un problème particulier à POV-Ray, mais un problème dans le raytracing en général. Chaque raytraceur aura ce problème lors de l'utilisation de normales de surface perturbées (sauf s'il y a une correction de code).

Les normales de surface perturbées sont utilisées, en fait, pour simuler la perturbation de la surface elle-même. Lors du calcul de l'illumination de l'objet, la perturbation de normale de surface donnera l'impression que la surface elle-même est perturbée (ex. dans les images du début de cette page, la sphère ressemble à une surface bosselée).

Dans les maillages de triangles, l'interpolation de la normale est utilisée pour simuler la courbure de la surface (une courbure qui n'est pas là actuellement).

Toutefois, puisque la perturbation du vecteur de normale n'affecte pas la surface elle-même, cette sorte d'artefact est le prix à payer (une autre conséquence est que même si la surface paraît bosselée ou adoucie, sa silhouette paraîtra tranchée ou à facettes, mais ceci n'est habituellement pas un gros problème).

C'est un réel problème qui arrive même aux meilleurs. Par exemple, voyez ceci Image gagnante du IRTC. Notez l'ombre rectiligne sur les rochers (spécialement sur le plus proche) ?

Toutefois, il y a certaines choses qui peuvent être faites pour alléger le problème.

2.4.8.4 Solutions possibles ?

1) Donc que dois-je faire pour avoir la seconde image du début de cette page ?

J'ai juste rendu les objets sans ombres. Cela débarasse du problème des surfaces ombrant le mauvais point.

Ceci, bien sûr, a de sévères désavantages. Puisque l'objet ne porte pas d'ombres, il ne peut probablement pas être utilisé dans une scène réelle (Bien que le fait d'avoir rendu les rochers sans ombres dans l'image gagnante de l'IRTC, mentionnée au-dessus, aurait peut-être un peu aidé l'image sans la rendre trop irréaliste).

Avec les maillages de triangles adoucis, cela introduit un autre artefact, qui peut être vu dans la seconde image au début de cette page. Je ne connais pas le mécanisme exact de cet artefact, mais c'est une conséquence directe des maillages sans ombres (cela peut avoir quelque chose à voir avec le fait que les triangles adoucis sont doublement illuminés dans POV-Ray).

2) Peut-être une future version de POV-Ray ou une de ses corrections peut introduire une méthode pour stopper l'auto-ombrage (tout en continuant de porter des ombres sur les autres objets).

Cela permettrait de surmonter le problème des objets complètement sans ombre, puisque ces objets peuvent être utilisés dans des scènes, et ils porteront des ombres sur les autres objets sans avoir l'artefact de la ligne d'ombre.

Toutefois, cette solution ne s'applique que sur une petite série d'objets (des objets principalement convexes). Les objets où l'auto-ombrage est essentiel (imaginez une tasse de café, par exemple) auront toujours des problèmes.

3) J'ai proposé cet algorithme sophistiqué pour se débarasser du problème :

Lors des tests d'ombrages, faire la chose suivante :

  1. Faire le test d'ombrage normal, qu prend toutes les intersections du rayon avec toutes les surfaces qui sont entre le point et la source de lumière.
  2. Regarder si le vecteur de normale non perturbé pointe en s'éloignant de la source de lumière, et si le vecteur de normale perturbé pointe vers la lumière.
  3. Si c'est le cas, vérifier si le point d'intersection le plus proche appartient à l'objet.
  4. Si c'est le cas, enlever ce point d'intersection de la liste.

Si nous voulons être plus sûrs, nous pouvons vérifier aussi si nous avons touché la partie interne de la surface de ce point d'intersection avant de l'ôter. Cela peut être nécessaire pour les surfaces non fermées.

Cet algorithme éliminera les artefacts de ligne d'ombre sans éliminer l'ombrage et l'auto-ombrage de l'objet.

Il a son défaut, bien sûr :

  1. Par exemple, si la caméra est à l'intérieur de l'objet en question (et que toutes les sources de lumières sont dehors), nous pouvons nous attendre à avoir une vue complètement assombrie de la surface. Toutefois, si la surface a une normale perturbée, nous verrons quelques parties illuminées. Mais je pense que ce problème est sans importance dans la majorité des scènes (et il peut être possible de désactiver la correction).
  2. Il y a aussi des problèmes qui peuvent arriver avec les objets non convexes (merci à Ron Parker pour avoir relevé cela). L'objet peut s'ombrer lui-même avec plus d'une surface. S'il s'ombre lui-même de l'extérieur (ex. une tasse de café), il n'y a pas de problème, mais s'il s'ombre lui-même de l'intérieur (ex. une tasse à café à l'envers) cette ombre sera vue de manière iréaliste sur la surface la plus extérieure de l'objet. Il n'y a aucune méthode aisée pour détecter le cas.
  3. Un autre problème similaire intervient s'il y a un autre objet dans notre objet, cet autre objet portera aussi lui-même une ombre sur la surface (cela peut être résolu en ignorant tous les objets dans l'objet actuel, cela peut être fait simplement; toutefois, cela ne fonctionne pas dans tous les cas).
  4. Nous avons toujours le même artefact dans les maillages de triangle comme montré dans la seconde image du début de la page. Toutefois, je suis sûr que ce problème peut être tout aussi bien résolu (mais je peux me tromper, bien sûr).
2.4.7 Questions diverses 2.4.7 Questions diverses 2.4.9 L'artefact du triangle adouci 2.4.9 L'artefact du triangle adouci