in

Mesh Shaders, tout sur ses fonctionnalités et son actualité

Mesh Shaders, tout sur ses fonctionnalités et son actualité

La sortie d’Alan Wake 2 et ses exigences techniques ont remis sur le devant de la scène un terme que nous avions apparemment longtemps ignoré. Celui avec les Mesh Shaders. Quels sont-ils, quels avantages apportent-ils aux jeux et pourquoi sont-ils une technologie rarement utilisée ? Telles sont les questions auxquelles nous allons répondre dans cet article.

Le plus gros problème du marché du jeu vidéo sur PC est sa stagnation technologique, qui a fait que des cartes graphiques qui devraient déjà être retirées du marché continuent d’être utilisées par leurs utilisateurs. Cela signifie que des technologies telles que celle présentée dans cet article n’ont pas été appliquées aux jeux vidéo malgré les avantages qu’elles apportent.

Origine et définition des Mesh Shaders

La première architecture GPU à implémenter les Mesh Shaders a été Turing, utilisée dans les cartes graphiques RTX 20 de NVIDIA, ce qui est paradoxal car elle a été proposée et mise sur la table pour la première fois par AMD, juste pour parler d’une des fonctionnalités. du futur AMD Vega, en particulier ce qu’on appelle NGG ou Next Generation Geometry ou Primitive Shaders, mais le Radeon Technology Group a dû attendre que RDNA ait une implémentation similaire. De plus, l’avantage de temps de NVIDIA a fait que sa proposition a fini par définir le standard utilisé dans DirectX 12 Ultimate et Vulkan.

L’approche derrière Mesh Shaders est claire, créer un type de shader universel pour l’étape géométrique de génération d’une scène 3D par ordinateur en temps réel, dans lequel différentes primitives géométriques sont exploitées. La première motivation était la faible efficacité des niveaux de shader supplémentaires qui, à partir de DirectX 10, ainsi que d’autres API équivalentes, avaient été ajoutés et qui étaient à peine utilisés. Quels sont les Geometry Shaders lents et inefficaces dans DirectX 10 et les Domain et Hull Shaders, conçus pour interagir avec la tessellation ou la subdivision des primitives par matériel.

Cependant, il est important de savoir quel est le problème pour comprendre pourquoi le concept de Mesh Shaders a été développé. Plus que tout car cela nous aidera à comprendre son utilité et son fonctionnement.

Avantages des Mesh Shaders

Shaders de maillage à haute géométrie

Le pipeline graphique n’est rien de plus qu’une série d’étapes ordonnées utilisées pour générer une scène 3D. La méthode utilisée en infographie est appelée rastérisation et, en dehors de certaines extensions, son organisation de base est conservée. En gros, nous avons deux étapes différentes :

Dans la première étape, la scène est construite à travers des sommets et des polygones. Dans un deuxième temps et après un calcul qui représente sa projection sur une surface 2D, nous travaillons avec des pixels.

C’est dans la première étape qu’agissent les Mesh Shaders, et en substance ils ne sont rien de plus qu’une réinvention du pipeline géométrique, qui, comme nous l’avons mentionné précédemment, a passé de nombreuses années à recevoir des améliorations progressives, alors que ce qui était nécessaire est vraiment Une révolution. Cependant, il ne s’agit pas simplement d’un type de shader universel pour les primitives géométriques, mais ils vont beaucoup plus loin et apportent une série d’avantages qui étaient impossibles avec le pipeline d’origine.

Meilleure utilisation des ressources GPU

GPU NVIDIA VRAM

Dans une scène 3D traditionnelle il y a beaucoup plus de pixels que de polygones, c’est donc dans l’étape Pixel/Fragment Shader, qui consiste à calculer la couleur de chacun des points de l’écran, que se retrouve une bonne partie de la charge de calcul. . Ils ont donc du mal à occuper un bon nombre de registres dans les cœurs du GPU et à en profiter pleinement. Cependant, la géométrie sur scène ne l’est pas, il est très difficile de remplir tous les espaces.

Qu’est ce que ça signifie? Les GPU sont basés sur des unités SIMD, ils exécutent la même instruction avec plusieurs données en même temps. Eh bien, si avec les pixels il est facile d’occuper toutes les ALU d’une unité de ce type, avec la géométrie cela n’arrive pas, et, à moins d’avoir un mécanisme implémenté pour que les ALU en excès soient en charge d’une autre instruction, la chose normale est qu’ils ne peuvent exécuter qu’une seule instruction d’un type à la fois.

