Fase del sombreador de píxeles

La fase del sombreador de píxeles (PS) permite técnicas de sombreado enriquecidas, como la iluminación por píxel y el posprocesamiento. Un sombreador de píxeles es un programa que combina variables constantes, datos de textura, valores interpolados por vértice y otros datos para generar salidas por píxel. La fase de rasterizador invoca un sombreador de píxeles una vez para cada píxel cubierto por un primitivo; sin embargo, es posible especificar un sombreador NULL para evitar ejecutar un sombreador.

Sombreador de píxeles

Cuando se realiza un muestreo múltiple de una textura, se invoca un sombreador de píxeles una vez por píxel cubierto mientras se produce una prueba de profundidad/galería de símbolos para cada multimuestra cubierto. Los ejemplos que superan la prueba de profundidad/galería de símbolos se actualizan con el color de salida del sombreador de píxeles.

Las funciones intrínsecas del sombreador de píxeles producen o utilizan derivados de cantidades con respecto al espacio de pantalla x e y. El uso más común para derivados es calcular cálculos de nivel de detalle para el muestreo de texturas y, en el caso del filtrado anisotrópico, seleccionando muestras a lo largo del eje de anisotropía. Normalmente, una implementación de hardware ejecuta un sombreador de píxeles en varios píxeles (por ejemplo, una cuadrícula 2x2) simultáneamente, de modo que los derivados de cantidades calculadas en el sombreador de píxeles se puedan aproximar razonablemente como deltas de los valores en el mismo punto de ejecución en píxeles adyacentes.

Entradas

Cuando la canalización se configura sin un sombreador de geometría, un sombreador de píxeles se limita a entradas de 16, 32 bits y 4 componentes. De lo contrario, un sombreador de píxeles puede tardar hasta 32, 32 bits y 4 entradas de componente.

Los datos de entrada del sombreador de píxeles incluyen atributos de vértice (que se pueden interpolar con o sin corrección de perspectiva) o se pueden tratar como constantes por primitiva. Las entradas del sombreador de píxeles se interpolan a partir de los atributos de vértice del primitivo que se está rasterizando, en función del modo de interpolación declarado. Si se recorta un primitivo antes de la rasterización, también se respeta el modo de interpolación durante el proceso de recorte.

Los atributos de vértice se interpolan (o evalúan) en ubicaciones del centro del sombreador de píxeles. Los modos de interpolación de atributos de sombreador de píxeles se declaran en una declaración de registro de entrada, por elemento en un argumento o en una estructura de entrada. Los atributos se pueden interpolar linealmente o con muestreo centroide. La evaluación centroide solo es relevante durante el muestreo múltiple para cubrir los casos en los que un píxel está cubierto por un primitivo, pero un centro de píxeles puede no ser; La evaluación centroide se produce lo más cerca posible del centro de píxeles (no cubierto).

Las entradas también se pueden declarar con una semántica de valor del sistema, que marca un parámetro consumido por otras fases de canalización. Por ejemplo, una posición de píxel debe marcarse con la semántica SV_Position. La fase ia puede producir un escalar para un sombreador de píxeles (mediante SV_PrimitiveID); La fase de rasterizador también puede generar un escalar para un sombreador de píxeles (mediante SV_IsFrontFace).

Salidas

Un sombreador de píxeles puede generar hasta 8, 32 bits, colores de 4 componentes o ningún color si se descarta el píxel. Los componentes de registro de salida del sombreador de píxeles deben declararse antes de poder usarse; cada registro tiene permitido una máscara de escritura de salida distinta.

Use el estado depth-write-enable (en la fase de fusión de salida) para controlar si los datos de profundidad se escriben en un búfer de profundidad (o usan la instrucción de descarte para descartar los datos de ese píxel). Un sombreador de píxeles también puede generar un valor opcional de 32 bits, de 1 componente, de punto flotante y de profundidad para las pruebas de profundidad (mediante la semántica de SV_Depth). El valor de profundidad se genera en el registro oDepth y reemplaza el valor de profundidad interpolado para las pruebas de profundidad (suponiendo que se habilite la prueba de profundidad). No hay ninguna manera de cambiar dinámicamente entre el uso de profundidad de función fija o sombreador oDepth.

Un sombreador de píxeles no puede generar un valor de galería de símbolos.

Canalización de gráficos

Fases de canalización (Direct3D 10)