Notions de programmation
en 3 dimensions
Dimitri Robert
Analogie avec le cinéma
- 2D → dessin animé, chaque élément de l'image doit être dessiné
- 3D → animation « de synthèse », la scène est modélisée et parcourue par la caméra
Est-ce de l'art ?
- 2D → peinture, dessin
- 3D → assemblage de formes géométriques, construction
Même si l'approche et les compétences requises sont très différentes, la 3D est un art.
Quelle représentation ?
Deux approches pour afficher des mondes en 3D
Voxel
- assemblage de points dans un volume
- représentation très fine, le monde a une consistance
- lourd à gérer
La représentation retenue
Enveloppe
- seule l'enveloppe est affichée
- une boule est une sphère → monde creux
- l'enveloppe est constituée de formes géométriques
- l'esthétique dépend fortement de leur nombre
Forme de base
- 2D → le point coloré (R, V, B) → pixel
- 3D → le triangle texturé
trois points (vertex) éventuellement colorés
- 3D → le quad texturé
quatre points (deux triangles)
Le quad n'est pas vraiment une forme de base puisque composé de deux triangles. Mais il est plus facile à manipuler notamment pour les surfaces tels que les sols (raisonnement en cases à 4 côtés). OpenGL propose de les gérer directement comme une forme de base, au même titre que le triangle.
Texture
- Image en deux dimensions
- Cyclique pour tapisser une surface
- À fond transparent pour les objets plats
- Similaire à un tissu que l'on découpe, étire
Les sprites sont aussi utilisés pour texturer des rectangles : arbres une face (toujours orientée vers la caméra) ou deux faces croisées par exemple.
Appliquer une texture
À chaque vertex une coordonnée de texture
On pratique un découpage de la texture pour l'appliquer sur le triangle ou le quad. La texture peut être étirée, réduite.
Correspondance entre un point de la face et un point de l'image
Coloration de face
- À chaque vertex une couleur
- Couleurs différentes pour les points d'une même face
→ un dégradé entre ces deux points
- Permet de teinter les faces en plus de la texture
Éclairage
Dans la vraie vie
→ La lumière engendre les couleurs
Dans un monde de pixels
→ Les couleurs représentent la lumière
La lumière peut ainsi être teintée : pour un objet éclairé par le soleil couchant on appliquera des dégradés orangés.
Éclairage « flat »
- Coloration uniforme de la face
- Rapide
- Efficace pour formes géométriques et arêtes prononcées
- Calcul : angle entre normale à la face et vecteur lumière
Faire un dessin au tableau pour expliquer le calcul de la norme (produit vectoriel entre deux vecteurs de la face).
Éclairage « Gouraud »
- Henri Gouraud, informaticien français
- Coloration uniforme d'un point
- Plus complexe → dégradés dans la face
- Efficace pour formes complexes
- Calcul : angle entre normale au point et vecteur lumière
Faire un dessin au tableau pour expliquer le calcul de la norme (produit vectoriel entre deux vecteurs de la face). Normalle à un point : abérration mathématique, mais réalité informatique.
Éclairage « Phong »
- Bui Tuong Phong, informaticien vietnamien
- Adoucir les surfaces mieux que le Gouraud
- Normales interpolées pour chaque pixel de la face
Exemples
Une boule éclairée
 |
 |
 |
| Flat |
Gouraud |
Phong |
Une montagne
Capture de Ski Park Manager, jeu développé par Lankhor, sorti en 2002. Distinguer montagne en 3D et arbres/bâtiments, simples faces en 2D.
Caméra
- 1 point, 1 direction
- 2 points (source, destination)
Z-buffer
- Afficher du plus loin au plus proche
- Algorithme du peintre
Le peintre commence à peindre le fond, puis les éléments des divers plans jusqu'au premier.
Niveau de détail
- LOD : level of details
- Réduire nombre de face/qualité de texture
- En fonction de
- l'éloignement
- la vitesse de l'objet
- la puissance de la machine
Liens et ressources
- Wikipédia : http://fr.wikipedia.org/wiki/Synthèse_d'image
- Biographie Henri Gouraud : http://www.univ-reims.fr/Labos/LERI/Afig99/biographie.html
- Programmation 3D : http://tfpsly.planet-d.net/francais/3d/docs.html
- Nehe Tutorials : http://nehe.gamedev.net/
Liens et ressources
- Section 3D de LinuxGraphic : http://www.linuxgraphic.org/section3d/
- Xavier Michelon, didacticiels OpenGL : http://www.linuxgraphic.org/section3d/openGL/didact.html
- Blog de divide : http://www.nofrag.com/~divide/
Crédits
E-mail : d POINT robert AT point-libre.org
Blog : http://www.point-libre.org/~dimitri/blog/
Illustration de Mathieu Leyssenne : http://www.aniii.com
Présentation réalisée avec S5: A Simple Standards-Based Slide Show System :
http://www.meyerweb.com/eric/tools/s5/