Que sont le Vertex et les pixels shaders?

que sont le Vertex et les pixels shaders?

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

59
demandé sur Paulo 2009-05-07 05:41:33

5 réponses

A Pixel Shader est un composant GPU (Unité de traitement graphique) qui peut être programmé pour fonctionner sur une base par pixel et prendre soin de choses comme l'éclairage et la cartographie des bosses.

A Vertex Shader est aussi un composant GPU et est également programmé en utilisant un langage d'assemblage spécifique, comme les pixels shaders, mais sont orientés vers la géométrie de la scène et peuvent faire des choses comme ajouter des bords de silhouette de Cartoon aux objets, etc.

n'est Ni mieux que les autres, ils ont chacun leurs usages spécifiques. La plupart des cartes graphiques modernes supportant DirectX 9 ou mieux incluent ces capacités.

Il existe plusieurs ressources sur le web pour mieux comprendre comment utiliser ces choses. NVidia et ATI sont particulièrement de bonnes ressources pour les documents sur ce sujet.

39
répondu Scott Evernden 2009-05-07 01:48:06

DirectX 10 et OpenGL 3 introduit la géométrie Shader comme un troisième type.

Dans le pipeline de rendu d'ordre -

Vertex Shader - prend un point unique et peut l'ajuster. Peut être utilisé pour élaborer des calculs complexes d'éclairage **vertex comme une configuration pour la prochaine étape et/ou de distorsion des points autour (oscillation, échelle, etc).

chaque primitif résultant passe au

Geometry Shader - prend chaque primitif transformé (triangle, etc) et peut effectuer des calculs sur elle. Cela peut ajouter de nouveaux points, les enlever ou les déplacer selon les besoins. Cela peut être utilisé pour ajouter ou supprimer des niveaux de détail dynamiquement à partir d'un seul maillage de base, créer des mailles mathématiques basées sur un point (pour les systèmes de particules complexes) et d'autres tâches similaires.

chaque primitif résultant obtient scanline converti et chaque pixel la portée couvre obtient 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 passe, des textures liées et des données ajoutées par l'utilisateur. Cela ne peut pas du tout lire l'écran courant, juste trouver quelle couleur/transparence ce pixel devrait être pour la primitive courante.

ces pixels sont alors mis sur le tampon de tirage courant (écran, backbuffer, render-to-texture), quoi que ce soit)

tous les shaders peuvent accéder à des données globales telles que la matrice de vision du monde et le développeur peut passer dans des variables simples pour eux d'utiliser pour l'éclairage ou tout autre but. Les Shaders sont traités dans un langage de type assembleur, mais les versions modernes DirectX et OpenGL ont construit des compilateurs de langage de haut niveau de type c, appelés HLSL et GLSL respectivement. NVidia a également un compilateur shader appelé CG qui fonctionne sur les deux API.

[édité à refléter un ordre incorrect, j'ai eu avant (Géométrie->Sommet->Pixel), comme indiqué dans un commentaire.]

il y a maintenant 3 nouveaux shaders utilisés dans DirectX 11 pour la tessellation. Le nouveau shader ordre est le Sommet->Coque->Pavage->Domaine->Géométrie>Pixel. Je n'ai pas encore utilisé ces nouvelles, donc je ne me sens pas qualifié pour les décrire avec précision.

59
répondu Dan Brown 2012-01-26 15:24:11
Le Vertex

et les shaders Pixels offrent différentes fonctions dans le pipeline graphique. Les shaders de Vertex prennent et traitent les données liées au vertex (positions, normales, texcoords).

Pixel (ou plus précisément, Fragment) shaders prendre des valeurs interpolées à partir de celles traitées dans le vertex shader et de générer des fragments de pixel. La plupart des trucs" cool " se font en pixel shaders. C'est là que des choses comme la recherche de texture et l'éclairage ont lieu.

11
répondu geofftnz 2009-05-07 01:48:32

DirectX Spécifique:

Shader:

ensemble de programmes qui implémente des fonctionnalités graphiques supplémentaires aux objets qui ne sont pas définis dans le pipeline de rendu fixe. Pour cette raison, nous pouvons avoir nos propres effets graphiques selon nos besoins - c'est-à-dire. Nous ne sommes plus limités à des "fixe" opérations.

HLSL: (de Haut Niveau de l'Ombrage de la Langue):

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

Vertex Shaders:

un shader vertex est un programme exécuté sur le GPU de la carte graphique qui fonctionne sur chaque sommet individuellement. Cela nous permet d'écrire notre propre algorithme personnalisé pour travailler avec le vertex.

Pixel Shaders:

un pixel shader est un programme exécuté sur le GPU de la carte graphique pendant le processus de rastérisation pour chaque pixel. Il nous donne une facilité pour accéder / manipuler des pixels individuels directement . Cet accès direct aux pixels nous permet d'obtenir une variété d'effets spéciaux, tels que la multitexturation, l'éclairage par pixel, la profondeur de champ, la simulation de nuage, la simulation de feu, et les techniques sophistiquées d'ombre.

Note: les Shaders de sommet et les Shaders de Pixel (programmes) doivent être compilés en utilisant la version spécifique du compilateur avant utilisation. La Compilation peut être faite comme un appel à une API avec les paramètres requis comme le nom du fichier, la fonction d'entrée principale, etc.,

4
répondu SridharKritha 2013-08-05 15:32:26

en termes de développement un pixel shader est un petit programme qui fonctionne sur chaque pixel individuellement, de la même manière un vertex shader fonctionne sur chaque vertex individuellement.

ceux-ci peuvent être utilisés pour créer des effets spéciaux, des ombres, l'éclairage, etc...

puisque chaque Pixel / Vertex est exploité individuellement ces shaders se prêtent à l'architecture hautement parallèle des processeurs graphiques modernes.

3
répondu Stinomus 2009-05-07 01:55:48