Condividi tramite


Fase hull shader (HS)

La fase Hull Shader (HS) è una delle fasi di tassellatura, che suddivide in modo efficiente una singola superficie di un modello in molti triangoli. La fase Hull Shader (HS) produce una patch geometrica (e costanti patch) che corrispondono a ogni patch di input (quad, triangolo o linea). Uno hull shader viene richiamato una volta per patch e trasforma i punti di controllo di input che definiscono una superficie di ordine inferiore in punti di controllo che costituiscono una patch. Esegue anche alcuni calcoli per patch in modo da fornire dati per la fase Tessellator (TS) e la fase Domain Shader (DS).

Scopo e usi

diagramma della fase hull-shader

Le fasi di tassellatura interagiscono per convertire le superfici di ordine superiore (che mantengono il modello semplice ed efficiente) in molti triangoli per il rendering dettagliato all'interno della pipeline grafica Direct3D. Le fasi di tassellatura includono le fasi Hull Shader (HS) Tessellator (TS) e Domain Shader (DS).

La fase Hull Shader (HS) è una fase programmabile dello shader. Uno hull shader viene implementato con una funzione HLSL.

Uno hull shader opera in due fasi: una fase del punto di controllo e una fase costante della patch, che vengono eseguite in parallelo dall'hardware. Il compilatore HLSL estrae il parallelismo in uno hull shader e lo codifica in bytecode che guida l'hardware.

  • La fase del punto di controllo funziona una sola volta per ogni punto di controllo, la lettura dei punti di controllo per una patch e la generazione di un punto di controllo di output (identificato da un ControlPointID).
  • La fase costante della patch funziona una volta per patch per generare fattori di tassellatura perimetrale e altre costanti per patch. Internamente, molte fasi costanti della patch possono essere eseguite contemporaneamente. La fase-constante della patch ha accesso in sola lettura a tutti i punti di controllo di input e output.

Input

Tra 1 e 32 punti di controllo di input, che insieme definiscono una superficie di ordine basso.

  • Lo hull shader dichiara lo stato richiesto dalla fase Tessellator (TS). Sono incluse informazioni quali il numero di punti di controllo, il tipo di faccia di patch e il tipo di partizionamento da usare durante il tassellamento. Queste informazioni vengono visualizzate come dichiarazioni in genere nella parte anteriore del codice dello shader.
  • I fattori di tassellatura determinano quanto suddividere ogni patch.

Output

Tra 1 e 32 punti di controllo di output, che insieme costituiscono una patch.

  • L'output dello shader è compreso tra 1 e 32 punti di controllo, indipendentemente dal numero di fattori di tassellatura. L'output dei punti di controllo di uno hull shader può essere utilizzato dalla fase domain-shader. I dati costanti della patch possono essere utilizzati da uno shader di dominio. I fattori di tassellatura possono essere utilizzati dalla fase Tessellator (TS) e dalla fase Domain Shader (DS).
  • Se lo hull shader imposta qualsiasi fattore di tassellatura del bordo su ≤ 0 o NaN, la patch verrà ignorata (omessa). Di conseguenza, la fase del tassellatore potrebbe essere eseguita o meno, lo shader di dominio non verrà eseguito e non verrà generato alcun output visibile per tale patch.

Esempio

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

     return result;
}

Vedere Procedura: creazione di uno hull shader.

Pipeline grafica