Moteur de géométrie dans les GPU de jeu : utilité et fonctionnement

Moteur de géométrie dans les GPU de jeu

Les graphiques en trois dimensions nous accompagnent depuis deux décennies et avec eux aussi les GPU chargés de les générer et de les envoyer à l'écran de nos moniteurs. Aujourd'hui, ce sont des pièces extrêmement complexes composées de divers éléments, certains nouveaux, d'autres à l'intérieur depuis des années. Celui que nous aborderons dans cet article est le moteur de géométrie.

Au fur et à mesure que les graphiques en temps réel progressent, les GPU font de même et avec eux, de nouveaux problèmes semblent être résolus ou les anciens sont amplifiés. Cela signifie que les anciennes solutions ne sont plus efficaces et que de nouvelles doivent être créées. La nouvelle génération de graphismes ne sera pas seulement basée sur le Ray Tracing, mais sur une augmentation considérable de la géométrie de la scène. C'est là qu'intervient le Geometry Engine, pièce essentielle pour s'améliorer GPU efficacité dans ce nouveau paradigme.

Un peu d'histoire pour dissiper la confusion

la

Historiquement, le moteur de géométrie ou le moteur de géométrie faisait référence au matériel chargé d'effectuer les processus de manipulation de la géométrie de la scène qui se produisent avant la rastérisation. C'est-à-dire avant que les triangles qui composent la scène tridimensionnelle n'aient été convertis en fragments de pixels.

Le premier moteur de géométrie a été conçu par Jim Clark au début des années 1980 et a marqué le début du légendaire Silicon Graphics. Grâce à cette innovation, il a été possible de déplacer la manipulation de scènes 3D des mini-ordinateurs vers des postes de travail qui étaient une fraction de la taille et du coût des premiers.

Ce n'est qu'à la fin des années 90 que les jeux 3D ont commencé à devenir populaires, mais les premières cartes 3D n'avaient pas de moteur de géométrie et s'appuyaient sur Processeur pouvoir de calculer la géométrie de la scène. Il a fallu attendre le lancement sur PC du premier NVIDIA GeForce que le GE a été entièrement intégré dans une puce graphique. Être surnommé T&L par NVIDIA marketing.

Au fil des années et de l'arrivée des Shaders, le Geometry Engine en tant que matériel a été complètement remplacé et maintenant ce sont les Shader Units qui s'en chargent. Ce changement s'est produit à partir de DirectX 10, lorsque le moteur de géométrie en tant que matériel a disparu de NVIDIA et AMD Les GPU, bien que récemment son importance ait été prise par un nouveau type d'unité inclus dans les architectures les plus avancées et c'est ce dont nous parlerons dans cet article.

L'assembleur primitif

Sommets Primitivas Fragmentos

Les éléments d'une scène de jeu en trois dimensions sont rendus à l'aide de triangles pour composer les différents éléments de la scène, qui sont constitués de sommets. Maintenant, la première étape du pipeline graphique après que le processeur de commandes a lu la liste des écrans est le Vertex Shader et son nom est dû au fait qu'il travaille avec des sommets et non avec des primitives ou des triangles donc indépendants .

C'est une unité appelée Primitive Assembler qui est chargée de joindre ces sommets, non seulement pour créer des triangles, mais pour reconstruire les différents modèles qui composent la scène en joignant leurs différents sommets entre eux. L'assembleur primitif est un élément de fonction fixe dans tous les GPU qui exécutent cette fonction automatiquement sans avoir besoin de participer au code dans la liste d'écrans. Clair et simple, tout ce qui s'exécute sur l'étape Vertex Shader dans le pipeline 3D est envoyé à l'assembleur primitif et de là au processus suivant de l'étape.

Tessellation

Dans le cas où il y a une unité de tessellation dans le GPU, qui est chargée de subdiviser les sommets, l'assembleur primitif s'exécute juste après le processus de tessellation, puisque la nouvelle configuration des sommets nécessite des calculs d'union autres que les sommets qui constitueront le différents éléments de la scène.

Le Clipper et la suppression de la géométrie superflue

Moteur de géométrie d'élimination

