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

Contenu supprimé Contenu ajouté
Ligne 37 :
 
Le 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''. Là encore, la plupart des cartes graphiques utilisent la première méthode.
 
===Le rendu en mode immédiat===
 
Avec le '''rendu en mode immédiat''', le calcul de l'image finale passe par une suite d'étapes consécutives, l'ensemble étant appelé le '''pipeline graphique'''. Le cas le plus simple ne demandant que trois étapes :
Ligne 45 ⟶ 47 :
Dans certains cas, des traitements supplémentaires sont ajoutés. Mais ces étapes rajoutées peuvent être vues comme des subdivisions des trois étapes précédentes. Par exemple, les cartes graphiques modernes supportent une étape de tesselation, qui permet de rajouter de la géométrie. Cela permet de déformer les objets ou d'augmenter leur réalisme. Cette étape est classiquement rangée dans le traitement de la géométrie. Tout cela pour dire que l'organisation en trois étapes est très pédagogique, en plus d'être terriblement efficace.
 
====Le traitement de la géométrie====
Le '''rendu en ''tiles''''' est différent sur deux points. Premièrement, l'écran est découpé en rectangles qui sont rendus séparément, là où le rendu en mode immédiat rend l'écran comme un tout qui est traité pixel par pixel. Les rectangles en question sont appelés des ''tiles'', d'où le nom donné à la méthode. Ensuite, le rendu n'est pas composé d'une suite d'étapes consécutives. Avec le rendu en mode immédiat, les calculs se font au fil de l'eau. La carte 3D calcule une partie de la géométrie puis envoie le résultat à l'étape de rasterisation, avant d'en traiter les pixels associés. Mais avec le rendu en ''tiles'', la géométrie est intégralement rendue avant que le traitement des pixels commence. Le résultat du calcul de la géométrie est mémorisé en mémoire vidéo, avant de démarrer la seconde étape de traitement des pixels.
 
La différence entre les deux est assez importante pour comprendre les avantages et inconvénients de chaque méthode. Le principal défaut du rendu en ''tiles'' est que le rendu se fait en deux passes, avec une mémorisation du résultat de la première passe en mémoire vidéo. Et cette mémorisation demande beaucoup de lectures et d'écritures : d'écritures pour mémoriser le résultat de la première passe, de lectures pour l'utiliser dans la seconde passe. La mémoire vidéo est donc beaucoup utilisée et doit avoir un débit suffisant. Ce qui est un désavantage pour les cartes graphiques à haute performance. L'usage de mémoires cache aggrave encore plus le désavantage pour les architectures à tile, le rendu en mode immédiat permettant une bonne utilisation des mémoires caches. Ce qui explique pourquoi les cartes graphiques des ordinateurs de bureau ou des ordinateurs portables sont toutes en rendu en mode immédiat. Mais les cartes graphiques des martophones ou d'autres équipements embarqués sont de type "rendu en ''tiles''".
 
===Le traitement de la géométrie===
 
La première étape place les objets au bon endroit dans la scène 3D. Lors de la modélisation d'un objet, celui-ci est encastré dans un cube : un sommet du cube possède la coordonnée (0, 0, 0), et les vertices de l'objet sont définies à partir de celui-ci. Pour placer l'objet dans la scène, il faut tenir compte de sa localisation, calculée par le moteur physique : si le moteur physique a décrété que l'objet est à l'endroit de coordonnées (50, 250, 500), toutes les coordonnées des vertices de l'objet doivent être modifiées. Pendant cette étape, l'objet peut subir une translation, une rotation, ou un gonflement/dégonflement (on peut augmenter ou diminuer sa taille). C'est la première étape de calcul : l'étape de '''transformation'''.
Ligne 57 ⟶ 55 :
Vient ensuite une phase de '''traitement de la géométrie''', où les vertices sont assemblées en triangles, points, ou lignes, voire en polygones. Ces formes géométriques de base sont ensuite traitées telles quelles par la carte graphique. Sur les cartes graphiques récentes, cette étape peut être gérée par le programmeur : il peut programmer les divers traitements à effectuer lui-même.
 
====La rasterization====
 
Vient ensuite la traduction des formes (triangles) rendues dans une scène 3D en un affichage à l'écran. Cette étape de rasterization va projeter l'image visible sur notre caméra. Et cela nécessite de faire quelques calculs. Tout d'abord, la scène 3D va devoir passer par une phase de '''clipping''' : les triangles qui ne sont pas visibles depuis la caméras sont oubliés. Ensuite, ils passent par une phase de '''culling''', qui élimine les pixels cachés par un objet géométrique. Enfin, chaque pixel de l'écran se voit attribuer un ou plusieurs triangle(s). Cela signifie que sur le pixel en question, c'est le triangle attribué au pixel qui s'affichera. C'est lors de cette phase de '''rasterisation''' que la perspective est gérée, en fonction de la position de la caméra.
 
====Le traitement des pixels et textures====
 
À la suite de cela, les textures sont appliquées sur la géométrie. La carte graphique sait à quel triangle correspond chaque pixel et peut donc colorier le pixel en question en fonction de la couleur de la texture appliquée sur la géométrie. C'est la phase de '''Texturing'''. Sur les cartes graphiques récentes, cette étape peut être gérée par le programmeur : il peut programmer les divers traitements à effectuer lui-même. En plus de cela, les pixels de l'écran peuvent subir des traitements divers et variés avant d'être enregistrés et affichés à l'écran. Un effet de brouillard peut être ajouté, des tests de visibilité sont effectués, l'antialiasing est ajouté, etc.
 
===Le rendu en ''tiles''===
 
Le '''rendu en ''tiles''''' est différent sur deux points. Premièrement, l'écran est découpé en rectangles qui sont rendus séparément, là où le rendu en mode immédiat rend l'écran comme un tout qui est traité pixel par pixel. Les rectangles en question sont appelés des ''tiles'', d'où le nom donné à la méthode. Ensuite, le rendu n'est pas composé d'une suite d'étapes consécutives. Avec le rendu en mode immédiat, les calculs se font au fil de l'eau. La carte 3D calcule une partie de la géométrie puis envoie le résultat à l'étape de rasterisation, avant d'en traiter les pixels associés. Mais avec le rendu en ''tiles'', la géométrie est intégralement rendue avant que le traitement des pixels commence. Le résultat du calcul de la géométrie est mémorisé en mémoire vidéo, avant de démarrer la seconde étape de traitement des pixels.
 
La différence entre les deux est assez importante pour comprendre les avantages et inconvénients de chaque méthode. Le principal défaut du rendu en ''tiles'' est que le rendu se fait en deux passes, avec une mémorisation du résultat de la première passe en mémoire vidéo. Et cette mémorisation demande beaucoup de lectures et d'écritures : d'écritures pour mémoriser le résultat de la première passe, de lectures pour l'utiliser dans la seconde passe. La mémoire vidéo est donc beaucoup utilisée et doit avoir un débit suffisant. Ce qui est un désavantage pour les cartes graphiques à haute performance. L'usage de mémoires cache aggrave encore plus le désavantage pour les architectures à tile, le rendu en mode immédiat permettant une bonne utilisation des mémoires caches. Ce qui explique pourquoi les cartes graphiques des ordinateurs de bureau ou des ordinateurs portables sont toutes en rendu en mode immédiat. Mais les cartes graphiques des martophones ou d'autres équipements embarqués sont de type "rendu en ''tiles''".
 
==L'architecture d'une carte 3D==