[Shading] Ombrage de Gouraud

a marqué ce sujet comme résolu.

Bonjour à tous,

L’Ombrage de Gouraud, ou Gouraud Shading est une technique permettant d’éclairer un objet 3D (plus précisément, chacun de ses polygones). Il s’agit d’une amélioration de l’Ombrage Plat, ou Flat Shading ; l’Ombrage de Gouraud a été rendu obsolète cependant, par l’Ombrage de Phong (ou Phong Shading).

Après cette petite introduction qui ne sert finalement pas à grand-chose :p , j’en viens au fait, à ma question.

Contexte - Version écrite

L’Ombrage de Gouraud est toujours expliqué en prenant l’exemple d’un triangle dont on considère la couleur de chacun de ses trois sommets. Puis on considère une ligne de scannage (ou Scan Line) qui traverse horizontalement le triangle en son milieu, et on considère le milieu de la ligne de scannage.

Autrement dit, on considère le centre du triangle. Nommons ce point "P".

On considère également l’intersection entre le premier côté du triangle et la scan line, et le deuxième côté du triangle et la scan line. Nommons-les respectivement A et B.

Ensuite, on fait une interpolation verticale pour obtenir la couleur de A et celle de B.

Enfin, on fait une interpolation horizontale pour obtenir la couleur de P.

Ainsi obtenons-nous la luminosité du point P.

Contexte - Version vidéo

La vidéo suivante illustre ce que je viens de vous expliquer : https://www.youtube.com/watch?v=_SuyLrU2Xr0 (0:40 à 3:45).

Mes questions

  1. A quoi correspond ce triangle : est-ce un objet 3D ou bien un polygone ?

  2. Normalement, les polygones ont 4 côtés (ce sont des rectangles finalement), non ? (dans Blender, Maya…)

  3. Pourquoi ne calcule-t-on que la luminosité du point P, centre du triangle, et non celle de chaque point de la surface du triangle ?

  4. Enfin, comment passe-t-on d’une couleur à la luminosité ? Car toutes les étapes que j’ai expliquées utilisent SEULEMENT la notion de couleur, et pas celle de luminosité. Pourtant comme par miracle, on trouve la luminosité du point P…

Merci d’avance, bonne continuation et bonnes fêtes de fin d’année !

+0 -0

Salut,
Ravi de voir q’on s’intéresse à ce genre de chose sur le forum ! :P

1 . A quoi correspond ce triangle : est-ce un objet 3D ou bien un polygone ?

The-Aloha-Protocol

Je dirais que ça peut être les deux. Soit il s’agit d’une face qui compose un objet, soit il s’agit d’une objet en forme de triangle n’ayant qu’une seule face.

Ce qu’il faut comprendre c’est que dans un cas comme dans l’autre on montrera souvent une technique sur une seule face pour simplifier l’exemple. Sur un objet complet le principe reste le même, on l’appliquera juste X fois en fonction du nombre de face qui le compose.

2 . Normalement, les polygones ont 4 côtés (ce sont des rectangles finalement), non ? (dans Blender, Maya…)

The-Aloha-Protocol

On parle souvent de polygones en 3D mais on pourrait plus communément parler de faces.
Pour simplifier la conception des modèles 3D les logiciels comme Blender et Maya privilégient les face à 4 points (donc rectangulaire). Mais les cartes graphique et les API qui l’utilisent (comme OpenGL) ne sont pas aussi indulgentes, elles travaillent uniquement avec des faces à 3 points. (en dessous on a plus une face mais une ligne ^^ )

C’est la triangulation.

3 . Pourquoi ne calcule-t-on que la luminosité du point P, centre du triangle, et non celle de chaque point de la surface du triangle ?

Au risque de dire une connerie je dirai que c’est parce que c’est justement la difference entre le Gouraud et le Phong shading. ^^

Sans rentrer dans les détails :

  • Flat Shading : Applique la lumière a toute la face.
  • Gouraud Shading : Applique la lumière par pixel mais en utilisant cette fameuse ScanLine.
  • Phong Shading : Applique la lumière par pixel en interpolant les normales.

