Estágio de sombreador Hull (HS)

O estágio Hull Shader (HS) é um dos estágios de mosaico, que divide com eficiência uma única superfície de um modelo em vários triângulos. O estágio Hull Shader (HS) produz um patch de geometria (e constantes de patch) que correspondem a cada patch de entrada (quad, triângulo ou linha). Um sombreador de casco é invocado uma vez por patch e transforma pontos de controle de entrada que definem uma superfície de baixa ordem em pontos de controle que compõem um patch. Ele também faz alguns cálculos por patch para fornecer dados para o estágio TS (Tessellator) e o estágio DS (Sombreador de Domínio).

Finalidade e usos

Diagrama do estágio do sombreador de casco

Os três estágios de mosaico trabalham juntos para converter superfícies de ordem superior (que mantêm o modelo simples e eficiente) em muitos triângulos para renderização detalhada dentro do pipeline gráfico. Os estágios de mosaico incluem o estágio HS (Sombreador de Casco), o estágio TS (Mosaico) e o estágio DS (Sombreador de Domínio).

O estágio HS (Sombreador de Casco) é um estágio de sombreador programável. Um sombreador de casco é implementado com uma função HLSL.

Um sombreador de casco opera em duas fases: uma fase de ponto de controle e uma fase constante de patch, que são executadas em paralelo pelo hardware. O compilador HLSL extrai o paralelismo em um sombreador de casco e o codifica em bytecode que orienta o hardware.

  • A fase de ponto de controle opera uma vez para cada ponto de controle, lendo os pontos de controle de um patch e gerando um ponto de controle de saída (identificado por um ControlPointID).
  • A fase constante de patch opera uma vez por patch para gerar fatores de mosaico de borda e outras constantes por patch. Internamente, muitas fases constantes de patch podem ser executadas ao mesmo tempo. A fase constante de patch tem acesso somente leitura a todos os pontos de controle de entrada e saída.

Entrada

Entre 1 e 32 pontos de controle de entrada, que juntos definem uma superfície de baixa ordem.

  • O sombreador de casco declara o estado exigido pelo estágio TS (Tessellator). Isso inclui informações como o número de pontos de controle, o tipo de face do patch e o tipo de particionamento a ser usado ao fazer o mosaico. Essas informações aparecem como declarações normalmente na frente do código do sombreador.
  • Os fatores de mosaico determinam quanto subdividir cada patch.

Saída

Entre 1 e 32 pontos de controle de saída, que juntos formam um patch.

  • A saída do sombreador está entre 1 e 32 pontos de controle, independentemente do número de fatores de mosaico. A saída de pontos de controle de um sombreador de casco pode ser consumida pelo estágio do sombreador de domínio. Os dados constantes de patch podem ser consumidos por um sombreador de domínio. Os fatores de mosaico podem ser consumidos pelo estágio TS (Tessellator) e pelo estágio DS (Sombreador de Domínio).
  • Se o sombreador de casco definir qualquer fator de mosaico de borda como ≤ 0 ou NaN, o patch será eliminado (omitido). Como resultado, o estágio do mosaico pode ou não ser executado, o sombreador de domínio não será executado e nenhuma saída visível será produzida para esse patch.

Exemplo

[patchsize(12)]
[patchconstantfunc(MyPatchConstantFunc)]
MyOutPoint main(uint Id : SV_ControlPointID,
     InputPatch<MyInPoint, 12> InPts)
{
     MyOutPoint result;
     
     ...
     
     result = TransformControlPoint( InPts[Id] );

     return result;
}

Consulte Como criar um sombreador de casco.

Pipeline de elementos gráficos