Navigation

Tutoriel précédent : Render Output Target   Sommaire   Tutoriel suivant : Processeurs de shaders

II. Introduction

Si la détection des pixels masqués s'effectue dans les ROP, de nombreux pixels inutiles seront calculés par les pixels shaders, coloriés, éclairés, et j'en passe. Or, la profondeur d'un pixel est connue dès la fin de l'étape de rasterisation. On peut ainsi déterminer plus ou moins facilement si un fragment sera ou non calculé.

Du moins, c'est la théorie : les textures peuvent colorier le fragment en question avec des texels transparents, ce qui ruine un petit peu le beau raisonnement fait juste au-dessus. Mais les concepteurs de cartes graphiques sont malins et ont inventé des moyens pour détecter une partie des pixels qui ne seront pas visibles, avant que ceux-ci n'entrent dans l'unité de texture. On peut ainsi rejeter des pixels masqués par d'autres, via le tampon de profondeur, en tenant compte rapidement de la profondeur.

Ces techniques sont des techniques d'early-Z : Z-précoce. Il existe plusieurs techniques d'early-Z, qui sont présentes depuis belle lurette dans nos cartes graphiques. Celles-ci peuvent être classées en deux catégories : le zmax, et le zmin.

III. Hierarchical Z

La première technique est celle du hierarchical Z. Cette technique consiste à conserver une copie basse-résolution du tampon de profondeur, qui peut tenir dans une mémoire cache de la carte graphique, ou dans la mémoire vidéo.

Pour obtenir cette copie basse-résolution, le tampon de profondeur est découpé en rectangles de M * N pixels. Chacun de ces blocs se verra attribuer un pixel dans la copie basse-résolution du tampon de profondeur. Dans chacun de ces blocs, la carte graphique recherche le pixel qui a la profondeur la plus grande : c'est cette profondeur qui sera stockée dans le pixel correspondant dans la copie basse-résolution.

Pour éviter les problèmes avec la transparence, la carte graphique doit déterminer, pour chaque bloc, s'il contient un pixel transparent.

Navigation

Tutoriel précédent : Render Output Target   Sommaire   Tutoriel suivant : Processeurs de shaders