Y - Department of Information Systems

publicité
Graphique 3D et Ingenieurie
de l'animation 3D
Affichage
NGUYEN Thi Oanh
[email protected]
Bộ môn Hệ thống thông tin (is.hust.edu.vn)
Viện Công nghệ thông tin và truyền thông (soict.hust.edu.vn)
Trường Đại học Bách khoa Hà nội
Pipeline graphique (résumé)
Modeling
Transformations
Illumination
(Shading)
Viewing Transformation
(Perspective / Orthographic)
Clipping
Projection
(to Screen Space)
Scan Conversion
(Rasterization)
3D
 On a déjà vu cela (cours précédent)
 Passage des coordonnées objets (3D)
vers les coordonnées du monde (3D)
 Transformations (2D et) 3D
-
Translation
Rotation
Mise à l’échelle (homothétie)
…
Visibility / Display
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
2
Pipeline graphique (résumé)
Modeling
Transformations
Illumination
(Shading)
Viewing Transformation
(Perspective / Orthographic)
3D
 On verra cela au prochain cours
 Comment la lumière éclaire les objets
(3D) ?
Clipping
Projection
(to Screen Space)
Scan Conversion
(Rasterization)
Visibility / Display
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
3
Pipeline graphique (résumé)
Modeling
Transformations
Illumination
(Shading)
Viewing Transformation
(Perspective / Orthographic)
3D
 On a déjà vu cela (cours précédent)
 Passage des coordonnées du monde
(3D) vers les coordonnées de la caméra
(3D !)
- Projection orthographique ou parallèle
Clipping
Projection
(to Screen Space)
Scan Conversion
(Rasterization)
Visibility / Display
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
4
Pipeline graphique (résumé)
Modeling
Transformations
Illumination
(Shading)
Viewing Transformation
(Perspective / Orthographic)
3D
 On va voir cela aujourd’hui
 Les portions en dehors du volume de
vue (frustum) sont coupées
Clipping
Projection
(to Screen Space)
Scan Conversion
(Rasterization)
Visibility / Display
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
5
Pipeline graphique (résumé)
Modeling
Transformations
Illumination
(Shading)
Viewing Transformation
(Perspective / Orthographic)
Clipping
2D
 On a déjà vu cela (cours précédent)
 Passage des coordonnées caméra 3D
vers les coordonnées caméra 2D
- Etape qui se confond avec l’étape 2 –
transformation de visualisation
Projection
(to Screen Space)
Scan Conversion
(Rasterization)
Visibility / Display
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
6
Pipeline graphique (résumé)
Modeling
Transformations
Illumination
(Shading)
Viewing Transformation
(Perspective / Orthographic)
2D
 On va voir cela aujourd’hui
 Passage en pixels
 Affichage à l’écran
Clipping
Projection
(to Screen Space)
Scan Conversion
(Rasterization)
Visibility / Display
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
7
Rendu polygonal
8
Représentation des objets 3D
 Comment représenter des objets 3D en mémoire pour
ensuite les afficher sur l'écran ?
- Affichage d'objets 3D complexes
- Besoin d'une méthode rapide
• surtout pour l'animation temps réel
 Problèmes :
- On veut conserver la notion d'orientation des surfaces
• Pour l'éclairage, la texture, …
 Solution :
- Découpage des surfaces 3D en polygones (triangles)
• Exemples de polygones (composés de points et de lignes droites
- pas de courbes) :
9
Découpage en polygones
 Tous les objets, même complexes, se découpent en
polygones
10
Erreur d'approximation polygonale
 Une erreur existe pour l'approximation d'une surface
courbe
 Cependant, afficher (3D) une surface plane est
