Article de reference

Volume d'ombre

Exemple d'ombrage au pochoir de Carmack dans Doom 3 Le volume d'ombre est une technique utilisée en infographie 3D pour ajouter des ombres à une scène rendue. Proposée initialem...

Exemple d'ombrage au pochoir de Carmack dans Doom 3

Le volume d'ombre est une technique utilisée en infographie 3D pour ajouter des ombres à une scène rendue. Proposée initialement par Frank Crow en 1977 , elle désigne la géométrie décrivant la forme 3D de la région occultée par une source lumineuse. Un volume d'ombre divise le monde virtuel en deux : les zones d'ombre et les zones éclairées.

L' implémentation des volumes d'ombre par tampon de stencil a été largement utilisée dans le rendu en temps réel, et notamment employée dans le jeu vidéo Doom 3 . La variante particulière de la technique utilisée dans ce jeu est devenue connue sous le nom de Carmack's Reverse .

Dans le rendu moderne en temps réel, les techniques de mappage d'ombres et leurs variations sont devenues plus largement utilisées , en raison de leurs caractéristiques de performance et de leur compatibilité avec les pipelines de rendu contemporains .

Construction

Pour construire un volume d'ombre, projetez un rayon issu de la source lumineuse à travers chaque sommet de l'objet projetant l'ombre jusqu'à un point donné (généralement à l'infini). Ces projections forment ensemble un volume ; tout point à l'intérieur de ce volume est dans l'ombre, tandis que tout point à l'extérieur est éclairé.

Pour un modèle polygonal, le volume est généralement formé en classant chaque face du modèle comme étant orientée vers la source lumineuse ou opposée à celle-ci. L'ensemble des arêtes reliant une face orientée vers la source lumineuse à une face opposée forme la silhouette par rapport à la source. Ces arêtes sont ensuite extrudées à l'opposé de la lumière pour construire les faces du volume d'ombre. Ce volume doit couvrir l'ensemble de la scène visible ; souvent, ses dimensions sont étendues à l'infini pour ce faire (voir l'optimisation ci-dessous). Pour former un volume fermé, les extrémités avant et arrière de cette extrusion doivent être recouvertes. Ces recouvrements sont appelés « bouchons ». Selon la méthode utilisée pour le volume d'ombre, l'extrémité avant peut être recouverte par l'objet lui-même, et l'extrémité arrière peut parfois être omise (voir le calcul de profondeur ci-dessous).

Un problème d'ombre se pose également lorsque les faces le long du contour de la silhouette sont relativement peu profondes. Dans ce cas, l'ombre portée par un objet sur lui-même est nette, révélant ses facettes polygonales, alors qu'un modèle d'éclairage classique présenterait une variation progressive de la lumière le long de la facette. Il en résulte un artefact d'ombre grossier près du contour de la silhouette, difficile à corriger. Augmenter la densité polygonale atténue le problème, sans toutefois l'éliminer complètement. Si l'avant du volume d'ombre est fermé, il est possible de décaler légèrement l'ensemble du volume d'ombre par rapport à la source lumineuse afin de supprimer les auto-intersections d'ombres à une distance égale à celle du contour de la silhouette (cette solution est plus couramment utilisée en cartographie d'ombres ).

Les étapes de base pour former un volume d'ombre sont :

  1. Trouvez tous les contours de la silhouette (les contours qui séparent les faces avant des faces arrière).
  2. Prolongez tous les contours de la silhouette dans la direction opposée à la source lumineuse.
  3. Ajoutez un capuchon avant et/ou arrière à chaque surface pour former un volume fermé (cela peut ne pas être nécessaire, selon la mise en œuvre utilisée).
Illustration des volumes d'ombre. L'image de gauche montre une scène ombrée à l'aide de volumes d'ombre. À droite, ces volumes sont représentés en mode filaire. Remarquez comment les ombres forment une large zone conique pointant à l'opposé de la source lumineuse (le point blanc brillant).

Implémentations de tampon de stencil

Après Crow, en 1991, tampon de stencil pour générer des ombres avec des volumes d'ombre suffisamment rapidement pour les applications en temps réel. Il existe trois variantes courantes de cette technique : le rendu par passes de profondeur , le rendu par échec de profondeur et le OU exclusif , mais toutes reposent sur le même principe.

  1. Rendez la scène comme si elle était entièrement dans l'ombre.
  2. Pour chaque source lumineuse :
    1. En utilisant les informations de profondeur de cette scène, construisez un masque dans le tampon de stencil qui ne comporte des trous que là où la surface visible n'est pas dans l'ombre.
    2. Effectuez un nouveau rendu de la scène comme si elle était entièrement éclairée, en utilisant le tampon de stencil pour masquer les zones d'ombre. Utilisez la fusion additive pour ajouter ce rendu à la scène.