Et c’est de là que vient le nom Mesh Shaders, puisqu’un maillage ou un maillage polygonal est un ensemble de sommets qui forment un objet 3D. Cela permet d’occuper beaucoup plus facilement les registres GPU et de tirer le meilleur parti des unités SIMD, quelle que soit l’architecture dont nous parlons.

A lire également  Sony va lancer une PlayStation 5 avec un lecteur externe USB-C

Ordre géométrique et assembleur d’entrée

Alan Wake 2 Mesh Shaders Détails

L’un des plus gros problèmes dans une scène 3D est l’overdraw, cela est dû au fait que le même pixel sur l’écran est calculé plusieurs fois car même si du point de vue de la caméra il se trouve dans des positions différentes en fonction de sa profondeur, Oui, ils sont en largeur et en hauteur. Autrement dit, si le GPU reçoit un polygone à traiter qui est éclipsé par un autre, mais bien avant celui qui est proche de la caméra, il le calculera, car il ne restitue pas les polygones dans un ordre établi. , provoquant un gaspillage d’énormes ressources.

Évidemment, il existe des moyens d’éliminer les objets non visibles, mais cela est inefficace, car c’est une façon de gaspiller des ressources et un cauchemar pour les programmeurs, car ils doivent réfléchir à des moyens d’éliminer ces objets superflus et non visibles. géométrie de la scène qui consomme des ressources informatiques, qui ne se retrouvent pas dans le graphisme.

Un autre point qui dit au revoir au nouveau pipeline géométrique est l’Input Assembler. Cette étape du pipeline géométrique n’est pas trouvée par un shader, mais par une unité fonctionnelle fixe. Le travail de cette unité est de lire les données des différentes primitives (points, lignes ou triangles) du Vertex Buffer et de les joindre en primitives qui seront utilisées dans les différentes étapes géométriques du pipeline 3D.

Cependant, sa fonctionnalité a été complètement éliminée dans le nouveau pipeline géométrique et elle n’existe plus dans les Mesh Shaders. La raison en est simple : il s’agissait de l’un des plus gros goulots d’étranglement de l’ancien pipeline géométrique.

Shaders de maillage vs shaders de sommet et de géométrie

Topologies de shaders de maillage

Les Vertex Shaders sont incapables de créer une nouvelle géométrie, pour ce faire, ils nécessitent des Geometry Shaders et une tessellation matérielle. De plus, ils ne peuvent fonctionner que sur un nombre fixe de sommets, généralement limité par leur cache interne.

Dans le cas des Geometry Shaders, les choses sont plus délicates. Ils sont extrêmement lents et constituent un tel goulot d’étranglement que les développeurs ne les utilisent pas. C’est la raison pour laquelle la grande majorité des jeux n’utilisent pas DirectX 10. Le pire de tout est qu’il est incapable de générer une nouvelle géométrie de manière procédurale, ne serait-ce que de manière totalement limitée. Quelque chose qui n’arrive pas avec les Mesh Shaders, qui ont la capacité de générer n’importe quelle forme polygonale dont les artistes et les programmeurs ont besoin.

Autrement dit, les Mesh Shaders vous permettent de générer de la géométrie de manière procédurale, et donc d’implémenter une formule mathématique ou un algorithme sur un objet 3D et de modifier sa forme. Qui a un grand nombre d’applications pour les jeux vidéo. Par exemple, il permet d’avoir des animations bien meilleures et plus réalistes, des déformations d’objets en temps réel plus détaillées, des animations complexes dans les vêtements et les cheveux des personnages. Les applications sont nombreuses et viennent du fait que les développeurs ne voient pas leurs capacités réduites par les limitations de l’ancien pipeline.

Test vs Amplification/Tâche/Object Shader

Avantages du Mesh Shader

Les Mesh Shaders sont accompagnés d’un autre type de shader, totalement facultatif, mais qui remplace les unités primitives de subdivision ou de tessellation. Et cette fonction était assurée par des unités fonctionnelles fixes qui n’offraient aucun contrôle sur la géométrie résultante et pouvaient même, dans certains cas, être inefficaces.

Un Amplification/Task/Object Shader donne la possibilité de contrôler le degré de génération d’une nouvelle géométrie. Par exemple, un tesselator ne connaît pas la distance à laquelle se trouve un objet et peut générer des sommets supplémentaires qui ne sont pas visibles dans un objet très éloigné. Tout cela vous permet de faire des choses comme :

  • Éliminez les objets suffisamment petits au loin pour ne pas être visibles.
  • Être capable de générer des niveaux de détails en fonction de la distance de l’objet à la caméra. Gain de temps de développement et de cauchemars pour les graphistes 3D.