beaucoup plus rapide qu'afficher une surface courbe
- Rendu (i.e. calcul de l'apparence) plus rapide
- Calcul d'ombre, d'éclairage et de texture beaucoup plus rapide
11
Rendu graphique des polygones
 Chaque polygone possède une orientation qui permet de
calculer son éclairage / ombrage, texture, …
- Un calcul par polygone plutôt qu'un calcul par point (plus rapide)
12
Polygone le plus facile : triangle
 Souvent (pas toujours), on divise une surface en triangles
- Plus petit polygone (3 points ou 3 droites)
- Toujours convexe : simplifie le découpage
- On peut diviser toutes les surfaces en triangles sans difficulté
13
Projection 3D des triangles
 On projette facilement chaque triangle 3D sur l'écran 2D
 On conserve l'information sur
- Les points (3D) des extrémités OU les côtés (arêtes)
- L'orientation du triangle en 3D (vecteur normal)
14
Vecteur normal d'une surface (rappel 1)
 Le vecteur normal d'une surface est perpendiculaire à la surface
 Il est représenté sous la forme d'un vecteur 3D [Nx, Ny, Nz]T
 C'est le calcul du vecteur normal qui est lent dans l'affichage, d'où le
découpage d'une surface courbe en polygones plats (un seul vecteur
normal à calculer)
 Ce vecteur normal est utilisé dans beaucoup de calculs d'apparence du
polygone (couleur, luminosité, ombre, texture)
15
Vecteur normal d'une surface (rappel 2)
 Pour calculer le vecteur normal, on a besoin de 3 points (X,Y,Z) sur la
surface (P1, P2, P3)
 On calcule 2 vecteurs parallèle à la surface (voir page précédente)
-
E1 = P3 - P2
E2 = P2 - P1
• E1X = P3X - P2X
• E1Y = P3Y - P2Y
• E1Z = P3Z - P2Z
 Le vecteur normal est le produit vectoriel entre les 2 vecteurs
-
N = E1 x E2
• NX = E1YE2Z - E1ZE2Y
Attention à l'ordre des termes et aux signes !
Produit non-commutatif !
• NY = E1ZE2X - E1XE2Z
• NZ = E1XE2Y - E1YE2X
16
Vecteur normal d'une surface (rappel 3)
 Représentation matricielle du produit vectoriel (en anglais cross
product) :
ou encore (équivalent)
Note : le produit vectoriel se note par ^ ou par x selon les auteurs.
17
Produit vectoriel
 Le résultat d'un produit vectoriel est toujours orthogonal
aux deux vecteurs de base
 Le produit vectoriel est non-commutatif. En cas d'inversion
des termes, le produit sera l'inverse
 Exemple avec les axes cartésiens :
- Soit les vecteurs du système d'axes cartésiens définit comme suit :
- X (1,0,0), Y (0,1,0) et Z (0,0,1)
• X x Y = Z, mais Y x X = - Z
• Y x Z = X, mais Z x Y = - X
• Z x X = Y, mais X x Z = - Y
18
Nombre de polygones nécessaires
 Pour un objet complexe, il n'est pas rare d'avoir un nombre
de polygones supérieur à 105 (100 000) et même beaucoup
plus :
- Plus de polygones = meilleur rendu (image plus réaliste)
- Plus de polygones = temps de calcul élevé
- Différentes techniques existent pour améliorer chaque polygone
19
Exemples de modèles polygonaux
700,000
82 millions
13 millions
372,422,615
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
20
Niveaux de détails et polygones
Plus on est loin d’un objet,
moins on voit de détails
 Gain de géométrie
69,451 polys
2,502 polys
251 polys
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
76 polys
21
Simplification selon le niveau de détails
 Calculer des niveaux de détail pour chaque objet de la
scène : pré-calcul
 Lors du déplacement dans la scène choisir à chaque instant
le bon niveau de détail et l’afficher
19.000 faces
1.000
faces
100 faces
40 faces
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
22
Affichage des polygones
 Plusieurs algorithmes existent
- pour transformer une surface en polygones
- pour afficher rapidement des polygones
 Le découpage polygonal est très utilisé pour l'animation en
temps réel (par exemple, les jeux)
- Pour les images statiques ou l'animation pré-calculée (non temps
réel), nous verrons d'autres méthodes (prochains cours)
 Plusieurs algorithmes sur les polygones sont déjà