4 . Enfin, comment passe-t-on d’une couleur à la luminosité ? Car toutes les étapes que j’ai expliquées utilisent SEULEMENT la notion de couleur, et pas celle de luminosité. Pourtant comme par miracle, on trouve la luminosité du point P…

The-Aloha-Protocol

En fait la luminosité et la couleur ne sont qu’une seule et même chose.
Une lumière en 3D n’est une couleur supplémentaire qu’on applique au pixel de l’objet. Plus ou moins fortement en fonction de sa distance, son intensité et son angle par rapport aux normales.

Je ne sais pas si je suis clair…
En gros si ton pixel est rouge (1.0f, 0.0f, 0.0f) et qu’on lui applique de la lumière blanche (1.0f, 1.0f, 1.0f) il se passera quelque chose comme ça :

Couleur final = Rouge + (Blanc * Intensité * Distance * Interpolation des normales).

Ça donnera un passage de Rouge (1.0f, 0.0f, 0.0f) à "Rouge plus clair" (1.0f, 0.35f, 0.35f).
On est bien sur borné entre 0 et 1 (ou 0 et 255 c’est pareil) sauf si on utilise du HDR mais on en reparlera plus tard…

L’idée c’est que c’est ce principe qui s’applique à chaque pixel de ta face. D’où le passage d’un rouge à un blanc complet là où les normales sont les plus aligné à ta lumière.

+0 -0

Salut, merci d’avoir répondu !

J’ai quelques questions sur tes explications du coup :p

Question 5. Au sujet de la triangulation…

Si la carte graphique est sollicitée, est-ce que la triangulation a lieu ? (autrement dit : la triangulation est-elle systématiquement réalisée) ?

Question 6. Normale et couleur

Dire qu’une normale possède une couleur signifie la même chose que dire que le pixel situé à l’origine de cette normale possède cette même couleur. Mais c’est un abus de langage.

Au sujet de l’Ombrage Plat, de l’Ombrage de Gouraud et de l’Ombrage de Phong

Les affirmations suivantes sont-elles correctes ?

Question 7. Interpolation ou non ?

Gouraud et Phong utilisent l’interpolation. Flat n’utilise pas d’interpolation.

Question 8. Utilisation ou non des normales ?

  1. Le Flat Shading utilise la normale de la surface du polygone ainsi que des couleurs (celle de la source de lumière et celle de la normale de la surface du polygone) ;

  2. Le Gouraud Shading n’utilise pas de normale, mais uniquement des couleurs (celle de chaque sommet du polygone et celle de chaque intersection "scanline - côté du polygone") ;

  3. Le Phong Shading interpole des normales (celle de chaque pixel du polygone) et utilise des couleurs.

Fonctionnement de ces trois ombrages

Question 9. Flat Shading

Aucun sommet du polygone n’est utilisé pour calculer les couleurs (contrairement à Gouraud et Phong pour lesquels les trois sommets du triangle sont utilisés).

L’angle entre la normale de la surface du polygone et la direction de la source de lumière, ainsi que la couleur de la lumière et celle de l’objet sont utilisés pour calculer une même couleur (= luminosité) qui sera assignée à CHAQUE pixel du polygone.

Un polygone éclairé grâce à l’Ombrage Plat sera donc d’une seule et même couleur.

Remarque : "Flat shading computes lighting values for one vertex per polygon and uses the resulting color for the entire polygon, resulting in a single flat color for every polygon" (Source) : ici, on parle bien de "vertex", c’est-à-dire de "sommet"… Le gars qui dit ça se trompe non ?

Question 10. Gouraud Shading

Gouraud Shading : Applique la lumière par pixel mais en utilisant cette fameuse ScanLine.

Heum… tous les pixels de la scanline sont-ils (horizontalement évidemment) parcourus pour être colorié un à un, d’une couleur qui peut tout à fait être différente (valeur d’interpolation horizontale légèrement différente) ?

