Partager via


Étape Pixel Shader (PS)

L’étape Du nuanceur de pixels (PS) reçoit des données interpolées pour une primitive et génère des données par pixel, telles que la couleur.

Il s’agit d’une étape de nuanceur programmable; il s’affiche sous la forme d’un bloc arrondi dans le diagramme de pipeline graphique . Cette étape du nuanceur expose ses propres fonctionnalités uniques, basées sur le modèle de nuanceur 4.0 common-shader core.

L’étape Du nuanceur de pixels (PS) permet de riches techniques d’ombrage, 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 Rastériseur (RS) 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.

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 échantillon multiple 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 des dérivés consiste à calculer des calculs de niveau de détail pour l’échantillonnage de textures et, dans le cas d’un filtrage anisotropique, à sélectionner 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, de sorte que les dérivés des quantités calculées dans le nuanceur de pixels peuvent être raisonnablement approximatifs en tant que deltas des valeurs au même point d’exécution dans les pixels adjacents.

Entrées

Lorsque le pipeline est configuré sans nuanceur de géométrie, un nuanceur de pixels est limité à des entrées 16, 32 bits et 4 composants. Sinon, un nuanceur de pixels peut prendre jusqu’à 32, 32 bits et 4 entrées à 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 en cours de rastérisation, 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 du nuanceur de pixels. Les modes d’interpolation d’attribut du nuanceur de pixels sont déclarés dans une déclaration de registre d’entrée, par élément dans un argument ou une structure d’entrée. Les attributs peuvent être interpolés linéairement ou avec l’échantillonnage centroïde. Consultez la section « Échantillonnage centroïde d’attributs lors de l’anticrénelage multi-échantillonnage » dans Règles de rastérisation. L’évaluation centroïde est pertinente uniquement pendant l’échantillonnage multiple pour couvrir les cas où un pixel est couvert par une primitive, mais où un pixel centre peut ne pas l’ê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. Pour instance, une position de pixel doit être marquée avec la sémantique SV_Position. L’étape Assembleur d’entrée (IA) peut produire un scalaire pour un nuanceur de pixels (à l’aide de SV_PrimitiveID) ; L’étape Rastériseur (RS) peut également générer un scalaire pour un nuanceur de pixels (à l’aide de SV_IsFrontFace).

Sorties

Un nuanceur de pixels peut générer jusqu’à 8 couleurs 32 bits et 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 de sortie-écriture distinct.

Utilisez l’état profondeur-écriture-activation (à l’étape 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 facultative 32 bits, à 1 composant, à virgule flottante, pour le test 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 le test de profondeur (en supposant que le test de profondeur est activé). 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 une valeur de gabarit.

Pipeline graphique