La différence entre ces trois méthodes réside dans la génération du masque lors de la seconde étape. Certaines nécessitent deux passages, d'autres un seul ; certaines requièrent une précision moindre dans la mémoire tampon du stencil.

Les volumes d'ombre ont tendance à recouvrir une grande partie de la scène visible, ce qui consomme un temps de rastérisation précieux (temps de remplissage) sur le matériel graphique 3D. Ce problème est accentué par la complexité des objets projetant des ombres, car chaque objet peut projeter son propre volume d'ombre de taille quelconque à l'écran. Voir la section optimisation ci-dessous pour une discussion des techniques utilisées pour réduire le temps de remplissage.

Passage en profondeur

Heidmann a proposé que si les surfaces avant et arrière des ombres étaient rendues en passes séparées, le nombre de faces avant et arrière devant un objet pouvait être compté à l'aide du tampon de stencil. Si la surface d'un objet est dans l'ombre, il y aura plus de surfaces d'ombre orientées vers l'avant entre cet objet et l'œil que de surfaces d'ombre orientées vers l'arrière. En revanche, si leur nombre est égal, la surface de l'objet n'est pas dans l'ombre. La génération du masque de stencil fonctionne comme suit :

  1. Désactiver l'écriture dans les tampons de profondeur et de couleur.
  2. Utilisez le masquage des faces arrière .
  3. Configurez l'opération de stencil pour qu'elle s'incrémente à chaque passage en profondeur (ne comptez que les ombres devant l'objet).
  4. Afficher les volumes d'ombre (en raison du culling, seules leurs faces avant sont affichées).
  5. Utilisez l'élimination des faces avant.
  6. Configurez l'opération de pochoir pour qu'elle décrémente à chaque passage en profondeur.
  7. Afficher les volumes d'ombre (seules leurs faces arrière sont affichées).

Selon la caractéristique d'Euler , toutes les surfaces éclairées correspondent à un 0 dans le tampon de stencil, où les nombres de surfaces avant et arrière de toutes les variétés fermées (volumes d'ombre) sont égaux.

Cette approche présente des problèmes lorsque l'œil se trouve dans un volume d'ombre (par exemple, lorsque la source lumineuse passe derrière un objet). Dans ce cas, l'œil perçoit d'abord la face arrière de ce volume d'ombre, ce qui introduit un biais de -1 dans l'ensemble du tampon de stencil et inverse ainsi les ombres. On peut y remédier en ajoutant une surface de « masquage » à l'avant du volume d'ombre faisant face à l'œil, par exemple au niveau du plan de coupe avant . Il existe également le cas où l'œil se trouve dans l'ombre d'un volume projeté par un objet situé derrière la caméra ; il est alors nécessaire de masquer ce volume pour éviter un problème similaire. Dans la plupart des implémentations courantes, la mise en œuvre correcte de ce masquage pour la passe de profondeur étant complexe, la méthode d'échec de profondeur (voir ci-dessous) peut être utilisée dans ces situations particulières. Une autre solution consiste à appliquer un biais de +1 au tampon de stencil pour chaque volume d'ombre dans lequel se trouve la caméra, bien que la détection puisse s'avérer lente.

Un autre problème potentiel survient si la mémoire tampon de stencil ne dispose pas d'un nombre de bits suffisant pour gérer le nombre d'ombres visibles entre l'œil et la surface de l'objet, ce qui peut entraîner un dépassement de capacité lorsque la scène comporte un nombre important de volumes d'ombre. Si l'arithmétique de saturation est utilisée, le problème peut s'aggraver, car certains calculs de volume peuvent être ignorés.

Le test de profondeur est également connu sous le nom de test de profondeur en Z , car le tampon de profondeur est souvent appelé tampon Z.

Échec de profondeur