implémentés dans les cartes graphiques et autre matériel
spécialisé
23
Objets visibles dans
le champ de vision
(clipping)
24
Parties visibles des objets
Modeling
Transformations
Illumination
(Shading)
 Enlever les objets en dehors du
volume de vue (frustum)
Viewing Transformation
(Perspective / Orthographic)
Clipping
Projection
(to Screen Space)
Scan Conversion
(Rasterization)
Visibility / Display
Source : Hector Briceno, Synthèse d'images, Université de Lyon 1 (France)
25
Objets visibles dans le champ de vision
 View frustum culling : élimination des objets hors du cone de
vue
- Effectué par l’application (ou la librairie, ex performer)
 Calcul naïf : pour chaque primitive, calculer si elle est dans le
champ de vision
- un test par polygone !!!
 Bounding box : on entoure chaque objet (composé de nombreux
polygones) d’une boîte englobante. Si la boite est hors du volume
de vue, alors son contenu peut être éliminé.
 Accélération : hiérarchie de boites englobantes. Si une boite est
hors du volume de vue alors toutes ses filles aussi.
- Problème de la construction de la hiérarchie
Source : Hector Briceno, Synthèse d'images, Université de Lyon 1 (France)
26
Découpage des bords
 Problème : ne dessiner que la partie visible sur l'image
- Efficacité
- Temps d'exécution
 Aussi appelé clipping ou clippage selon les textes
27
Algorithme de Cohen-Sutherland
 Découpage en 9 zones codées chacunes sur 4 bits
T
B
1001
1000
1010
0001
0000
0010
0101
0100
0110
Ecran
L
T:
B:
R:
L:
signe( y max  y )
signe( y  y min )
signe( x max  x )
signe( x  x min )
R
 Code : TopBottomRightLeft
- avec 0=intérieur 1=extérieur
- On compare les codes des extrémités du segment (ET
logique)
Source : Caroline Rougier, IFT2730 - Traitement d'images, Université de Montréal (Canada).
28
Algorithme de Cohen-Sutherland
T
B
1001
1000
1010
0001
0000
0010
0101
0100
0110
L
R
Si T 1 B 1 R 1 L1 =0000  et T 2 B 2 R2 L 2 =0000 
⇒ Le segment est à l'intérieur
⇒ Acceptation triviale
Source : Caroline Rougier, IFT2730 - Traitement d'images, Université de Montréal (Canada).
29
Algorithme de Cohen-Sutherland
T
B
1001
1000
1010
0001
0000
0010
0101
0100
0110
L
R
Si T 1 B 1 R1 L 1 & T 2 B 2 R 2 L 2 ≠0000
⇒ Le segment est à l'extérieur⇒ Rejet trivial
E x : T 1 B1 R 1 L 1 =1001& T 2 B 2 R 2 L 2 =1010  =1000 ≠0000
Source : Caroline Rougier, IFT2730 - Traitement d'images, Université de Montréal (Canada).
30
Algorithme de Cohen-Sutherland
T
B
1001
1000
1010
0001
0000
0010
0101
0100
0110
L
R
Moins trivial : il va falloir diviser le segment en deux
et tester chaque segment récursivement
Source : Caroline Rougier, IFT2730 - Traitement d'images, Université de Montréal (Canada).
31
Algorithme de Cohen-Sutherland
 Si les deux sommets sont à l’intérieur
 Acceptation triviale
 Si les deux sommets respectent la condition :
x1, 2  xmin ou x1, 2  xmax ou y1, 2  ymin ou y1, 2  ymax
 Rejet trivial
 Sinon, divise en deux segments avec la ligne de support
d’un côté de la fenêtre et teste chaque segment
récursivement
Source : Caroline Rougier, IFT2730 - Traitement d'images, Université de Montréal (Canada).
32
Algorithme de Cohen-Sutherland
 Cas non trivial : Résultat donne T,B,R et/ou L = 1
- Intersecte le segment avec le côté de ce bit
- Rejette la partie extérieure du segment
- Remplace ce sommet par l’intersection
- Re-teste récursivement avec le segment tronqué
 Remarques :
