Tampons d'image sur le GPU: types, nature et caractéristiques

Tampons d'image sur le GPU

Vous êtes-vous déjà demandé où sont stockées les images que vous voyez sur l'écran de votre PC, console ou appareils PostPC? Eh bien, dans les tampons d'image, mais quelle est leur nature et en quoi consiste-t-elle? Comment cela affecte-t-il les performances de nos PC, quelles formes de rendu d'une scène existent et quelles sont leurs différences?

A GPU génère une énorme quantité d'informations par seconde, sous forme d'images multiples qui passent rapidement sur notre rétine depuis la télévision, la taille de ces images et les informations qui sont stockées et traitées sont énormes. Les tampons d'image en raison du stockage dans la VRAM sont l'une des raisons pour lesquelles une mémoire à bande passante élevée est requise.

Qu'est-ce que le tampon d'image?

Búferes de Imagen

Le tampon d'image fait partie de la VRAM où les informations de chaque pixel sur l'écran de la trame suivante sont stockées, ce tampon est stocké dans la VRAM et est généré par le GPU toutes les x millisecondes.

Les GPU actuels fonctionnent avec au moins deux tampons d'image, dans le premier, le GPU écrit l'image suivante qui sera vue à l'écran, dans le second est l'image précédente déjà générée, qui est envoyée à l'écran.

Búferes de Imagen

Le tampon arrière ou tampon arrière est appelé celui qui est généré par le GPU et le tampon avant ou tampon avant est celui qui est lu par le pilote d'affichage et envoyé à la sortie vidéo. Alors que le tampon avant stocke pour chaque pixel la valeur des composants rouge, vert et bleu, dans le tampon arrière, il peut stocker un quatrième composant, alpha, qui stocke la valeur de transparence ou de semi-transparence d'un pixel.

Quel est le pilote d'affichage?

Le pilote d'affichage est un matériel présent dans le GPU, il se charge de lire le buffer d'image dans la VRAM et de convertir les données en un signal que la sortie vidéo, quel qu'en soit le type, peut comprendre.

Dans des systèmes comme NVIDIA G-SYNC, AMD FreeSync / Adaptive Sync, etc., le contrôleur d'affichage envoie non seulement des données au moniteur ou au téléviseur, mais contrôle également le début et la fin de chaque image.

Tampons d'image et rendu 3D traditionnel

Bien que nos écrans soient en 2D, depuis plus de vingt ans des scènes 3D y sont rendues en temps réel. Pour ce faire, il est nécessaire de diviser le back buffer en deux buffers différenciés:

  • Tampon de couleur: où la valeur des composants couleur et alpha de chaque pixel est notée.
  • Tampon de profondeur: où pointe la valeur de profondeur de chaque pixel.

Lors du rendu d'une scène 3D, nous pouvons constater que plusieurs pixels ont des valeurs différentes dans le tampon de profondeur mais sont au même endroit dans les deux autres dimensions, c'est là que ces pixels supplémentaires doivent être supprimés car ils ne sont pas visibles par le spectateur, ce le rejet se fait en comparant la position de chaque pixel dans le tampon de profondeur, en supprimant avec eux ceux les plus éloignés de la caméra.

Le tampon de profondeur

Tampons d'image Z-Buffer

Le tampon de profondeur ou mieux connu sous le nom de Z-Buffer stocke la distance de chaque pixel d'une scène 3D par rapport au point de vue ou à la caméra, cela peut être généré dans l'un de ces deux moments.

  • Après l'étape de raster et avant l'étape de texturation.
  • Après l'étape de texturation.

L'étape la plus lourde en calcul étant celle du Pixel / Fragment Shader, le fait de générer le Z-Buffer juste après la texturation de la scène implique de calculer la valeur de couleur et donc le Pixel ou Fragment Shader de centaines de milliers voire de millions de pixels non visibles .

Traçage de rayons Transparencias

La contrepartie de le faire avant la texturation est qu'en n'ayant pas les valeurs de couleur et de transparence, canal alpha, nous pouvons constater qu'un pixel après un autre transparent est éliminé au préalable, le rendant invisible dans la scène finale.

Pour éviter cela, les développeurs rendent généralement la scène en deux parties, la première ne rend pas les objets derrière un objet transparent ou semi-transparent, tandis que la seconde ne rend que ces objets.

Mise en mémoire tampon d'image et rendu paresseux

L'une des nouveautés qui ont été observées à la fin des années 2000 lorsque le rendu des graphiques était le rendu différé ou le rendu différé, qui consistait à rendre d'abord la scène générant une série de tampons supplémentaires appelés G-Buffer, puis dans une étape suivante à calculer l'éclairage du scène.

Le fait d'avoir besoin de plusieurs tampons d'image multiplie les demandes en mémoire et nécessite donc une plus grande quantité de mémoire pour le stockage, ainsi qu'un taux de remplissage et donc une bande passante plus élevée.

de multiples luc

Mais, le rendu paresseux a été fait pour corriger l'un des problèmes de performances de la rastérisation classique dans laquelle chaque changement de valeur d'un pixel, qu'il soit dû à la luminance ou à la chrominance, implique une réécriture dans le tampon d'image, ce qui se traduit par une énorme quantité de données à transmettre dans la VRAM

Grâce au rendu paresseux, le coût du nombre de lumières dans la scène passe d'exponentiel à logarithmique, réduisant ainsi le coût de calcul lors du rendu de scènes avec plusieurs sources de lumière.

Tampons d'image comme shadow map

Mapas Sombras Z-Buffer

La pixellisation n'étant pas très efficace pour calculer l'éclairage indirect, il faut trouver des astuces pour y générer des shadow maps.

La méthode la plus simple consiste à rendre la scène en prenant la source de lumière ou d'ombre comme s'il s'agissait de la caméra, mais au lieu de rendre une image complète, seul le tampon de profondeur est généré, qui sera utilisé plus tard comme carte d'ombre.

Ce système disparaîtra dans les années à venir en raison de la montée en puissance du Ray Tracing, qui permet de créer des ombres en temps réel de manière beaucoup plus précise, nécessitant moins de puissance de calcul et sans avoir besoin de générer une énorme carte d'ombre en VRAM.