Infographie

Rémy Malgouyres
Enseignement d'infographie

Algorithmes pour la synthèse d'images
Mathématiques pour la synthèse d'images
Bibliothèque graphique OpenGL (téléchargement)

1) Algorithmes pour la synthèse d'images

Ce cours contient essentiellement les algorithmes fondamentaux et incontournables de synthèse d'images. L'auteur aurait bien sûr souhaité aller beaucoup plus loin, que ce soit sur le plan de la modélisation et des algorithmes (en exposant par exemple la notion de radiosité qui fait défaut dans ce cours), ou sur le plan des outils disponibles pour synthétiser des images, tels que des logiciels de modelage 3D, ou encore la bibliothèque de fonctions OpenGL, DirectX, etc... Ces notions sont traîtées dans d'autres cours.

Bien que le cours soit, comme on l'a dit, orienté vers le 3D, il nous a paru utile d'exposer dans une première partie quelques principes d'infographie 2D, principalement un algorithme de tracé de droites du type Bresenham et un algorithme de remplissage de polygone, mais aussi le fenêtrage. Ces primitives graphiques interviennent en effet dans de très nombreuses techniques graphiques. On verra par exemple l'utilité de la primitive de remplissage de polygone lors de l'étude de l'algorithme du z-buffer (voir plus loin).

La deuxième partie est consacré au modelage 3D. Le modelage consiste en un ensemble d'outils permettant de construire et de coder des scènes 3D plus ou moins complexes. En la matière, ce polycopié contient principalement la construction de diverses structures de données permettant de représenter les quadriques, polyèdres, surfaces construites à partir de courbes splines (dont l'extrusion).

La troisième partie présente des notions et algorithmes permettant de réaliser un affichage d'une scène 3D suffisamment rapide pour être utilisé dans des applications interactives.
On introduit deux types de projections, la projection parallèle et le projection en perspective, qui correspondent aux deux principaux modèles de caméra, dont la caméra "Pinhole".
L'affichage proposé repose sur l'algorithme du z-buffer pour éliminer les parties cachées d'une scène ramenée à un ensemble de polyèdres.
On trouve aussi quelques modèles simples d'éclairement qui sont compatibles avec l'algorithme du z-buffer et permettent d'obtenir un rendu acceptable pour une application interactive (voir les images ci-dessous).
On trouve enfin une courte introduction à la notion de texture, concept nécessaire à la description d'objets complexes et d'aspect subtil.

On fait ensuite quelques rappels sur les changements de repères, qu'il faut absolument maîtriser avant toute tentative pour réaliser une interface pour visualiser des scènes 3D. On introduit alors les notions permettant de naviguer de manière assez conviviale dans une scène 3D (voir exécutable des TP ci-dessous).

La quatrième partie présente le lancer de rayon. Cette technique, qui conduit à des algorithmes trop lents pour être utilisés dans une application interactive, est à la base des algorithmes de rendu les plus réalistes. Elle repose sur une modélisation physique du parcours de la lumière dans une scène 3D, et des interactions entre la lumière et les objets de la scène. On présente ensuite les routines fondamentales d'intersection rayon-objet utilisées dans le lancer de rayon, puis des modèles d'éclairement additionnels utilisables dans le lancer de rayon (transmission diffuse et spéculaire).
Quelques images :

Lumière ambiante

Réflexion difuse

Réflexion spéculaire

Textures

Lancer de rayons
Pour plus d'informations sur les TP, télécharger un exécutable, etc... voir la page sur mon livre d'infographie

2) Mathématiques pour la synthèse d'images

On étudie en détail la notion de courbe paramétrée. On introduit ensuite les courbes hermitiennes, et courbes de Bézier cubiques. On définit ensuite les courbes de Bézier d'ordre n par l'algorithme de Casteljau. On voit ensuite comment exprimer les courbes de Bézier dans la base des polynômes de Bernstein.

On définit ensuite les courbes B-splines d'ordre k à l'aide des fonctions N_i,k de la base des B-splines, puis on voit comment calculer des points sur ces courbes par l'algorithme de Boor. On voit enfin l'expression matricielle des courbes B-splines cubiques uniformes non rationnelles. On vois les courbes beta-splines, puis les courbes B-splines non uniformes non rationnelle (NURBS).

Après l'étude théorique de la notion de surface paramétrée, on introduit les surfaces de Bézier par la base des polynômes de Bernstein. Constatant qu'il s'agit d'un produit tensoriel, on interprète ces surfaces comme des réseaux de courbes de Bézier. On en déduit une expression matricielle des surfaces de Bézier dans le cas bicubique.

On définit les surfaces B-splines comme produit tensoriel à partir des fonctions de la base des B-splines. A nouveau, on interprète ces surfaces comme des réseaux de courbes B-splines. On étudie l'expression matricielle des surfaces B-splines bicubiques, puis on voit comment construire des surfaces fermées : surfaces cylindriques, toriques et sphériques.

On voit rapidement quelques outils pour modéliser des surfaces : déformation par déplacement de points de contrôle, lissage, augmentation du nombre de points de contrôle.

Exemple de surface composée de trois B-spline bicubique.

La synthèse d'images consiste, en toute généralité, à générer des images en utilisant des ordinateurs. Cela va des primitives graphiques de base (tels que tracer une droite sur un écran d'ordinateur), au calcul d'images très complexes (style Star Wars, la menace fantôme). Dans ce dernier cas, les limites au réalisme peuvent venir des imperfections de la modélisation de la réalité, ou encore du manque de puissance de calcul.
En ce qui concerne la modélisation de la réalité, ce cours est clairement orienté vers le 3D, ce qui correspond aux techniques les plus efficaces pour obtenir des images réalistes. En ce qui concerne la consommation de ressources matérielles, nous nous sommes efforcé d'indiquer, lorsque c'était possible, des pistes pour optimiser un peu les algorithmes.