- Extension facile en 3D (boîte)
- Algorithme de clippage de segments le plus utilisé
- Efficace en assembleur, surtout si beaucoup de cas triviaux
Source : Caroline Rougier, IFT2730 - Traitement d'images, Université de Montréal (Canada).
33
Calcul des points d'intersections
T
B
1001 1000 1010
0001 0000 0010
0101 0100 0110
L
R
Rappel:
y = mx+b ou x = (y-b)/m
avec b=y1-mx1
et m=y2-y1/x2-x1
Si T=1
Si B=1
Si R=1
Si L=1
x  x1 
Ymax  y1 
m
y  Ymax
x  x1 
Ymin  y1 
m
y  Ymin
y  y1  m  X max  x1 
x  X max
y  y1  m  X min  x1 
x  X min
Source : Caroline Rougier, IFT2730 - Traitement d'images, Université de Montréal (Canada).
34
Calcul des points d'intersections
Méthode dichotomique
 On coupe la ligne en deux parties égales et on vérifie laquelle des deux
moitiés est encore à cheval sur la frontière de la fenêtre
 On continue à découper les moitiés qui se retrouvent à cheval sur la
frontière jusqu'à ce que l'on ait coupé au bon endroit
 Méthode surtout implantée au niveau matériel.
Les divisions par deux sont effectuées à l'aide
d'un décalage des bits vers la droite (par ex:
100 => 10 ie 4 => 2)
 Pour un écran 1024*1024, on a au maximum 10
subdivisions (210 = 1024)
Source : Caroline Rougier, IFT2730 - Traitement d'images, Université de Montréal (Canada).
35
Exemple de segments candidats
Ymax
0001
0010
Ymi n
Cas maintenant
triviaux
0100
Xmi n
Xmax
T 1 B 1 R 1 L1 &T 2 B 2 R2 L 2 =0000
Source : Caroline Rougier, IFT2730 - Traitement d'images, Université de Montréal (Canada).
36
Découpage de polygone
Si on utilise un découpage de segment pour
chaque coté du polygone :
Mais si on utilise un algorithme de
remplissage du polygone après
découpage il nous faut joindre les
intersections ?
Source : Caroline Rougier, IFT2730 - Traitement d'images, Université de Montréal (Canada).
37
Conversion en pixels et
tracé des primitives 2D
(rasterization)
38
Conversion en pixels discrets
Modeling
Transformations
Illumination
(Shading)
Viewing Transformation
(Perspective / Orthographic)
Clipping
Projection
(to Screen Space)
Scan Conversion
(Rasterization)
 Découper chaque primitive (espace
continu) en pixel (espace discret)
 Affichage rapide et efficace des
primitives
- Opérations faites des millions de fois
- Privilégie les calculs en nombres entiers
- Très souvent implémentés en
hardware
 Interpoler les valeurs connues aux
sommets : couleur, profondeur, …
Visibility / Display
39
Primitives 2D
 Dans tous les cas il faut savoir afficher du 2D, ligne ou
polygone
- il faut savoir quels pixels allumer pour un objet
mathématique
- il faut savoir remplir un polygone
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
40
Tracé de droites
Quels pixels faut-il allumer pour tracer une droite ?
41
Comment tracer une droite ?
 Une droite est représentée par :
- deux points (x1,y1) et (x2,y2) qu'on suppose à l'intérieur de l'image
- une équation y = mx + b (1 multiplication + 1 addition par point)
 Méthodes brutes (naïve)
- Discrétisation de la primitive en n points
- Approximation au pixel le plus proche pour chacun des n points
 Peu efficace et peu précis
 Méthodes incrémentales
- La position du point suivant est choisi de façon à minimiser l’erreur
d’approximation.
 Méthode optimale pour le tracé de segments de droites
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
42
Algorithme de Bresenham (1965) (1)
 Algorithme simple, efficace et incrémental
 L'idée est de mesurer l'erreur à chaque itération (distance du
pixel à la droite) et de choisir la meilleure approximation
 Soit une pente < 45 ° (m < 1). Pour chaque valeur de x,
