« Les cartes graphiques/Les cartes accélératrices 3D » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
m typo
Ligne 52 :
==Le pipeline graphique==
 
LeLes techniques de rendu 3D sont nombreuses, mais on peut les classer en deux grands types : le ''lancer de rayons'' et la ''rasterization''. Sans décrire les deux techniques, sachez cependant que le lancer de rayon n'est pas beaucoup utilisé pour les jeux vidéos. Il est surtout utilisé dans la production de films d'animation, d'effets spéciaux, ou d'autres rendu spéciaux. La raison est qu'il demande beaucoup de puissance de calcul, ce qui le rend peu adapté aux jeux vidéos. De plus, le matériel pour accélérer le lancer de rayon n'est pas très efficace et n'a pas pris commercialement. Ce qui explique que depuis un bon moment, les jeux vidéos utilisent la ''rasterization''. Celle-ci calcule une scène 3D intégralement, avant de faire des transformations pour n'afficher que ce qu'il faut à l'écran.
 
Il existe deux sous-types de rasterization : le rendu en mode immédiat, et le rendu en ''tiles''. La plupart des cartes graphiques des ordinateurs de bureau ou des ordinateurs portables utilisent la première méthode. Le rendu en tiles est surtout utilisé sur les équipements mobiles ou embarqués, qui fonctionnent à basse performance et à basse consommation. Une des raisons est un avantage dy rendu en tile pour le rendu en 2D, comparé aux architectures en mode immédiat. En général, les cartes graphiques utilisant le rendu en tiles consomment moins d'énergie et sont plus rapides que leur équivalent en mode immédiat pour le rendu 2D, ce qui en fait un avantage certain pour les appareils mobiles.
Ligne 90 :
==L'architecture d'une carte 3D en mode immédiat==
 
Avant l'invention des cartes graphiques, toutes ces étapes du pipeline graphique étaient réalisées par le processeur : il calculait l'image à afficher, et l’envoyait à une carte d'affichage 2D. Au fil du temps, de nombreux circuits furent ajoutés, afin de déporter un maximum de calculs vers la carte vidéo. Les circuits d'une carte graphique varie grandement selon son degré de sophistication. Les premières cartes graphiques ne faisaient pas grand chose et le processeur ne leur déléguait que peu de calculs. Mais avec l'évolution des technologies, de plus en plus de calculs de rendu ont été délégués à la carte graphique. Cela s'en ressent sur l'organisation des circuits des cartes graphiques. Si certains circuits sont toujours présents sur toutes les cartes graphiques, d'autres ont étésété ajoutés progressivement, au fil des années.
 
