Compartilhar via


Estágio do Sombreador de Pixel

O PS (estágio de 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 do rasterizador invoca um sombreador de pixel uma vez para cada pixel coberto por um primitivo, no entanto, é possível especificar uma sombreador NULL para evitar a execução de um sombreador.

O Sombreador de Pixel

Ao multiplicar uma textura, um sombreador de pixel é invocado uma vez por pixel coberto, enquanto um teste de profundidade/estêncil ocorre para cada multisampla coberta. 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 derivados de quantidades em relação ao espaço de tela x e y. O uso mais comum para derivados é computar cálculos de nível de detalhes para amostragem de textura e, no caso da filtragem anisotrópica, selecionando amostras ao longo do eixo da anisotropia. Normalmente, uma implementação de hardware executa um sombreador de pixels em vários pixels (por exemplo, uma grade 2x2) simultaneamente, de modo que derivados de quantidades computadas no sombreador de pixel podem ser razoavelmente aproximados 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 entradas de 16, 32 bits e 4 componentes. Caso contrário, um sombreador de pixel pode levar 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 por primitiva. As entradas de sombreador de pixel são interpoladas 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 do centro do sombreador de pixel. Os modos de interpolação de atributo do sombreador de pixel são declarados em uma declaração de registro de entrada, por elemento, em um argumento ou uma estrutura de entrada . Os atributos podem ser interpolados linearmente ou com amostragem centralizada. A avaliação do Centroid é relevante somente durante a multisampação para cobrir casos em que um pixel é coberto por um primitivo, mas um centro de pixels pode não ser; A avaliação do centroide ocorre o mais próximo possível do centro de pixels (não coberto).

As entradas também podem ser declaradas com um semântico de valor do 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 gerar até 8 cores de 32 bits, 4 componentes ou nenhuma cor se o pixel for descartado. Os componentes de registro de saída do sombreador de pixel devem ser declarados antes que possam 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 de profundidade (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 é a saída no registro oDepth e substitui o valor de profundidade interpolada 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 oDepth de sombreador.

Um sombreador de pixel não pode gerar um valor de estêncil.

de Pipeline de Gráficos

de estágios de pipeline (Direct3D 10)