Ce nouveau shader est facultatif et est invoqué avant les Mesh Shaders, et il nous permet de choisir simplement combien de Mesh Shaders nous voulons invoquer à un moment donné. Ce qui donne un meilleur contrôle sur ce qui se passe sur scène.

A lire également  PowerColor AMD Radeon RX 7900 XTX Hellhound, revue anglaise

Pré-élimination des shaders de maillage

Pré-abattage

Tout sommet non visible qui n’est pas supprimé sera calculé comme une série de pixels qui ne seront pas vus par l’utilisateur final, ce qui entraînera une perte de performances. Une façon de procéder consiste à restituer la scène sans aucun type de shader ni de valeur de couleur dans les pixels, puisque nous ne nous soucions que de la position des polygones, mais comme elle doit passer par les étapes de fonction fixes, cela est inefficace.

Ce qui est fait, c’est générer un Compute Shader qui se charge du même travail, car cela permet de contourner les étapes fonctionnelles fixes du pipeline 3D et qui ne sont pas nécessaires au Pre-Culling, qui est également devenu clé pour la génération du Arbre BVH pour Ray Tracing et permet également de connaître la position de la géométrie par scène.

Eh bien, les Mesh Shaders vous permettent de bénéficier de tous les avantages du Pre-Culling à partir de la liste d’écrans qui génère la scène sans avoir besoin du Compute Shader précédent. Ce qui est bien plus efficace si l’on recherche des fréquences d’images par seconde très élevées. Puisque cela évite d’avoir à prétraiter la scène, ce qui représente un gain de temps important

Les inconvénients des mesh shaders

Démo Mesh Shaders NVIDIA Turing

Malgré son implémentation dans DirectX 12 Ultimate et étant sur un GPU commercial depuis 2018, seul Remedy Entertainment avec Alan Wake 2 a pris la décision de le faire. Une décision controversée car, en termes de matériel, toutes les pièces nécessaires à la mise en œuvre des Mesh Shaders ne se retrouvent pas dans les modèles antérieurs aux architectures Turing chez NVIDIA et RDNA 2 chez AMD. Cependant, ce n’est pas le seul inconvénient qu’ils entraînent, qui pèsent en réalité bien moins que les avantages expliqués dans les sections précédentes de ce même article.

Maillages

Mailles de dragon

L’utilisation des Mesh Shaders nécessite que les maillages polygonaux des objets soient organisés en groupes de 64 sommets, ce qui est la taille standard d’une vague contenant tous les éléments sur lesquels la même instruction sera exécutée. Par conséquent, il est nécessaire de stocker la géométrie des différents objets non pas dans un seul maillage général, mais dans une série de « maillages » ou Meshlets, ce qui représente un travail supplémentaire qu’il n’était pas nécessaire de faire auparavant.

De plus, le fait d’organiser la géométrie de cette manière, malgré le fait qu’elle permet une plus grande utilisation des ressources GPU, signifie que la compatibilité des jeux avec ceux qui ne supportent pas les Mesh Shaders va au diable.

C’est pourquoi de nombreux développeurs décident de ne pas les utiliser sur PC et dans du contenu conçu pour les consoles des générations précédentes. On peut donc dire que l’utilisation de Mesh Shaders est l’une des fonctionnalités qui définit complètement les graphiques de nouvelle génération et pas seulement le lancer de rayons. Cependant, son utilisation a été plutôt limitée et pour le

Plus de responsabilité pour les développeurs

Développeur de jeux vidéo graphique

L’expression « une grande puissance implique une grande responsabilité » s’applique aux Mesh Shaders, car leur polyvalence et leur puissance nécessitent un plus grand contrôle de la part des programmeurs qui sont plus susceptibles de se tirer une balle dans le pied. Cela fait que beaucoup ne veulent rien savoir de sa mise en œuvre dans leurs jeux. Non pas par manque de connaissances, ni par paresse, mais plutôt pour éviter les maux de tête.

Ce n’est pas très différent du traitement multithread asymétrique DirectX 12, de nombreux jeux ne l’utilisent pas car il n’apporte rien visuellement et nécessite des heures de travail pour résoudre des problèmes. En fin de compte, l’utilisation des Mesh Shaders est limitée aux développeurs ayant suffisamment de connaissances et de courage pour utiliser les Mesh Shaders. Bien sûr, le résultat final en vaut la peine et constitue un énorme pas en avant en termes de qualité visuelle, bien sûr cela oblige les utilisateurs à changer de matériel.