Partager via


Étape du nuanceur de pixels

L’étape de nuanceur de pixels (PS) permet des techniques d’ombrage enrichies telles que l’éclairage par pixel et le post-traitement. Un nuanceur de pixels est un programme qui combine des variables constantes, des données de texture, des valeurs interpolées par vertex et d’autres données pour produire des sorties par pixel. L’étape de rastériseur appelle un nuanceur de pixels une fois pour chaque pixel couvert par une primitive. Toutefois, il est possible de spécifier un nuanceur NULL pour éviter d’exécuter un nuanceur.

Nuanceur de pixels

Lors de l’échantillonnage multiple d’une texture, un nuanceur de pixels est appelé une fois par pixel couvert tandis qu’un test de profondeur/gabarit se produit pour chaque multisample couvert. Les exemples qui réussissent le test de profondeur/gabarit sont mis à jour avec la couleur de sortie du nuanceur de pixels.

Les fonctions intrinsèques du nuanceur de pixels produisent ou utilisent des dérivés de quantités par rapport à l’espace d’écran x et y. L’utilisation la plus courante pour les dérivés consiste à calculer des calculs de niveau de détail pour l’échantillonnage de texture et, dans le cas d’un filtrage anisotropique, en sélectionnant des échantillons le long de l’axe de l’anisotropie. En règle générale, une implémentation matérielle exécute un nuanceur de pixels sur plusieurs pixels (par exemple une grille 2x2) simultanément, afin que les dérivés de quantités calculées dans le nuanceur de pixels puissent être raisonnablement approximatifs en tant que deltas des valeurs au même point d’exécution en pixels adjacents.

Entrées

Lorsque le pipeline est configuré sans nuanceur geometry, un nuanceur de pixels est limité à 16 entrées 32 bits et 4 composants. Sinon, un nuanceur de pixels peut prendre jusqu’à 32 entrées 32 bits et 4 composants.

Les données d’entrée du nuanceur de pixels incluent des attributs de vertex (qui peuvent être interpolés avec ou sans correction de perspective) ou peuvent être traités comme des constantes par primitive. Les entrées du nuanceur de pixels sont interpolées à partir des attributs de vertex de la primitive ratérisée, en fonction du mode d’interpolation déclaré. Si une primitive est découpée avant la rastérisation, le mode d’interpolation est également respecté pendant le processus de découpage.

Les attributs de vertex sont interpolés (ou évalués) aux emplacements du centre de nuanceur de pixels. Les modes d’interpolation d’attribut de nuanceur de pixels sont déclarés dans une déclaration de registre d’entrée, par élément, dans un argument ou dans une structure d’entrée . Les attributs peuvent être interpolés linéairement ou avec échantillonnage centroïde. L’évaluation centroïde est pertinente uniquement pendant l’échantillonnage multiple pour couvrir les cas où un pixel est couvert par une primitive, mais qu’un centre de pixels ne peut pas être ; L’évaluation centroïde se produit aussi près que possible du centre de pixels (non couvert).

Les entrées peuvent également être déclarées avec une sémantique de valeur système, qui marque un paramètre consommé par d’autres étapes de pipeline. Par exemple, une position de pixel doit être marquée avec la sémantique SV_Position. L’étape IA peut produire un scalaire pour un nuanceur de pixels (à l’aide de SV_PrimitiveID) ; l’étape de rastériseur peut également générer une scalaire pour un nuanceur de pixels (à l’aide de SV_IsFrontFace).

Sorties

Un nuanceur de pixels peut générer jusqu’à 8, 32 bits, couleurs de 4 composants ou aucune couleur si le pixel est ignoré. Les composants du registre de sortie du nuanceur de pixels doivent être déclarés avant de pouvoir être utilisés ; chaque registre est autorisé à un masque d’écriture de sortie distinct.

Utilisez l’état d’activation de l’écriture de profondeur (dans l’étape de fusion de sortie) pour contrôler si les données de profondeur sont écrites dans une mémoire tampon de profondeur (ou utilisez l’instruction d’abandon pour ignorer les données pour ce pixel). Un nuanceur de pixels peut également générer une valeur de profondeur 32 bits, 1 composant, à virgule flottante facultative pour les tests de profondeur (à l’aide de la sémantique SV_Depth). La valeur de profondeur est sortie dans le registre oDepth et remplace la valeur de profondeur interpolée pour les tests de profondeur (en supposant que les tests de profondeur sont activés). Il n’existe aucun moyen de changer dynamiquement entre l’utilisation de la profondeur de fonction fixe ou de l’oDepth du nuanceur.

Un nuanceur de pixels ne peut pas générer de valeur de gabarit.

de pipeline Graphics

étapes de pipeline (Direct3D 10)