2014-08-29 13 views
11

Sto cercando di sviluppare una comprensione di alto livello della pipeline grafica. Una cosa che per me non ha molto senso è il motivo per cui lo shader Geometry esiste. Entrambi gli shader Tessellation e Geometry sembrano fare la stessa cosa per me. Qualcuno può spiegarmi cosa fa lo shader Geometry diverso dallo shader a tessellation che giustifica la sua esistenza?Differenza tra shader di tessellation e shader di geometria

risposta

18

Lo shader di tessellation è per suddivisione variabile. Una parte importante sono le informazioni di adiacenza in modo da poter eseguire correttamente il livellamento e non finire con gli spazi vuoti. Potresti fare una suddivisione limitata con uno shader di geometria, ma non è proprio questo il motivo.

Gli shader di geometria funzionano come primitivi. Ad esempio, se devi fare cose per ogni triangolo (come this), fallo in uno shader di geometria. Ho sentito dell'estrusione del volume delle ombre in corso. C'è anche una "rasterizzazione conservativa" in cui puoi estendere i bordi dei triangoli in modo che ogni pixel intersecato ottenga un frammento. Gli esempi sono piuttosto specifici per le applicazioni.

Sì, possono anche generare più geometrie dell'input ma lo fanno non in scala. Funzionano alla grande se vuoi disegnare particelle e trasformare i punti in geometrie molto semplici. Ho implementato i cubi in marcia un numero di volte usando anche gli shader geometrici. Funziona alla grande con trasformare il feedback per salvare la mesh risultante.

La retroazione di trasformazione è stata utilizzata anche con lo shader della geometria per eseguire più operazioni di calcolo. Un meccanismo particolarmente utile è che esegue la compattazione del flusso per voi (racchiude in modo restrittivo la sua quantità variabile di output in modo tale che non vi siano lacune nell'array risultante).

L'altra cosa molto importante che fornisce uno shader di geometria è il routing a destinazioni di rendering a più livelli (matrici di trama, facce di un cubo, finestre multiple), qualcosa che deve essere fatto per-primitivo. Ad esempio, è possibile eseguire il rendering delle mappe shadow del cubo per le luci puntiformi in una singola passata, duplicando e proiettando la geometria 6 volte su ciascuna delle facce del cubo.

Non è esattamente una risposta completa, ma si spera che dia il succo delle differenze.

Vedere anche:

+1

Questo certamente aiuta. Inoltre, sono sicuro che mentre approfondisco la grafica sempre di più, questa risposta avrà sempre più senso, quindi mi riferirò ad essa. Grazie! –