Ombres volumétriques à l’aide du Stencil Buffer
publié le vendredi 25 août 2006 (vu 382 fois)

Ce programme est une évolution de Ombre portée "nettoyée" à l’aide du Stencil Buffer

Cette fois on va plus loin dans l’utilisation du stencil buffer alors j’espère que vous avez compris son fonctionnement. On applique ici une méthode de calcul d’ombre dite volumétrique. On calcule la silhouette des objets par rapport à la position de la lumière et on crée un volume d’ombre à partir de cette silhouette en étirant les arretes de celle ci dans la direction lumière->objet. Ca n’a pas l’air simple mais ce n’est pourtant pas si compliqué que cela, ce ne sont que des mathématiques, de la géométrie vectorielle.

L’avantage par rapport à la méthode du précédent article, c’est que l’ombre est plus réaliste car elle se projette sur les autres objets 3D et sur l’environnement. Le jeu Doom3 utilise massivement cette technique. Elle y est optimisée et plus évoluée car elle utilise entre autres les Shaders de la carte graphique. Les cartes graphiques gérant les Shaders étant plus performantes en calculs vectoriels, on leur fait calculer la silhouette et le volume 3D pendant que le processeur peut faire autre chose en paralèlle.

A noter la contrainte pour obtenir une ombre pleine, sans trous, sans artefact, bref une ombre sans bug graphique : les objets 3D doivent être des volumes parfaits...
Un objet étant composé exclusivement de triangles (donc 3 côtés), chaque triangle doit être raccordé à 3 autres triangles (ses voisins), un par côté. L’objet doit avoir un intérieur et un extérieur bien déterminés, comme un volume.
J’espère que je me fait comprendre ;-)

Pour d’autres explications sur la technique et d’autres possibilités approfondies vous pouvez aller voir ce document pdf (1,2 mo) qui explique cela relativement bien.

J’ai essayé de commenter les parties importantes autant que possible en fonction du peu de temps libre que j’ai en ce moment, j’espère que cela vous permettra de bien cerner le principe et de l’adapter à vos besoins.

JPG - 37.3 ko
Capture d’écran
Code source et Exécutable Windows (fichier Zip de 456.8 ko)