Estágio do sombreador de pixel (PS)
O estágio PS (Sombreador de Pixel) recebe dados interpolados para um primitivo e gera dados por pixel, como cor.
Este é um estágio de sombreador programável; Ele é mostrado como um bloco arredondado no diagrama de pipeline de gráficos. Esse estágio de sombreador expõe sua própria funcionalidade exclusiva, criada no núcleo de sombreador comum do modelo de sombreador 4.0.
O estágio PS (Sombreador de Pixel) permite técnicas avançadas de sombreamento, como iluminação por pixel e pós-processamento. Um sombreador de pixel é um programa que combina variáveis constantes, dados de textura, valores interpolados por vértice e outros dados para produzir saídas por pixel. O estágio RS (Rasterizador) invoca um sombreador de pixel uma vez para cada pixel coberto por um primitivo, no entanto, é possível especificar um sombreador NULL para evitar a execução de um sombreador.
Ao fazer várias amostras de uma textura, um sombreador de pixel é invocado uma vez por pixel coberto enquanto um teste de profundidade/estêncil ocorre para cada multiamostra coberta. Os exemplos que passam no teste de profundidade/estêncil são atualizados com a cor de saída do sombreador de pixel.
As funções intrínsecas do sombreador de pixel produzem ou usam derivadas de quantidades em relação ao espaço de tela x e y. O uso mais comum para derivadas é calcular cálculos de nível de detalhe para amostragem de textura e, no caso de filtragem anisotrópica, selecionar amostras ao longo do eixo de anisotropia. Normalmente, uma implementação de hardware executa um sombreador de pixel em vários pixels (por exemplo, uma grade 2x2) simultaneamente, de modo que as derivadas das quantidades calculadas no sombreador de pixel possam ser razoavelmente aproximadas como deltas dos valores no mesmo ponto de execução em pixels adjacentes.
Entradas
Quando o pipeline é configurado sem um sombreador de geometria, um sombreador de pixel é limitado a 16, 32 bits e 4 entradas de componentes. Caso contrário, um sombreador de pixel pode receber até 32 entradas de 32 bits e 4 componentes.
Os dados de entrada do sombreador de pixel incluem atributos de vértice (que podem ser interpolados com ou sem correção de perspectiva) ou podem ser tratados como constantes primitivas. As entradas do sombreador de pixel são interpoladas a partir dos atributos de vértice do primitivo que está sendo rasterizado, com base no modo de interpolação declarado. Se um primitivo for recortado antes da rasterização, o modo de interpolação também será respeitado durante o processo de recorte.
Os atributos de vértice são interpolados (ou avaliados) em locais centrais de sombreamento de pixel. Os modos de interpolação de atributo de sombreador de pixel são declarados em uma declaração de registro de entrada, por elemento em um argumento ou em uma estrutura de entrada. Os atributos podem ser interpolados linearmente ou com amostragem de centróide. Consulte a seção "Amostragem de Centroide de Atributos ao Suavizar Várias Amostras" em Regras de rasterização. A avaliação do centróide é relevante apenas durante a amostragem múltipla para cobrir casos em que um pixel é coberto por um primitivo, mas um centro de pixel pode não ser; A avaliação do centróide ocorre o mais próximo possível do centro de pixels (não coberto).
As entradas também podem ser declaradas com uma semântica de valor do sistema, que marca um parâmetro que é consumido por outros estágios do pipeline. Por exemplo, uma posição de pixel deve ser marcada com a SV_Position semântica. O estágio IA (Assembler de Entrada) pode produzir um escalar para um sombreador de pixel (usando SV_PrimitiveID); o estágio RS (Rasterizador) também pode gerar um escalar para um sombreador de pixel (usando SV_IsFrontFace).
Saídas
Um sombreador de pixel pode gerar até 8, 32 bits, 4 cores de componentes ou nenhuma cor se o pixel for descartado. Os componentes de registro de saída do sombreador de pixel devem ser declarados antes de poderem ser usados; Cada registro tem permissão para uma máscara de gravação de saída distinta.
Use o estado de habilitação de gravação em profundidade (no estágio OM (Fusão de Saída)) para controlar se os dados de profundidade são gravados em um buffer de profundidade (ou use a instrução de descarte para descartar dados desse pixel). Um sombreador de pixel também pode gerar um valor opcional de profundidade de 32 bits, 1 componente, ponto flutuante para teste de profundidade (usando a semântica SV_Depth). O valor de profundidade é gerado no registro oDepth e substitui o valor de profundidade interpolado para teste de profundidade (supondo que o teste de profundidade esteja habilitado). Não há como alternar dinamicamente entre o uso de profundidade de função fixa ou o sombreador oDepth.
Um sombreador de pixel não pode gerar um valor de estêncil.
Tópicos relacionados
Pipeline de elementos gráficos