Partager via


Étape Hull Shader (HS)

L’étape Hull Shader (HS) est l’une des phases de pavage, qui décompose efficacement une seule surface d’un modèle en de nombreux triangles. L’étape Du nuanceur de coque (HS) produit un patch géométrique (et des constantes de patch) qui correspondent à chaque correctif d’entrée (quad, triangle ou ligne). Un nuanceur de coque est appelé une fois par patch, et il transforme les points de contrôle d’entrée qui définissent une surface d’ordre faible en points de contrôle qui composent un patch. Il effectue également des calculs par correctif pour fournir des données pour l’étape Tessellator (TS) et l’étape Du nuanceur de domaine (DS).

Objectif et utilisations

diagramme de l’étape hull-shader

Les trois phases de pavage fonctionnent ensemble pour convertir des surfaces d’ordre supérieur (qui gardent le modèle simple et efficace) en de nombreux triangles pour un rendu détaillé dans le pipeline graphique. Les étapes de pavage incluent l’étape Hull Shader (HS), l’étape De Tessellator (TS) et l’étape Domain Shader (DS).

L’étape Hull Shader (HS) est une étape de nuanceur programmable. Un nuanceur de coque est implémenté avec une fonction HLSL.

Un nuanceur de coque fonctionne en deux phases : une phase de point de contrôle et une phase de constante de patch, qui sont exécutées en parallèle par le matériel. Le compilateur HLSL extrait le parallélisme dans un nuanceur de coque et l’encode en bytecode qui pilote le matériel.

  • La phase de point de contrôle fonctionne une fois pour chaque point de contrôle, en lisant les points de contrôle d’un correctif et en générant un point de contrôle de sortie (identifié par un ControlPointID).
  • La phase de constante de patch fonctionne une fois par correctif pour générer des facteurs de pavage de bord et d’autres constantes par patch. En interne, de nombreuses phases de constante patch peuvent s’exécuter en même temps. La phase de constante de correctif a un accès en lecture seule à tous les points de contrôle d’entrée et de sortie.

Entrée

Entre 1 et 32 points de contrôle d’entrée, qui définissent ensemble une surface de faible ordre.

  • Le nuanceur de coque déclare l’état requis par l’étape de Tessellator (TS). Cela inclut des informations telles que le nombre de points de contrôle, le type de face de patch et le type de partitionnement à utiliser lors de la mise en forme. Ces informations apparaissent sous forme de déclarations généralement au début du code du nuanceur.
  • Les facteurs de pavage déterminent la quantité à subdiviser chaque patch.

Sortie

Entre 1 et 32 points de contrôle de sortie, qui constituent ensemble un correctif.

  • La sortie du nuanceur est comprise entre 1 et 32 points de contrôle, quel que soit le nombre de facteurs de pavage. La sortie des points de contrôle d’un nuanceur de coque peut être consommée par l’étape de nuanceur de domaine. Les données constantes correctives peuvent être consommées par un nuanceur de domaine. Les facteurs de pavage peuvent être consommés par l’étape de Tessellator (TS) et l’étape du nuanceur de domaine (DS).
  • Si le nuanceur de coque définit un facteur de pavage de bord sur ≤ 0 ou NaN, le patch est supprimé (omis). Par conséquent, l’étape du tessellateur peut s’exécuter ou non, le nuanceur de domaine ne s’exécute pas et aucune sortie visible n’est générée pour ce correctif.

Exemple

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

     return result;
}

Consultez Guide pratique pour créer un nuanceur de coque.

Pipeline graphique