« Les cartes graphiques/Les architectures de type tiled rendering » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 21 :
Mais ces techniques peuvent causer un rendu anormal dans certaines conditions. Ces conditions surviennent quand la coordonnée de profondeur ou de transparence d'un pixel peut être modifiée après l'étape de rastérisation, typiquement dans les pixels shaders. Il est rare que les shaders bidouillent la profondeur ou la transparence d'un pixel, mais cela peut arriver. Il est aussi possible qu'ils altèrent le z-buffer, mais cela est encore plus rare. Autant dire qu'utiliser des techniques d'''élimination précoce''' peut donner un gain en performance massif, mais que les cartes graphiques doivent cependant se comporter d'une manière assez conservative malgré tout. Pour éliminer tout problème, on doit recourir à des solutions logicielles. La plus simple est de laisser le choix aux drivers de la carte graphique. Ils analysent les shaders et décident si le test de profondeur précoce peut être effectué ou non. De nos jours, les APIs graphiques comme DirectX et OpenGl permettent de marquer certains ''shaders'' comme étant compatibles ou incompatibles avec l'élimination précoce'. C'est possible depuis DirectX 11.
 
Il existe plusieurs techniques d'élimination précoce', qui sont présentes depuis belle lurette dans nos cartes graphiques. Celles-ciLa peuventplus êtresimple classéeseffectue enle même calcul que dans les ROP. Les circuits de gestion de la profondeur sont deuxainsi catégoriesdupliqués : un exemplaire est dans le zmaxROP, etl'autre leen zmin.sortie Ilde estl'étape parfaitementde possiblerastérisation. Le choix d'utiliser l'élimination précoce est laissé au driver ou à l'API 3D par le zmaxbiais conjointementdes aveccommandes. La carte graphique est configurée par le zmin,processeur cede quicommande donnede desmanière à utiliser l'un ou l'autre circuit suivant les ''shader'' techniquesà hybridesexécuter.
 
===Z-Max et Z-min===
 
Les deux techniques z-max et z-min découpent l'écran en tiles. Le Z-max consiste à vérifier si la tile à rendre est situé derrière des tiles déjà rendues pour la masquer cas échéant. Pour cela, il suffit de savoir quelle est la tile la plus profonde déjà rendue. Précisémment, il suffit de conserver la profondeur de cette tile et de faire les vérifications de profondeur. Le zmax consiste donc à vérifier si le triangle à rendre est situé derrière le pixel le plus profond de la tile. Ces techniques ont un gros défaut : il faut calculer la valeur maximale des pixels de la tile, ce qui demande de comparer les profondeurs de tous les pixels. Ce genre de chose s'effectue dans les ROPs, et demande parfois de lire les profondeurs depuis la mémoire vidéo…
 
La première technique de Z-Max est celle du '''Hierarchical Z'''. Dans les grandes lignes, cette technique consiste à conserver dans une mémoire cache (rarement en mémoire vidéo) une copie basse-résolution du tampon de profondeur, qui mémorise la valeur maximale de la profondeur pour chaque tile. Cette copie basse-résolution est mise à jour par les ROPs, en même temps que le Z-Buffer. Il existe d'autres techniques qui permettent d'éliminer ce genre de problèmes, comme le Depth Filter ou le Mid-texturing.
 
===Z-Min===
 
Avec le Z-min, on utilise la profondeur maximale des sommets du triangle dans les calculs. Cette valeur est comparée avec la valeur de profondeur minimale dans la tile. Si la profondeur du pixel à rendre est plus petite, cela veut dire que le pixel n'est pas caché et qu'il n'y a pas besoin d'effectuer de test de profondeur dans les ROPs. Le calcul de la profondeur minimale de la tile est très simple : il suffit de mémoriser la plus petite valeur rencontrée et la mettre à jour à chaque rendu de pixel. Par besoin de lire toutes les profondeurs de la tile d'un seul coup, ou quoique ce soit d'autre, comme avec le zmax. Cette méthode est particulièrement adaptée aux rendus dans lesquels les recouvrements de triangles sont relativement rares. Il faut dire que cette méthode ne rejette pas beaucoup de pixels comparé à la technique du zmax. En contrepartie, elle n'utilise pas beaucoup de circuits comparé au zmax : c'est pour cela qu'elle est surtout utilisée dans les cartes graphiques pour mobiles.