l'algorithme choisit entre le pixel à droite (dit "E"), ou le pixel en
haut à droite (dit "NE")
43
Algorithme de Bresenham (1965) (2)
 Premier octant :
- Une droite est définie par : y = mx +b
 On cherche le prochain pixel comme
celui qui minimise l’erreur
- e = (d2 – d1) / 2
 Au premier point (x0+1, y0+m)
- e1 = (d2 - d1) / 2 = - 0.5
 Ensuite l’erreur se propage :
- NE : e = e + m - 1
- E:e=e+m
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
44
Algorithme de Bresenham (1965) (3)
void Bresenham (x0, y0, x1, y1)
{
double m = y1 - y0 / x1 - x0 ;
double e = -0.5;
int y = y0;
// pente de la droite
// erreur incrémentale
// ligne initiale
for(int x = x0; x <= x1 ; x++) { // on parcours le long des x
AfficherPixel (x, y);
// on allume le pixel (x,y)
e=e +m;
if (e >= 0) {
y = y + 1;
e = e - 1;
}
// erreur pour le pixel suivant
// si l’erreur est trop élevée
// on change de ligne
// et on réajuste l’erreur de cette nouvelle ligne
}
}
45
Algorithme de Bresenham (1965) (4)
On généralise ensuite aux huit octants :
46
Tracé de primitives simples
 Mitchener a proposé un algorithme efficace pour tracer
des cercles
 Il existe ainsi plusieurs algorithmes adaptés au tracé de
figures géométriques simples (ellipse par exemple)
 On retrouve facilement sur Internet des fonctions déjà
écrites ou des librairies contenant ces fonctions
47
Remplissage de polygone (Scan line)
1. Remplissage par recherche des points
d'intersection d'une ligne horizontale
avec des contours (un nombre pair).
2. Une fois les points d'intersection
obtenus, remplissage selon une règle
de parité : incrémentation de la parité
à chaque traversée de frontière et
tracé si impair.
3. Gestion des conflits frontaliers : on
prend les points intérieurs au
polygone pour éviter les
chevauchements.
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
48
Est-ce qu'un point est à l'intérieur ?
 Comment savoir si un point est à l'intérieur ou non d'un
polygone ?
49
Test de la parité
 On trace une ligne droite vers l'extérieur et on compte le nombre
d'intersections avec le polygone.
- Nombre impair d'intersections : intérieur
- Nombre pair d'intersections : extérieur
5 intersections :
intérieur
4 intersections : extérieur
* Attention aux intersections avec les sommets
ou au parcours le long d'une arête.
50
Test de la parité : attention
 Attention
- aux intersections avec les sommets
- au parcours le long d'une arête.
 Différentes astuces permettent d'éviter ces problèmes