De plus, cette scanline commence-t-elle vraiment au centre (verticalement parlant) du polygone, comme sur la vidéo que j’ai montrée dans l’OP ? Ou bien commence-t-elle tout en haut du polygone, pour descendre petit à petit jusqu’au bas de ce dernier (la valeur d’interpolation verticale est donc différente plus on descend) ?

En résumé : ce qui me pose problème dans la vidéo que j’ai postée, c’est qu’on considère SEULEMENT la scanline AU CENTRE VERTICAL du polygone, et qu’on considère SEULEMENT le CENTRE HORIZONTAL de cette scanline. Du coup dans la vidéo, on ne colorie qu’un seul point : celui du centre du polygone. C’est très bizarre puisque chaque pixel du polygone est colorié.

Question 11. Phong Shading.

La luminosité du polygone est calculée à chaque pixel.

Pour chaque sommet :

  1. La normale de la surface du polygone,

  2. Le vecteur dont l’origine est le sommet courant, et la destination : la caméra,

  3. Et la direction de la lumière…

… sont interpolées sur chaque pixel du polygone.

Question 12. Différence entre Gouraud et Phong

Au final, ces deux algorithmes colorent chaque pixel du polygone un à un.

Pourtant quand on fait des recherches sur Google, on trouve souvent des phrases du genre "Contrairement à Gouraud, Phong calcule la luminosité de chaque pixel".

Du coup il y a contradiction, et je suis un peu perdu…

+0 -0

Si la carte graphique est sollicitée, est-ce que la triangulation a lieu ? (autrement dit : la triangulation est-elle systématiquement réalisée) ?

La carte graphique ne travaille qu’avec des triangles et on lui passe ces infos via des API comme OpenGL. Dans les premières versions d’OpenGL je crois qu’on pouvait lui passer des Quad et c’est l’API qui se chargeait en interne de passer ça en triangle. Mais aujourd’hui OpenGL a empreinté une voie beaucoup plus bas niveau. Donc il faut lui passer des triangles ou faire le triangulate soit même.

Ps: Si on exporte un modèle 3D d’un logiciel comme Maya ou Blender il sera automatique triangulate à se moment là (en Fbx ou Obj par exemple). Donc on se prend rarement la tete avec ça.

Dire qu’une normale possède une couleur signifie la même chose que dire que le pixel situé à l’origine de cette normale possède cette même couleur. Mais c’est un abus de langage.

Je ne rappel pas avoir dis ca, ou alors je me suis mal exprimer. C’est le vertex qui possèdes une normale et une couleur (en plus de sa position). Les vertices c’est la base de tout en 3D.

(tu verras surement plus tard que c’est aussi lui qui possèdes les coordonnées UV pour la plaquage de texture)


Pour le reste de tes questions je pense qu’un bon tuto t’expliquera tout ça mieux que moi.
Mais je te conseil quand même de commencer par quelque chose de plus simple, ça te permettra de poser de bonnes bases en 3D. J’ai l’impression que tu parles de tout ça de manière très théorique et on sent pas mal de confusion dans tes questions.

Un peu pratique ne ferait pas de mal :

  • Bon tuto sur OpenGL en anglais : lien
  • Autre tuto en Francais : lien

Bon courage ! ;)

Ps: Évite les gros titres en orange, ça sera plus digeste. >_<

+0 -0

Ps: Évite les gros titres en orange, à la limite mets juste ta question en gras ça sera plus digeste. >_<

Glordim

C’est le rendu par défaut des titres générés avec le Markdown, en fait. Si c’est gênant, il faudrait en parler sur le forum des bugs et suggestions.

Désolé pour les titres !

Je n’avais pas du tout l’impression de confondre des notions (juste de rentrer dans les détails), mais je vais lire attentivement les tutos ;) !

Edit :

Heum je ne pense pas que des tutos sur OpenGL puissent me servir, je m’intéresse surtout à l’aspect théorique des ombrages (comment ils sont effectués, la terminologie utilisée, etc.). Et de telles ressources ne courent pas les rues sur Internet, c’est pour ça que j’ai créé ce topic en fait :ange:

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte