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. |