- selon les cas et les besoins
?
???
51
Remplissage de polygone (récursif)
void RemplirPolygone (int x, int y)
{
if ((x<0) || (x>=sizex)) return;
if ((y<0) || (y>=sizey)) return;
}
if (!Frontiere(x,y) && (Rempli(x,y))
{
Remplir (x,y);
RemplirPolygone (x-1,y);
RemplirPolygone (x+1,y);
RemplirPolygone (x,y-1);
RemplirPolygone (x,y+1);
}
Initialisation à partir d'un point que l'on sait à l'intérieur
52
Attention à la connexité !
 Pour le remplissage, comme pour les autres algos :
- Un contour est en connexité 8 (un pixel à 8 voisins)
- Une région est en connexité 4 (un pixel à 4 voisins)
 On peut choisir l'inverse, mais c'est moins pratique
Région : 4-connexes
Contour : 8-connexes
Région : 8-connexes, Contour : 4-connexes
53
Calcul de visibilité pour l’affichage
Elimination des parties cachées
54
Visibilité pour l’affichage
Modeling
Transformations
Illumination
(Shading)
Elimination des parties cachés
Viewing Transformation
(Perspective / Orthographic)
Clipping
Projection
(to Screen Space)
Scan Conversion
(Rasterization)
Visibility / Display
55
Rôle des lignes cachées
 Les lignes cachées dans l'image servent à donner l'illusion 3D
 Elles permettent de voir les objets devant ou derrière
56
Elimination des parties cachées
 Espace image contre espace objet
 Algorithmes « objet »
- Backface culling
- Algorithme du peintre (tri par la profondeur)
- BSP-trees
 Algorithmes « image »
- Warnock
- Z-buffer
- Balayage de lignes (Scan line)
57
Elimination des parties cachées (objet)
 Eliminer tous les polygones qui ne sont pas tournés vers
la caméra
58
Elimination des parties cachées (objet)
 Test de visibilité (backface culling)
- Pour chaque polygone, effectuer le produit scalaire entre le vecteur
normal au polygone et le vecteur de projection à l'écran
• Produit scalaire > 0 : polygone non-visible (caché)
• Produit scalaire < 0 : polygone visible (affiché)
59
Produit scalaire entre 2 vecteurs (rappel)
 Le produit scalaire (dot product) entre 2 vecteurs V1 et V2 :
- Produit Scalaire = V1XV2X + V1YV2Y + V1ZV2Z
- Note :
• Le résultat du produit scalaire est un nombre
• Le résultat du produit vectoriel est un vecteur
60
Test de visibilité (backface culling)
 Economise 50 % du temps de calcul
- En moyenne
 Faible coût par polygone
 Etape préliminaire pour les autres algorithmes
 Suffisant pour un seul objet convexe
 Doit être fait en 3D
- Calcul avec le vecteur normal de chaque polygone
61
Elimination des parties cachées
Une scène = un ensemble de primitives :
En général un ensemble de polygones (triangles)
Détermination des surfaces visibles :
équivalent au tri => O(n log
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
n)
62
Algorithme du peintre
 Analogie avec un peintre qui va
peindre d'abord le ciel, puis les
nuages et puis les oiseaux
 Affichage des objets en partant du
plus lointain et en allant vers le
plus proche
 Autre nom : Tri par la profondeur
(Depth-sort searching)
63
Algorithme du peintre : algorithme
 Algorithme :
- Trier les objets par profondeur
- Affichage des objets en partant du plus lointain et en allant
vers le plus proche
 Un polygone a une profondeur minimum et une
profondeur maximum
- Tri selon profondeur maximum
- Comparaison des polygones sur l'intervalle (minimummaximum)
- Problème si chevauchement des profondeurs
64
Algorithme du peintre : différents cas
A) Polygones disjoints en X,Y : aucun problème
Aucun problème
B) Un polygone est inclus dans l'autre
• comparer les profondeurs Z
Aucun problème
C) Les deux polygones s'intersectent partiellement
• faire plus de tests sur Z
Possibilités de problèmes !
65
Algorithme du peintre : problèmes
 Problèmes :
- Objets sur plusieurs profondeurs
- Objets entrelacés
 Solution :
- découpage en polygones plus petits
 Algorithme :
- Si 2 polygones avec profondeurs entrelacées (min Z et max Z)
• Si les deux polygones se superposent (en X,Y)
- Alors découper en plusieurs polygones plus petits
66
Peintre : pour ou contre
Pour ou contre ?
• Le plus intuitif des algorithmes
• Coût en mémoire :
– Affichage direct à l’écran : O(p)
– Il faut trier les polygones : O(nlogn)
• Temps de calcul :
– On affiche toute la scène
– Efficace surtout sur des petites scènes
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
67
Subdivision de l'espace en quadrants
Algorithme de Warnock
 Subdiviser l'image en quatre zones
carrées
 Si aucun polygone dans une zone
- Remplir la zone avec la couleur du fond
 Si un seul polygone dans la zone
- Remplir avec la couleur du fond
- Dessiner le polygone
 Si plusieurs polygones dans la zone
