Estágio Pixel Shader
O estágio de sombreador de pixel (PS) 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 do rasterizador invoca um sombreador de pixel uma vez para cada pixel coberto por um primitivo, no entanto, é possível especificar um sombreador de NULL para evitar a execução de um sombreador.
O Pixel Shader
Ao fazer uma amostragem múltipla de uma textura, um sombreador de pixel é invocado uma vez por pixel coberto, enquanto ocorre um teste de profundidade/estêncil para cada amostra múltipla coberta. As amostras que passam no teste de profundidade/estêncil são atualizadas 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 derivados é 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 da 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 de quantidades calculadas no sombreador de pixel possam ser razoavelmente aproximadas como deltas dos valores no mesmo ponto de execução em pixels adjacentes.
Insumos
Quando o pipeline é configurado sem um sombreador de geometria, um sombreador de pixel é limitado a entradas de 16, 32 bits e 4 componentes. Caso contrário, um sombreador de pixel pode levar até 32, 32 bits, entradas de 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 perspetiva) ou podem ser tratados como constantes por primitiva. As entradas de 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 uma primitiva é cortada antes da rasterização, o modo de interpolação também é honrado durante o processo de recorte.
Os atributos de vértice são interpolados (ou avaliados) em locais centrais de sombreador de pixel. Os modos de interpolação de atributos de sombreador de pixel são declarados em uma declaração de registro de entrada, por elemento, em uma de argumento ou em uma estrutura de entrada . Os atributos podem ser interpolados linearmente ou com amostragem centróide. A avaliação 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 centróide ocorre o mais próximo possível do centro do pixel (não coberto).
As entradas também podem ser declaradas com um semântico de valor de sistema, que marca um parâmetro que é consumido por outros estágios de pipeline. Por exemplo, uma posição de pixel deve ser marcada com a semântica SV_Position. O estágio IA pode produzir um escalar para um sombreador de pixel (usando SV_PrimitiveID); O estágio do rasterizador também pode gerar um escalar para um sombreador de pixel (usando SV_IsFrontFace).
Saídas
Um sombreador de pixel pode produzir até 8, 32 bits, cores de 4 componentes ou nenhuma cor se o pixel for descartado. Os componentes do registro de saída do sombreador de pixel devem ser declarados antes de poderem ser usados; A cada registo é permitida uma máscara de escrita de saída distinta.
Use o estado depth-write-enable (no estágio de 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 para esse 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 o teste de profundidade (supondo que o teste de profundidade esteja habilitado). Não há como alterar dinamicamente entre o uso de profundidade de função fixa ou sombreador oDepth.
Um sombreador de pixel não pode gerar um valor de estêncil.
Tópicos relacionados