Vertex Shader vs Fragment Shader

J’ai lu des tutoriels sur Cg, mais une chose n’est pas claire pour moi. Quelle est exactement la différence entre les shaders de vertex et de fragment? Et pour quelles situations l’un est-il mieux adapté que l’autre?

    Un fragment shader est identique au pixel shader.

    La principale différence est qu’un vertex shader peut manipuler les atsortingbuts des sumts. quels sont les points d’angle de vos polygones.

    Le fragment shader, quant à lui, prend en compte l’aspect des pixels entre les sumts. Ils sont interpolés entre les sumts définis suivant des règles spécifiques.

    Par exemple: si vous voulez que votre polygone soit complètement rouge, vous définirez tous les vertices en rouge. Si vous voulez des effets spécifiques comme un dégradé entre les sumts, vous devez le faire dans le fragment shader.

    En d’autres termes:

    Le vertex shader fait partie des premières étapes du pipeline graphique, entre la transformation des coordonnées du modèle et le découpage des polygones. À ce stade, rien n’est vraiment fait pour l’instant.

    Cependant, le fragment / pixel shader fait partie de l’étape de rasterisation, où l’image est calculée et les pixels entre les sumts sont remplis ou “colorés”.

    Il suffit de lire sur le pipeline graphique ici et tout se révélera: http://en.wikipedia.org/wiki/Graphics_pipeline

    Le vertex shader est réalisé sur chaque sumt, alors que le shader de fragment est effectué sur chaque pixel. Le fragment shader est appliqué après le vertex shader. Plus d’informations sur le texte du lien du pipeline GPU des shaders

    Nvidia CG Livre

    La transformation de vertex est la première étape de traitement du pipeline de matériel graphique. La transformation de vertex effectue une séquence d’opérations mathématiques sur chaque sumt. Ces opérations comprennent la transformation de la position du sumt en une position d’écran utilisée par le rasterizer, la génération de coordonnées de texture pour la texturation et l’allumage du sumt pour déterminer sa couleur.

    Les résultats de la pixellisation sont un ensemble d’emplacements de pixels ainsi qu’un ensemble de fragments. Il n’y a pas de relation entre le nombre de sumts d’une primitive et le nombre de fragments générés lorsqu’elle est pixellisée. Par exemple, un sortingangle composé de seulement trois sumts pourrait occuper la totalité de l’écran et 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 exactement 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 “élément d’image”. Un pixel représente le contenu du tampon d’image à un emplacement spécifique, tel que la couleur, la profondeur et toute autre valeur associée à cet emplacement. Un fragment est l’état requirejs potentiellement pour mettre à jour un pixel particulier.

    Le terme “fragment” est utilisé car la pixellisation divise chaque primitive géomésortingque, telle qu’un sortingangle, en fragments de la taille d’un pixel pour chaque pixel que recouvre la primitive. Un fragment a un emplacement de pixel associé, une valeur de profondeur et un ensemble de parameters interpolés tels qu’une couleur, une couleur secondaire (spéculaire) et un ou plusieurs ensembles de coordonnées de texture. Ces différents parameters interpolés sont dérivés des sumts transformés qui constituent la primitive géomésortingque particulière utilisée pour générer les fragments. Vous pouvez considérer un fragment comme un “pixel potentiel”. Si un fragment réussit les différents tests de rasterisation (à l’étape des opérations raster, décrite brièvement), le fragment met à jour un pixel dans le tampon de trame.

    Vertex Shaders et Fragment Shaders sont tous deux des fonctionnalités de l’implémentation 3D qui n’utilise pas le rendu de pipeline fixe. Dans tous les rendus 3D, les shaders Vertex sont appliqués avant les shaders fragment / pixel.

    Les vertex shaders opèrent sur chaque sumt. Si vous avez un maillage fixe et que vous souhaitez le déformer dans un shader, vous devez l’implémenter dans le vertex shader.

    Fragment shaders prend la sortie du vertex shader et associe les couleurs, la valeur de profondeur d’un pixel, etc. Après ces opérations, le segment est envoyé à Framebuffer pour l’afficher à l’écran.

    Certaines opérations, comme par exemple le calcul de l’éclairage, peuvent être effectuées dans le shader Vertex ainsi que dans le shader de freagment. mais frragment shader fournit un meilleur résultat que le vertex shader.

    Lors du rendu d’images via du matériel 3D, vous avez généralement un maillage (point, polygones, lignes) qui sont définis par les sumts. Pour manipuler les sumts individuellement pour des mouvements dans un modèle ou des vagues dans un océan, vous pouvez utiliser les vertex shaders. Ces vertices peuvent avoir des couleurs statiques ou des couleurs assignées par des textures, pour manipuler les couleurs des sumts, vous utilisez des shaders de fragments. À la fin du pipeline, lorsque la vue passe à l’écran, vous pouvez également utiliser des shaders de fragment.