Que sont les shaders Vertex et Pixel?

Que sont les shaders Vertex et Pixel?

Quelle est la différence entre eux? Lequel est le meilleur?

Un Pixel Shader est un composant GPU (Graphic Processing Unit) qui peut être programmé pour fonctionner par pixel et prendre en charge des éléments tels que l’éclairage et le bump mapping.

Un Vertex Shader est également un composant GPU et est également programmé en utilisant un langage d’assemblage spécifique, comme les pixel shaders, mais est orienté vers la géomésortinge de la scène et peut faire des choses comme l’ajout d’arêtes de silhouette cartoony à des objects, etc.

Ni l’un ni l’autre n’est meilleur que l’autre, ils ont chacun leurs utilisations spécifiques. La plupart des cartes graphiques modernes prenant en charge DirectX 9 ou mieux incluent ces fonctionnalités.

Il existe plusieurs ressources sur le Web pour mieux comprendre comment utiliser ces choses. NVidia et ATI en particulier sont de bonnes ressources pour les documents sur ce sujet.

DirectX 10 et OpenGL 3 ont introduit le Geometry Shader comme troisième type.

En rendant la commande de pipeline –

Vertex Shader – Prend un seul point et peut l’ajuster. Peut être utilisé pour calculer des calculs complexes ** d’éclairage de sumts en tant que configuration pour l’étape suivante et / ou pour déformer les points autour (oscillation, échelle, etc.).

chaque primitive obtenue est transmise à la

Geometry Shader – Prend chaque primitive transformée (sortingangle, etc.) et peut effectuer des calculs sur elle. Cela peut append de nouveaux points, les enlever ou les déplacer selon les besoins. Cela peut être utilisé pour append ou supprimer des niveaux de détail de manière dynamic à partir d’un seul maillage de base, créer des maillages mathématiques basés sur un point (pour les systèmes de particules complexes) et d’autres tâches similaires.

chaque primitive obtenue reçoit la ligne de balayage convertie et chaque pixel couvert par la plage est passé à travers le

Pixel Shader (Fragment Shader in OpenGL) – Calcule la couleur d’un pixel sur l’écran en fonction de ce que le vertex shader transmet, des textures liées et des données ajoutées par l’utilisateur. Cela ne permet pas de lire l’écran en cours, il suffit de déterminer quelle couleur / transparence ce pixel doit être pour la primitive actuelle.

ces pixels sont ensuite placés dans le tampon de dessin courant (écran, tampon de retour, rendu sur texture, etc.)

Tous les shaders peuvent accéder à des données globales telles que la masortingce de vue du monde et le développeur peut transmettre des variables simples à utiliser pour l’éclairage ou pour toute autre raison. Les shaders sont traités dans un langage de type assembleur, mais les versions modernes de DirectX et OpenGL ont intégré des compilateurs de langage de type c de haut niveau intégrés respectivement appelés HLSL et GLSL. NVidia a également un compilateur de shader appelé CG qui fonctionne sur les deux API.

[modifié pour refléter l’ordre incorrect que j’avais auparavant (Géomésortinge-> Vertex-> Pixel) comme indiqué dans un commentaire.]

Il y a maintenant 3 nouveaux shaders utilisés dans DirectX 11 pour la tessellation. Le nouvel ordre complet de shader est Vertex-> Hull-> Tessellation-> Domain-> Geometry-> Pixel. Je n’ai pas encore utilisé ces nouvelles, alors ne vous sentez pas qualifié pour les décrire avec précision.

Les shaders Vertex et Pixel fournissent différentes fonctions dans le pipeline graphique. Les vertex shaders prennent et traitent les données liées aux sumts (positions, normales, texcoords).

Les pixels (ou plus précisément les fragments) prennent des valeurs interpolées de celles traitées dans le shader Vertex et génèrent des fragments de pixels. La plupart des choses “cool” se font en pixels. C’est là que des choses comme la recherche de texture et l’éclairage ont lieu.

DirectX Spécifique:

Shader:

Ensemble de programmes qui implémente des fonctionnalités graphiques supplémentaires pour les objects non définis dans le pipeline de rendu fixe. Pour cette raison, nous pouvons avoir nos propres effets graphiques en fonction de nos besoins – c.-à-d., Nous ne sums plus limités à des opérations «fixes» prédéfinies.

HLSL: (langage d’ombrage de haut niveau):

HLSL est un langage de programmation comme C ++ qui est utilisé pour implémenter des shaders (Pixel Shaders / Vertex Shaders).

Vertex Shaders:

Un vertex shader est un programme exécuté sur le GPU de la carte graphique qui fonctionne individuellement sur chaque sumt. Cela facilite notre propre algorithme personnalisé pour travailler avec les sumts.

Pixel Shaders:

Un pixel shader est un programme exécuté sur le GPU de la carte graphique pendant le processus de rasterisation de chaque pixel. Cela nous donne la possibilité d’accéder / manipuler directement des pixels individuels. Cet access direct aux pixels nous permet de réaliser une variété d’effets spéciaux, tels que le multitexturing, l’éclairage par pixel, la profondeur de champ, la simulation de nuages, la simulation d’incendie et des techniques d’ombrage sophistiquées.

Note: Les shader Vertex et Pixel Shaders (programmes) doivent être compilés en utilisant une version spécifique du compilateur avant utilisation. La compilation peut se faire comme un appel à une API avec les parameters requirejs tels que le nom du fichier, la fonction d’entrée principale, etc.

En termes de développement, un shader Pixel est un petit programme qui fonctionne sur chaque pixel individuellement, de même un shader Vertex fonctionne sur chaque sumt individuellement.

Ceux-ci peuvent être utilisés pour créer des effets spéciaux, des ombres, des éclairages, etc.

Chaque Pixel / Vertex étant exploité individuellement, ces shaders se prêtent à l’architecture hautement parallèle des processeurs graphiques modernes.