Correggimi se sbaglio, ma sia i lavori Geometry Shader che Tessellation Shader devono generare vertici nella pipeline grafica. Quello che vorrei sapere è come sono diversi e quando dovrei usarne uno rispetto all'altro?
Correggimi se sbaglio, ma sia i lavori Geometry Shader che Tessellation Shader devono generare vertici nella pipeline grafica. Quello che vorrei sapere è come sono diversi e quando dovrei usarne uno rispetto all'altro?
Risposte:
In realtà no, il "lavoro" dello geometria shader (GS) è una valutazione primitiva.
Gli shader di geometria possono tessere, ma sono limitati da a) un limite superiore in-process sul numero di elementi di output, e b) esecuzione all'interno di un singolo shader ... ovviamente lo shader che istanzia alvia il secondo problema, ma gli shader di geometria complessivi sono più efficace nella valutazione primitiva e / o nell'interpolazione di valore di quanto non lo siano alla tassellatura.
In confronto, gli shader di tassellatura (TS) sono stati introdotti specificamente per eseguire la densificazione della geometria in modo che funzionino bene, siano robusti a una gamma sempre più ampia di algoritmi (inteso gioco di parole) e siano meno limitati dai buffer limitati all'output.
Daniel Rákos ha pubblicato un buon articolo sull'evoluzione GS / TS: Storia della tassellatura hardware
Quando applicare ciascuno è un caso di "utilizzare lo strumento giusto per il lavoro" ed ecco come: Costruire una bozza di conduttura approssimativa senza un tassellatore per ottenere una valutazione corretta dei primitivi in VS / GS / FS. Scorri separatamente la tassellatura basata sulla vista o sulla scena, quindi inserisci il TS davanti al GS per densificare le primitive che vengono quindi passate al tuo GS già progettato. Se vuoi provare un TS diverso, crea un'alternativa e scambialo nella pipeline ... puoi persino usare un GS istanziato per selezionare in modo dinamico il TS giusto in base alle proprietà di una primitiva!