Compartilhar via


Estágio de sombreador de geometria (GS)

O estágio do Sombreador de Geometria (GS) processa primitivos inteiros: triângulos, linhas e pontos, juntamente com seus vértices adjacentes. É útil para algoritmos, incluindo expansão de sprite de ponto, sistemas dinâmicos de partículas e geração de volume de sombra. Ele suporta amplificação e desamplificação de geometria.

Finalidade e usos

O estágio do Sombreador de Geometria processa primitivos inteiros: triângulos (3 vértices com até 3 vértices adjacentes), linhas (2 vértices com até 2 vértices adjacentes) e pontos (1 vértice).

ilustração de um triângulo e uma linha com vértices adjacentes

O sombreador de geometria também dá suporte à amplificação e desamplificação de geometria limitada. Dado um primitivo de entrada, o Sombreador de Geometria pode descartar o primitivo ou emitir um ou mais novos primitivos.

O estágio GS (Sombreador de Geometria) é 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 nos modelos de sombreador (consulte o núcleo do sombreador comum).

O estágio Geometry Shader é adequado para algoritmos, incluindo:

  • Expansão de Sprite de Ponto
  • Sistemas de partículas dinâmicas
  • Geração de peles/barbatanas
  • Geração de volume de sombra
  • Renderização de passagem única para mapa de cubo
  • Troca de material primitivo
  • Configuração de material primitivo - Esse recurso inclui a geração de coordenadas baricêntricas como dados primitivos para que um sombreador de pixel possa executar a interpolação de atributo personalizado.

Entrada

O estágio do Sombreador de Geometria executa o código do sombreador especificado pelo aplicativo com primitivos inteiros como entrada e a capacidade de gerar vértices na saída. Ao contrário dos sombreadores de vértice, que operam em um único vértice, as entradas do sombreador de geometria são os vértices de um primitivo completo (três vértices para triângulos, dois vértices para linhas ou vértice único para ponto). Os sombreadores de geometria também podem trazer os dados de vértice para os primitivos adjacentes à borda como entrada (três adicionais para um triângulo, dois vértices adicionais para uma linha).

O estágio Geometry Shader pode consumir o SV_PrimitiveID valor gerado pelo sistema que é gerado automaticamente pelo estágio IA (Input Assembler). Isso permite que dados primitivos sejam buscados ou computados, se desejado.

Quando um sombreador de geometria está ativo, ele é invocado uma vez para cada primitivo passado ou gerado anteriormente no pipeline. Cada invocação do sombreador de geometria vê como entrada os dados para o primitivo de invocação, seja um único ponto, uma única linha ou um único triângulo. Uma faixa de triângulo do início do pipeline resultaria em uma invocação do sombreador de geometria para cada triângulo individual na faixa (como se a faixa fosse expandida em uma lista de triângulos). Todos os dados de entrada para cada vértice no primitivo individual estão disponíveis (ou seja, 3 vértices para um triângulo), além de dados de vértices adjacentes, se aplicável e disponível.

Abreviações de vértices comuns:

Abreviação Termo
TV Vértice do triângulo
LV Vértice de linha
AV Vértice adjacente

 

Saída

O estágio GS (Sombreador de Geometria) é capaz de gerar vários vértices formando uma única topologia selecionada. As topologias de saída do sombreador de geometria disponíveis são tristrip, linestrip e pointlist. O número de primitivos emitidos pode variar livremente em qualquer invocação do sombreador de geometria, embora o número máximo de vértices que podem ser emitidos deva ser declarado estaticamente. Os comprimentos de faixa emitidos de uma invocação de sombreador de geometria podem ser arbitrários e novas faixas podem ser criadas por meio da função RestartStrip HLSL.

A execução de uma instância do sombreador de geometria é atômica de outras invocações, exceto que os dados adicionados aos fluxos são seriais. As saídas de uma determinada invocação de um sombreador de geometria são independentes de outras invocações (embora a ordenação seja respeitada). Um sombreador de geometria gerando faixas de triângulo iniciará uma nova faixa em cada invocação.

A saída do sombreador de geometria pode ser alimentada para o estágio do rasterizador e/ou para um buffer de vértice na memória por meio do estágio de saída do fluxo. A saída alimentada na memória é expandida para listas individuais de pontos/linhas/triângulos (exatamente como seriam passadas para o rasterizador).

Um sombreador de geometria gera dados um vértice por vez, acrescentando vértices a um objeto de fluxo de saída. A topologia dos fluxos é determinada por uma declaração fixa, escolhendo um TriangleStream, LineStream e PointStream como a saída para o estágio GS.

Há três tipos de objetos de fluxo disponíveis: TriangleStream, LineStream e PointStream, que são todos objetos de modelo. A topologia da saída é determinada pelo respectivo tipo de objeto, enquanto o formato dos vértices anexados ao fluxo é determinado pelo tipo de modelo.

Quando uma saída de sombreador de geometria é identificada como um Valor Interpretado do Sistema (por exemplo, SV_RenderTargetArrayIndex ou SV_Position), o hardware examina esses dados e executa algum comportamento dependente do valor, além de poder passar os próprios dados para o próximo estágio do sombreador para entrada. Quando essa saída de dados do sombreador de geometria tem significado para o hardware em uma base por primitivo (como SV_RenderTargetArrayIndex ou SV_ViewportArrayIndex), em vez de por vértice (como SV_ClipDistance[n] ou SV_Position), os dados por primitivo são obtidos do vértice à esquerda emitido para o primitivo.

Primitivos parcialmente concluídos podem ser gerados pelo sombreador de geometria se o sombreador de geometria terminar e o primitivo estiver incompleto. Primitivos incompletos são silenciosamente descartados. Isso é semelhante à maneira como a IA trata primitivos parcialmente concluídos.

O sombreador de geometria pode executar operações de amostragem de carga e textura em que os derivados do espaço de tela não são necessários (samplelevel, samplecmplevelzero, samplegrad).

Pipeline de elementos gráficos