Aux alentours de l'an 2000, plusieurs chercheurs ont découvert que la méthode de Heidmann pouvait être appliquée à toutes les positions de la caméra en inversant la profondeur. Au lieu de compter les surfaces d'ombre devant l'objet, on peut compter tout aussi facilement celles situées derrière, avec le même résultat. Ceci résout le problème de l'œil dans l'ombre, puisque les volumes d'ombre entre l'œil et l'objet ne sont pas comptabilisés. Cependant, cela impose de limiter l'extrémité arrière du volume d'ombre, sous peine de voir des ombres manquantes là où le volume pointe vers l'infini.

  1. Désactiver l'écriture dans les tampons de profondeur et de couleur.
  2. Utilisez l'élimination des faces avant.
  3. Configurez l'opération de pochoir pour qu'elle s'incrémente en cas d'échec de profondeur (ne comptez que les ombres derrière l'objet).
  4. Générer les volumes d'ombre.
  5. Utilisez le masquage des faces arrière.
  6. Configurez l'opération du pochoir pour qu'elle décrémente en cas d'échec de profondeur.
  7. Générer les volumes d'ombre.

La méthode de détection d'échec de profondeur prend en compte la précision du tampon de stencil de la même manière que la méthode de validation de profondeur. Elle est également parfois appelée, comme cette dernière, méthode de détection d'échec de l'axe Z.

William Bilodeau et Michael Songy ont découvert cette technique en octobre 1998 et l'ont présentée à Creativity, une conférence de développeurs de Creative Labs, en 1999. la GDC en mars 1999 et à Creativity fin 1999. Quelques mois plus tard, William Bilodeau et Michael Songy ont déposé une demande de brevet américain pour cette technique, intitulée « Méthode de rendu d'ombres utilisant un volume d'ombre et un tampon de stencil ». John Carmack, d' id Software, a découvert l'algorithme indépendamment en 2000 lors du développement de Doom 3. [ Software a été autorisé à utiliser le brevet de Creative en échange de la promotion du système audio EAX de la société dans le jeu . Ce brevet a expiré en octobre 2019.

Exclusif ou

Chacun des deux types ci-dessus peut être approché par une variante OU exclusif , qui ne gère pas correctement les volumes d'ombres qui s'intersectent, mais permet d'économiser une passe de rendu (voire le temps de remplissage) et ne nécessite qu'un tampon de stencil 1 bit. Les étapes suivantes concernent la version avec passe de profondeur :

  1. Désactiver l'écriture dans les tampons de profondeur et de couleur.
  2. Configurez l'opération de stencil sur XOR lors du passage en profondeur (retournement sur toute surface d'ombre).
  3. Générer les volumes d'ombre.

Optimisation

  • Une méthode pour accélérer les calculs géométriques des volumes d'ombre consiste à utiliser des parties existantes du pipeline de rendu pour effectuer certains calculs. Par exemple, en utilisant des coordonnées homogènes , la coordonnée w peut être fixée à zéro pour étendre un point à l'infini. Ceci doit être accompagné d'un frustum de visualisation dont le plan de coupe lointain s'étend à l'infini afin d'inclure ces points, ce qui est réalisé à l'aide d'une matrice de projection spécifique. Cette technique réduit légèrement la précision du tampon de profondeur, mais la différence est généralement négligeable. Pour une implémentation détaillée, voir l'article de 2002 intitulé « Practical and Robust Stenciled Shadow Volumes for Hardware-Accelerated Rendering », de C. Everitt et M. Kilgard .
  • Le temps de rastérisation des volumes d'ombre peut être réduit en utilisant un test de ciseaux matériel pour limiter les ombres à un rectangle spécifique à l'écran.
  • Un seul passage est possible en utilisant une variable intégrée au shader pour détecter les faces avant au lieu de deux passages séparés pour éliminer l'un l'autre, combinés au remplacement du tampon de stencil par un mélange arithmétique sur le tampon de couleur.
  • Nvidia a implémenté une fonctionnalité matérielle appelée test des limites de profondeur , conçue pour supprimer les parties des volumes d'ombre qui n'affectent pas la scène visible. (Cette fonctionnalité est disponible depuis le modèle GeForce FX 5900.) Une discussion sur cette fonctionnalité et son utilisation avec les volumes d'ombre a été présentée à la Game Developers Conference de 2005.
  • Puisque la méthode de détection d'échec de profondeur ne présente un avantage sur la méthode de passage de profondeur que dans le cas particulier où l'œil se trouve dans un volume d'ombre, il est préférable de vérifier ce cas et d'utiliser la méthode de passage de profondeur autant que possible. Cela évite à la fois le recouvrement arrière inutile (et la rastérisation associée) dans les cas où la détection d'échec de profondeur est superflue, ainsi que le problème du recouvrement avant approprié pour les cas particuliers d'utilisation de la méthode de passage de profondeur .
  • Sur les pipelines GPU plus récents, les shaders de géométrie peuvent être utilisés pour générer les volumes d'ombre.
  • Sur les systèmes qui ne prennent pas en charge les shaders de géométrie, les shaders de vertex peuvent également être utilisés pour créer des volumes d'ombre en extrudant sélectivement des sommets qui résident déjà dans la mémoire GPU.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index