Dans une scène en trois dimensions, il y a beaucoup de primitives graphiques ou de triangles dans la scène. Cependant, tous ne sont pas visibles pour le lecteur dans chaque image et il est donc nécessaire de jeter dans chaque image toute la géométrie non visible avant l'étape de rastérisation. Étant donné que chaque sommet qui n'est pas vu, mais qui n'est pas supprimé est celui qui sera plus tard pixellisé, texturé et même s'il est plus tard supprimé car il y a un autre pixel avec une priorité plus élevée lors du dessin.

La raison? Gardez à l'esprit que dans le pipeline 3D traditionnel, un Vertex Shader est exécuté pour chaque sommet de la scène, mais un Pixel Shader pour chaque sommet et le nombre de pixels par triangle est généralement supérieur d'un ordre de grandeur. C'est pourquoi il est important d'exclure la géométrie qui n'est pas visible dans la scène. Pour cela, deux algorithmes sont utilisés :

  • Le premier détecte les sommets en dehors du champ de vision du joueur et s'appelle View Frustum Culling.
  • Le second élimine à la place ceux qui sont dans le champ de vision, mais qui sont cachés par d'autres éléments plus gros et plus proches et s'appelle Back Face Culling.

Maintenant, le processus de Culling peut également être effectué via une fonction fixe et ce qu'il fait est d'éliminer complètement les triangles et même les objets non visibles. Mais que se passe-t-il lorsqu'un objet est partiellement visible ? Eh bien, selon la façon dont le matériel est implémenté, il ne l'élimine pas ou n'élimine pas complètement l'objet.

Qu'est-ce que le moteur de géométrie dans un GPU actuel ?

Moteur de géométrie d'ombrage de maillage LOD

Une fois que les problèmes du Primitive Assembler et du Clipper ont été expliqués, nous devons parler de ce qu'est le Geometry Engine, qui n'est rien de plus qu'un nouveau matériel qui rassemble les mêmes capacités que le Primitive Assembler et le Clipper, mais avec une plus grande précision. Puisqu'il a la capacité d'éliminer la géométrie superflue mais au niveau du vertex. Cela signifie que si un objet est partiellement hors écran ou n'est pas totalement masqué, il supprime les sommets non visibles et ne reconstruit que la partie visible.

L'autre utilité du Geometry Engine concerne la création au niveau de détail des objets de la scène, où ceux-ci ont différents niveaux de détails, Levels of Detail ou LOD en anglais, selon la distance. Le moteur géométrique a la capacité de supprimer intelligemment les sommets non visibles en fonction de la distance et de conserver ainsi la forme d'origine de l'objet. Considérez-le comme une tessellation à l'envers, où au lieu d'augmenter le nombre de sommets pour générer des détails, vous les diminuez.

Ceci est également important face au problème de sur-pavage, il faut tenir compte du fait que lorsque les sommets sont pavages, le GPU n'a pas la preuve de leur position réelle dans l'espace de trame, donc un problème finit par survenir qui est la sur-pavage. C'est-à-dire que le GPU calcule plus de sommets dans les objets au loin qui ne sont pas vus, mais dont les données sont là. Le Geometry Engine ayant accès aux informations de la géométrie de la scène peut facilement les éliminer. N'oublions pas que le Clipper traditionnel ne supprime que ce qui est hors de l'image ou caché.

Le moteur de géométrie dans le nouveau pipeline DX12 Ultimate

DX12 Ultime

Avec DirectX 12 Ultimate, la partie du pipeline 3D avant rastérisation change complètement, puisqu'une bonne partie des fonctions passent de l'exécution via une fonction figée à l'exécution dans les unités Shader du GPU. Par exemple, le pavage atteindra un point qui cessera d'être effectué dans une unité à fonction fixe pour passer auxdites unités et donc ladite unité disparaîtra.

Dans le cas du moteur géométrique, cela ne disparaîtra pas, mais c'est le seul qui a accès aux informations sur la façon dont les sommets sont connectés les uns aux autres. Tout algorithme qui implique d'accéder à la liste de la géométrie de la scène signifie devoir passer par le moteur de géométrie, qui est celui qui contrôle la liste des sommets et leurs relations les uns avec les autres.

Pour l'avenir, l'une des choses que nous allons voir sera la création de structures BVH pour le Ray Tracing à partir du GPU, le matériel qui évoluera pour cette tâche est le moteur de géométrie. Qui a aujourd'hui accès au cache L2 du GPU, où les informations des sommets sont stockées temporairement. La quantité de mémoire à l'intérieur du GPU devrait augmenter considérablement dans les années à venir.