Les lissages Plat, Gouraud et Phong - Part II- Éclairage dans les jeux vidéo

Les lissages Plat, Gouraud et Phong

Suite à l exploration du lissage plat, flat shading, dans la partie précédente on s’intéresse maintenant au lissage de Gouraud, Gouraud Shading.

Henri Gouraud

Henri Gouraud était un étudiant à l’Université de l’Utah à Salt Lake City quand lui est venu l’idée du lissage qui porte son nom. Avant cela les triangles étaient le plus souvent rempli par une couleur constante, le lissage plat décrit dans la première partie.

L’idée était de calculer l’éclairage et la couleur aux trois sommets d’un triangle (les sommets sont appelés vertex, pluriel vertices, en Anglais). Puis de déterminer la couleur à l’intérieur du triangle par une simple interpolation linéaire. Pour les objets courbes rendus par des polygones, cette méthode permettait donc de donner l’illusion d’une courbure sur le triangle.

L’une des premières images rendues par cette méthode était l’image d’un visage. Le visage était une modélisation 3D de celui de la femme d’Henri Gouraud, Sylvie.

Sylvie Gourand et premier modèle 3D avec lissage de Gouraud
Sylvie Gourand et premier modèle 3D avec lissage de Gouraud

Un visage est un exemple de surface courbe qui ne peut pas être approché par un faible nombre de polygones au rendu plat. La gradation des couleurs à l’intérieur des polygones permet donc de donner l’impression d’une plus grande continuité des surfaces.

Gouraud Shading - Lissage de Gouraud

En pseudo code ça pourrait donner cela :

pour chaque triangle ABC
calculer la couleur Ca du triangle au point A
calculer la couleur Cb du triangle au point B
calculer la couleur Cc du triangle au point C
pour chaque pixel(X,Y) appartenant au triangle ABC
Calculer les coordonnées barycentriques de (X,Y) au point A, au point B, au point C : Wa, Wb, Wc
couleur du pixel (X,Y) = Wa * Ca + Wb * Cb + Wc * Cc

Les W varient entre 0 et 1, ils valent exactement 1 quand le point à évaluer est au sommet correspondant (Wa = 1 au point A), et 0 quand on se trouve au sommet opposé (Wa = 0 au point B et au point C).

Les coordonnées barycentriques sont une manière de décrire l’opération qui est faite mais il y en a d’autres, plus ou moins adaptées au hardware. À chaque point du triangle la couleur est donc une moyenne pondérée de chaque couleur aux sommets.

Voici une illustration du gouraud shading dans une scène simple :

Un accélérateur 3D moderne, un GPU, va gérer le lissage de Gouraud par défaut. C’est quelque chose qui a été tout de suite géré quand les accélérateurs sont arrivés sur le marché. Les premiers accélérateurs sur PC et dans les consoles disposaient du recul des stations de travail, workstations, qui tournaient avec OpenGL où le lissage de Gouraud était courant. Aussi ce mode de lissage est relativement peu couteux à implémenter dans le hardware. Bien entendu, certaines de ces premières machines ont pris des raccourcis en n’implémentant pas la correction perspective, ou bien il y avait un nombre limité d’interpolateurs sans compter sur le fait que le calcul de l’éclairage par sommet devait se faire encore sur le CPU (avant l’arrivée des GPUs avec pipelines Transform and Lighting, TnL, complets).

Le premier Tomb Raider combinait textures simples et lissage de Gouraud
Le premier Tomb Raider combinait textures simples et lissage de Gouraud

On notera que le faible nombre de polygones présents dans les premiers jeux en 3D favorisait l’utilisation de textures à celui de l’utilisation de l’éclairage par sommet pour amener des détails dans les scènes. En pratique on pouvait combiner les deux comme dans Tomb Raider, mais les textures étaient la plus grande source de détails et parfois véhiculaient toute l’information d’éclairage (utilisation des lightmaps dans d’autres jeux).

Le lissage de Gouraud dans son sens le plus strict est peu utilisé aujourd’hui, même s’il a fait les beaux jours des premiers jeux en 3D sur ordinateur. Il a été supplanté par la forme plus avancée du Lissage de Phong donc on parlera dans la prochaine partie. Dans un sens plus étendu, les GPUs actuels et les jeux modernes tirent toujours partie du concept d’interpolation de données sur un triangle, même si ce ne sont plus forcément des données de couleur directement mais des données qui sont ensuite utilisées pour calculer la couleur finale.

Par exemple, la formule qui est utilisée plus haut est la même formule qui sera utilisée pour interpoler les coordonnées de texture u et v (pour une texture “traditionnelle” comme la texture diffuse ou la texture de bump, de normale, d’opacité etc).

Comments

Leave your comment