[[File:Division of labor cpu and gpu.svg|centre|vignette|upright=2.0|Répartition du travail entre processeur et GPU, sur les cartes graphiques récentes. On voit que le GPU s'occupe des traitements liés au moteur graphique, tandis que les autres traitements (son, physique) sont pris en charge par le processeur.]]
 
Toute carte graphique contient obligatoirement de la mémoire vidéo, des circuits de communication avec le bus, des circuits d’interfaçage avec l'écran, et d'autres circuits. A cela, il faut ajouter les circuits pour le rendu 3D proprement dit. Ces derniers sont regroupés dans un ensemble hétérogène de circuits aux fonctions fortsfort différentes. Il est composé de circuits non-programmables (dits fixes) et de circuits programmables. Conceptuellement, on sépare les circuits fixes et programmables dans deux sous-pipelines séparés, ce qui permet de faire la distinction entre pipeline programmable qui regroupe les circuits programmables et le pipeline fixe pour le reste. Mais cette distinction est purement conceptuelle et ne correspond pas vraiment à la manière dont les circuits sont organisés réellement. Le pipeline graphique est secondé par des circuits qui s'occupent de lire/écrire des textures et vertices depuis la mémoire vidéo. Ces deux circuits portent le nom d'unité de texture et d'''input assembler''.
 
[[File:Architecture de base d'une carte 3D - 1.png|centre|vignette|upright=2.0|Architecture de base d'une carte 3D - 1]]
Ligne 108 :
===Les circuits du pipeline fixe===
 
Toute carte graphique contient des circuits, aussi appelés unités, qui prennent en charge une étape du pipeline graphique. Entre les différentes unités, on trouve souvent des mémoires pour mettre en attente les vertices ou les pixels, au cas où une unité est trop occupée. Pour plus d'efficacité, ces cartes graphiques possédaient parfois plusieurs unités de traitement des vertices et des pixels, ou plusieurs ROP. Dans ce cas, ces unités multiples sont précédées par un circuit qui se charge de répartir les vertex ou pixels sur chaque unitésunité. Généralement, ces unités sont alimentées en vertex/pixels les unes après les autres (principe du round-robin).
 
ToutTous les traitements que la carte graphique doit effectuer, qu'il s'agisse de rendu 2D, de calculs 2D, du décodage matérielle d'un flux vidéo, ou de calculs généralistes, sont envoyés par le pilote de la carte graphique, sous la forme de commandes. L'envoi des données à la carte graphique ne se fait pas immédiatement : il arrive que la carte graphique n'ait pas fini de traiter les données de l'envoi précédent. Il faut alors faire patienter les données tant que la carte graphique est occupée. Les pilotes de la carte graphique vont les mettre en attente dans une file (une zone de mémoire dans laquelle on stocke des données dans l'ordre d'ajout) : le '''tampon de commandes'''. Ensuite, ces commandes sont interprétées par un circuit spécialisé : le '''processeur de commandes'''. Celui-ci est chargé de piloter les circuits de la carte graphique.
 
Les toutes premières cartes graphiques contenaient simplement des circuits pour gérer les textures, en plus de la mémoire RAM vidéo. Seules l'étape de texturing, quelques effets graphiques (brouillard) et l'étape d'enregistrement des pixels en mémoire étaient prises en charge par la carte graphique. Par la suite, ces cartes s’améliorèrent en ajoutant plusieurs circuits de gestion des textures, pour colorier plusieurs pixels à la fois. Cela permettait aussi d'utiliser plusieurs textures pour colorier un seul pixel : c'est ce qu'on appelle du multitexturing. Les cartes graphiques construites sur cette architecture sont très anciennes. On parle des cartes graphiques ATI rage, 3DFX Voodoo, Nvidia TNT, etc.
Ligne 116 :
[[File:Architecture de base d'une carte 3D - 2.png|centre|vignette|upright=1.5|Carte 3D sans rasterization matérielle.]]
 
Les cartes suivantes ajoutèrent une gestion des étapes de rasterization directement en matériel. Les cartes ATI rage 2, les Invention de chez Rendition, et d'autres cartes graphiques supportaient ces étapes en hardware. De nos jours, ce genre d'architecture est communecommun chez certaines cartes graphiques intégrées dans les processeurs ou les cartes mères.
 
[[File:Architecture de base d'une carte 3D - 3.png|centre|vignette|upright=1.5|Carte 3D avec gestion de la géométrie.]]
Ligne 132 :
[[File:Architecture de base d'une carte 3D - 5.png|centre|vignette|upright=1.5|Carte 3D avec pixels et vertex shaders non-unifiés.]]
 
Depuis DirectX 10, ce n'est plus le cas : le jeu d'instructions a été unifié entre les ''vertex shaders'' et les ''pixels shaders'', ce qui fait qu'il n'y a plus de distinction entre processeurs de ''vertex shaders'' et de ''pixels shaders'', chaque processeur pouvant traiter indifféremment l'un ou l'autre. Cela a un avantage considérable, car tous les jeux vidéo n'ont pas les mêmes besoins. Certains vont avoir une géométrie très développéesdéveloppée mais peu de besoin en termes de textures ou d'effets de ''post-processing''. Ceux là gagnent à avoir beaucoup d'unités de gestion de la géométrie et peu d'unités de traitement des pixels. A l'inverse, d'autres jeux vidéos ont besoin de beaucoup de puissance de calcul pour traiter les pixels, mais arrivent à économiser énormément sur la géométrie. L'usage de ''shaders'' unifiés permet d'adapter la répartition entre ''vertex shaders'' et ''pixels shaders'' suivant les besoins de l'application, là où la séparation entre unités de vertex et de pixel ne le permettait pas.
 
[[File:Architecture de base d'une carte 3D - 6.png|centre|vignette|upright=1.5|Carte 3D avec ''pixels'' et ''vertex shaders'' unfifiés.]]