Le Z-Buffer

 

INTRODUCTION

PRINCIPE

IMPLANTATION

ALGORITHME

EXEMPLE

IMPLANTATION PRATIQUE

PERFORMANCES

CONCLUSION

WB01624_.gif (281 octets) RETOUR

Introduction

L'algorithme du Z-Buffer est un algorithme d'élimination des parties cachées.
-> Lors de la visualisation d'une scène, cet algorithme supprime l'affichage de tout objet ou morceau d'objet masqué par un autre objet ou par lui même.

Principe

Le calcul de l’image est effectué séquentiellement en traitant les objets extraits de la scène les uns à la suite des autres pour en extraire les pixels qui les représentent de manière à les comparer aux autres pixels déjà calculés et n'afficher pour chaque pixel de l'image que la facette la moins profonde (devant vis à vis de l'observateur).

-> Il n'y a pas de tri des objets à effectuer, mais un calcul de maximum pour chaque pixel vis à vis de l'ensemble des objets présents en ce pixel.

Implantation

On définit deux zones mémoire :

  • un tampon couleur destiné à contenir la couleur de chacun des pixels de l'image (initialisée à la couleur de fond souhaitée) et donc l'image en fin d'exécution,

  • un tampon profondeur destiné à contenir la profondeur écran maximum de chacun des pixels de l'image (initialisée à -¥, utilisée comme valeur courante de comparaison en cours d'exécution).

On décompose chaque surface s à afficher en l'ensemble des pixels de coordonnées (x,y) qui la composeraient si elle était affichée seule.

Au cours de la décomposition, on calcule la profondeur écran z de chaque pixel de coordonnées (x,y).

Si cette coordonnée est plus grande que celle déjà présente dans le tampon altitude aux coordonnées (x,y), la nouvelle profondeur devient z et la couleur du pixel (x,y) du tampon couleur est calculée en fonction de x, de y, des caractéristiques de la surface s, de sources lumineuses, ...

Algorithme

Initialiser le tableau PROF à -¥
Initialiser de tableau COUL
           à la couleur de fond
Pour chaque objet o à représenter
  Pour chaque pixel p=(x,y) de o
    Calculer la profondeur z de p=(x,y) ;
    Si z > PROF(x,y) alors
      PROF(x,y) = z ;
      COUL(x,y) = couleur(o,x,y) ;
    Finsi
  Finpour
Finpour

Les objets sont très fréquemment des facettes planes triangulaires.

Exemple

ZB01.gif (4477 octets)

2 facettes à afficher
au moyen d’un Z-Buffer

ZB02.gif (5127 octets)

ZB03.gif (5453 octets)

Pixélisation de chacune de ces facettes

ZB04.gif (5673 octets)

ZB05.gif (6835 octets)

Calcul d’altitude pour chacun des pixels
de chacune des deux facettes

ZB06.gif (8323 octets)

Affichage des pixels visibles
par comparaison des altitudes

ZB07.gif (6035 octets)

Autre possibilité suivant l'ordre
de traitement des facettes
(pixels d'altitudes égales)

ZB08.gif (4335 octets)

Le programme

ZB10.gif (5113 octets)

Le programme

ZB11.gif (5070 octets)

Le programme

Implantation pratique

On dispose de facettes triangulaires dont les sommets sont connus en coordonnées écran.

Problèmes:

  • Établir quels sont les pixels recouvrant chacune des facettes.

  • Calculer l'altitude de chacun de ces pixels.

Solution: Trouver les pixels sur les cotés droit et gauche de la facette traitée. Tracer la trame horizontale entre le couple de pixels de chaque ligne de pixels sur laquelle la facette apparaît.

Performances

Différentes unités de mesure de performance:

  • pixels/s,

  • segments/s,

  • polygones/s.

Sur PC, de quelques dizaines à quelques centaines de millions de pixels par seconde, de quelques dizaines de milliers à quelques millions de polygones par seconde (de 300 à 20000F).

En constante évolution.

Conclusion

Intérêt

  • Algorithme facilement implantable.

  • Algorithme pouvant être optimisé (utilisation exclusive d'entiers, utilisation de variantes de l'algorithme de Bresenham pour le tracé de segments).

  • Algorithme facilement implantable hard.

  • Algorithme facilement pipelinable et parallélisable.

  • Gestion simple des recoupements entre objets.

  • Exécution en un temps en o(n) du nombre de facettes -> bonne scalabilité.

Inconvénients

  • Les deux zones tampon peuvent avoir des tailles très importantes (plusieurs Mo dans le cas de grands écrans).

  • La décomposition de chaque surface élémentaire en pixels nécessite une puissance de calcul importante (de l'ordre de 50 Mips pour 100000 facettes/s) et une vitesse d'accès mémoire très élevée.
    Des techniques incrémentales (Bresenham) permettent toutefois d'optimiser les performances par l'utilisation de variables entières et d'opérations simples (additions et comparaisons).

  • Pas de gestion intrinsèque des réflexions et des transmissions.

  • Difficultés pour implanter la modélisation de phénomènes optiques complexes.

-> Algorithme standard pour l'obtention rapide d'images de qualité moyenne.

-> Application à la conception et fabrication assistée par ordinateur (station de travail graphique), à la réalité virtuelle et au jeu.