Partager via


Étape Hull Shader (HS)

L’étape du nuanceur de coque (HS) est l’une des étapes de pavage, qui décomposent efficacement une surface unique d’un modèle en plusieurs triangles. L’étape du nuanceur de coque (HS) produit un patch geometry (et des constantes correctives) qui correspondent à chaque correctif d’entrée (quad, triangle ou ligne). Un nuanceur de coque est appelé une fois par patch et transforme les points de contrôle d’entrée qui définissent une surface de faible ordre en points de contrôle qui composent un patch. Il effectue également certains calculs par correctif pour fournir des données pour l’étape Tessellator (TS) et l’étape De nuanceur de domaine (DS).

Objectif et utilisations

diagramme de l’étape du nuanceur de coque

Les trois phases de pavage fonctionnent ensemble pour convertir des surfaces d’ordre supérieur (qui conservent le modèle simple et efficace) en plusieurs triangles pour un rendu détaillé dans le pipeline graphique. Les étapes de pavage incluent l’étape du nuanceur de coque (HS), l’étape Tessellator (TS) et l’étape Du nuanceur de domaine (DS).

L’étape du nuanceur de coque (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 corrective, 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 correctif fonctionne une fois par correctif pour générer des facteurs de pavage de périphérie et d’autres constantes par patch. En interne, de nombreuses phases de constantes correctives peuvent s’exécuter en même temps. La phase de constante corrective 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 Tessellator (TS). Cela inclut des informations telles que le nombre de points de contrôle, le type de visage du correctif et le type de partitionnement à utiliser lors de la tessellating. Ces informations apparaissent généralement sous forme de déclarations devant le code du nuanceur.
  • Les facteurs de pavage déterminent la quantité à subdiviser chaque correctif.

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 du 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 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 tessellator peut ou non s’exécuter, le nuanceur de domaine ne s’exécutera pas et aucune sortie visible ne sera produite 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;
}

Découvrez comment : créer un nuanceur de coque.

Pipeline graphique