- Subdiviser la zone en quatre zones carrées
68
Warnock : exemple (1)
69
Warnock : exemple (2)
70
Warnock : exemple (3)
71
Warnock : exemple (4)
72
Warnock : exemple (5)
73
Warnock : exemple (6)
74
Warnock : pour ou contre
 Utilise la cohérence spatiale
 Plus efficace avec des grands polygones
 Coût mémoire parfois élevé
 Implémentation facile : appels récursifs à la même
fonction
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
75
Z-Buffer
 Un tableau, de la taille de l’écran
 On stocke la valeur maximale de z pour chaque pixel
- z est la direction de visée, exprime la distance à l’oeil
 Initialisation : tous les pixels à moins l’infini
 Projection de tous les polygones
- On met à jour les pixels de la projection du polygone
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
76
Z-buffer : algorithme
 Pour chaque polygone :
- Projeter le polygone sur le plan image
- Pour chaque pixel dans la projection du polygone
• Calculer la valeur de z pour ce pixel
• Si z est supérieur à la valeur courante de z max
- Changer z maximal
- Afficher le pixel à l’écran, de la couleur du polygone
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
77
Z-buffer (1)
-∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞
-∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞
-∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞
-∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞
-∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞
-∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞
-∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
78
Z-buffer (2)
-∞
-∞
1 -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞
1 1 1 -∞ -∞ -∞ -∞ -∞ -∞
-∞
-∞
-∞
2
2
3
2 2
2 2
3 3
-∞ 3 3 -∞
-∞ -∞ -∞ -∞
2 2 -∞ -∞ -∞ -∞
2 2 2 -∞ -∞ -∞
3 3 -∞ -∞ -∞ -∞
-∞ -∞ -∞ -∞ -∞ -∞
-∞ -∞ -∞ -∞ -∞ -∞
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
79
Z-buffer (3)
-∞
-∞
-∞
-∞
-∞
1 -∞ -∞ -∞ -∞
1 1 2 2 2
2 2 2 2 2
2 2 2 2 2
3 3 3 3 3
3 3 -∞ -∞ -∞
-∞ -∞ -∞ -∞
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
-∞
-∞ -∞ -∞ -∞
-∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞ -∞
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
80
Z-Buffer : pour ou contre
 Pour :
- Facile à implémenter, scan-line
- Travaille dans l’espace image
• Rapide
 Contre :
- Coût en mémoire
- Travaille dans l’espace image
• aliasing
• artefacts
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
81
Balayage de lignes (Scan Line)
 Le z-buffer doit visiter chaque pixel couvert par un objet, même
s’il est caché
 Le balayage de lignes utilise la cohérence le long d’une ligne
(scanline) pour ne calculer la visibilité qu’entre les polygones
 Extension du remplissage de polygone par balayage afin de
traiter plusieurs polygones à la fois. La profondeur n’est
calculée seulement que lorsque plus d’un polygones
s’entrecoupent.
82
Coûts comparés
Temps
Depth Sort
Peintre
600
Warnock
Scan Line
Z-Buffer
500
400
300
200
100
0
100
2500
60000
Nombre de polygones
Source : Antoine Bouthors, Synthèse d'images, ENSIMAG (Grenoble, France)
83
Choix de l’algorithme
 L’algorithme idéal dépend :
- De la complexité de la scène
- Du matériel disponible
- De ce qu’on veut faire en plus de l’affichage
 Z-Buffer en général :
- Fourni gratuitement dans la librairie graphique
- Pas de pré-traitement
- Quelques effets de bord si on le connaît mal
 Le balayage de lignes (scan line) pour les hackers :
- Quand on ne peut pas utiliser la carte graphique
- Faible coût mémoire
- Lié à la fonction d’affichage, peut être très efficace
Source : Hector Briceno, Synthèse d'images, Université de Lyon 1 (France)
84
Modification pour effet de transparence
 Au lieu de ne garder que le pixel le plus proche, on conserve tout
 Chaque objet à un indice de transparence
• (0 <= indice <= 1) 0 : transparent 1 : opaque
 Pour connaître la couleur d'un pixel, on fait une sommation pondérée
 Requiert beaucoup plus de mémoire (plusieurs données par pixel)
85
Téléchargement