156 votes

Vertex Shader vs Fragment Shader

J'ai lu quelques tutoriels concernant les Cg, mais une chose n'est pas tout à fait claire pour moi. Quelle est exactement la différence entre les vertex et les fragment shaders ? Et dans quelles situations l'un est-il mieux adapté que l'autre ?

24 votes

@genpfault il ne s'agit pas d'un doublon, il s'agit du vertex shader et du fragment shader. Alors que le "duplicate" concerne le pixel et le vertex. Même si le fragment shader est le pixel shader. Si nous cherchons sur Google et ne savons pas, nous demandons, donc les deux questions, en utilisant des synonymes, sont nécessaires. Dans la tête de la personne qui pose la question, ce sont deux questions différentes.

253voto

The Surrican Points 12882

Un fragment shader est identique à un pixel shader.

La principale différence est qu'un vertex shader peut manipuler les attributs des sommets, qui sont les points d'angle de vos polygones.

Le fragment shader, quant à lui, s'occupe de l'aspect des pixels entre les sommets. Ils sont interpolés entre les sommets définis selon des règles spécifiques.

Par exemple, si vous voulez que votre polygone soit entièrement rouge, vous devez définir tous les sommets en rouge. Si vous voulez des effets spécifiques comme un gradient entre les sommets, vous devez le faire dans le fragment shader.

En d'autres termes :

Le vertex shader fait partie des premières étapes du pipeline graphique, quelque part entre la transformation des coordonnées du modèle et le découpage des polygones, je pense. À ce stade, rien n'est encore vraiment fait.

Cependant, le fragment/pixel shader fait partie de l'étape de rastérisation, où l'image est calculée et les pixels entre les sommets sont remplis ou "colorés".

Lisez simplement ce qui concerne le pipeline graphique ici et tout se révélera : http://en.wikipedia.org/wiki/Graphics_pipeline

4 votes

En fait, il n'est pas nécessaire de définir les attributs de vertex en rouge : vous pourriez tout aussi bien, et probablement plus judicieusement, définir le fragcolor en rouge dans le fragment shader, là où se trouve la couleur et le tramage.

46voto

BЈовић Points 28674

Le vertex shader est réalisé sur chaque vertex, tandis que le fragment shader est réalisé sur chaque pixel. Le fragment shader est appliqué après le vertex shader. En savoir plus sur le pipeline GPU des shaders texte du lien

31voto

user242564 Points 101

Tutoriel Nvidia Cg :

La transformation des sommets est la première étape de traitement dans le pipeline du matériel graphique. La transformation de sommets effectue une séquence d'opérations mathématiques sur chaque sommet. Ces opérations comprennent la transformation de la position du sommet en une position à l'écran à utiliser par le rasterizer, la génération de coordonnées de texture pour la texturation et l'éclairage du sommet pour déterminer sa couleur.

Les résultats du tramage sont un ensemble d'emplacements de pixels ainsi qu'un ensemble de fragments. Il n'y a pas de relation entre le nombre de sommets d'une primitive et le nombre de fragments qui sont générés lors de son tramage. Par exemple, un triangle composé de seulement trois sommets peut occuper tout l'écran, et donc générer des millions de fragments !

Plus tôt, nous vous avons dit de considérer un fragment comme un pixel si vous ne saviez pas précisément ce qu'était un fragment. À ce stade, cependant, la distinction entre un fragment et un pixel devient importante. Le terme pixel est l'abréviation de "picture element". Un pixel représente le contenu du tampon d'image à un emplacement spécifique, comme la couleur, la profondeur et toute autre valeur associée à cet emplacement. Un fragment est l'état requis potentiellement pour mettre à jour un pixel particulier.

Le terme "fragment" est utilisé parce que le tramage décompose chaque primitive géométrique, telle qu'un triangle, en fragments de la taille d'un pixel pour chaque pixel que la primitive couvre. Un fragment est associé à un emplacement de pixel, une valeur de profondeur et un ensemble de paramètres interpolés tels qu'une couleur, une couleur secondaire (spéculaire) et un ou plusieurs ensembles de coordonnées de texture. Ces divers paramètres interpolés sont dérivés des sommets transformés qui composent la primitive géométrique particulière utilisée pour générer les fragments. Vous pouvez considérer un fragment comme un "pixel potentiel". Si un fragment passe les différents tests de rastérisation (dans l'étape des opérations de rastérisation, qui est décrite sous peu), le fragment met à jour un pixel dans le tampon d'image.

5voto

user2439483 Points 23

Les nuanceurs de sommets et les nuanceurs de fragments sont tous deux des caractéristiques de la mise en œuvre de la 3D qui n'utilise pas le rendu à ligne fixe. Dans tout rendu 3D, les nuanceurs de sommets sont appliqués avant les nuanceurs de fragments/pixels.

Le vertex shader opère sur chaque vertex. Si vous avez un maillage de polygones fixes et que vous voulez le déformer dans un shader, vous devez l'implémenter dans le vertex shader. En d'autres termes, toute modification physique de l'apparence des sommets peut être réalisée dans le vertex shader.

Le fragment shader prend la sortie du vertex shader et associe les couleurs, la valeur de profondeur d'un pixel, etc. Après ces opérations, le fragment est envoyé au Framebuffer pour être affiché à l'écran.

Certaines opérations, comme par exemple le calcul de l'éclairage, peuvent être effectuées aussi bien dans le vertex shader que dans le fragment shader. Mais le fragment shader fournit un meilleur résultat que le vertex shader.

3voto

whatnick Points 3339

Lors du rendu d'images via le matériel 3D, vous disposez généralement d'un maillage (points, polygones, lignes) défini par des sommets. Pour manipuler les sommets individuellement, typiquement pour les mouvements dans un modèle ou les vagues dans un océan, vous pouvez utiliser des vertex shaders. Ces sommets peuvent avoir une couleur statique ou une couleur assignée par les textures. Pour manipuler les couleurs des sommets, il faut utiliser les fragment shaders. À la fin du pipeline, lorsque la vue est affichée à l'écran, vous pouvez également utiliser des fragment shaders.

2 votes

"Pour manipuler les sommets individuellement, typiquement pour les mouvements dans un modèle ou les vagues dans un océan" - Comme cela peut être vrai, c'est plus approprié pour un shader de géométrie qui intervient après le shader de sommet et avant le shader de pixel/fragment.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X