Domanda

Cosa sono gli shader Vertex e Pixel?

Qual è la differenza tra loro? Qual è il migliore?

È stato utile?

Soluzione

Un Pixel Shader è un componente GPU (Graphic Processing Unit) che può essere programmato per funzionare su una base per pixel e prenditi cura di cose come l'illuminazione e il bump mapping.

Un Vertex Shader è anche un componente GPU ed è anche programmato utilizzando un linguaggio specifico simile ad un assembly , come i pixel shader, ma sono orientati alla geometria della scena e possono fare cose come aggiungere bordi di silhouette di cartoni animati agli oggetti, ecc.

Nessuno dei due è migliore dell'altro, ognuno ha i loro usi specifici. La maggior parte delle moderne schede grafiche che supportano DirectX 9 o meglio includono queste funzionalità.

Esistono più risorse sul Web per comprendere meglio come utilizzare queste cose. NVidia e ATI in particolare sono buone risorse per i documenti su questo argomento.

Altri suggerimenti

DirectX 10 e OpenGL 3 hanno introdotto Geometry Shader come terzo tipo.

Nel rendering dell'ordine della pipeline -

Vertex Shader : prende un singolo punto e può regolarlo. Può essere utilizzato per elaborare calcoli complessi di illuminazione dei vertici ** come impostazione per la fase successiva e / o deformare i punti intorno (oscillazione, scala, ecc.)

ogni primitiva risultante viene passata a

Geometry Shader : prende ogni primitiva trasformata (triangolo, ecc.) e può eseguire calcoli su di essa. Questo può aggiungere nuovi punti, portarli via o spostarli come richiesto. Questo può essere usato per aggiungere o rimuovere dinamicamente livelli di dettaglio da una singola mesh di base, creare mesh matematiche basate su un punto (per sistemi complessi di particelle) e altre attività simili.

ogni primitiva risultante viene convertita in scanline e ogni pixel coperto dalle span viene passato attraverso

Pixel Shader (Fragment Shader in OpenGL): calcola il colore di un pixel sullo schermo in base a ciò che passa lo shader di vertice, alle trame associate e ai dati aggiunti dall'utente. Questo non è in grado di leggere la schermata corrente, basta capire quale colore / trasparenza dovrebbe essere quel pixel per la primitiva corrente.

quei pixel vengono quindi inseriti nel buffer di disegno corrente (schermo, backbuffer, render-to-texture, qualunque cosa)

Tutti gli shader possono accedere a dati globali come la matrice della visione del mondo e lo sviluppatore può passare in semplici variabili che possono utilizzare per l'illuminazione o per qualsiasi altro scopo. Gli shader vengono elaborati in un linguaggio simile a un assemblatore, ma le moderne versioni DirectX e OpenGL hanno compilato compilatori di linguaggio di tipo c di alto livello costruiti rispettivamente in HLSL e GLSL. NVidia ha anche un compilatore shader chiamato CG che funziona su entrambe le API.

[modificato per riflettere l'ordine errato che avevo prima (Geometry- > Vertex- > Pixel) come notato in un commento.]

Ora ci sono 3 nuovi shader usati in DirectX 11 per la tassellatura. Il nuovo ordine completo di shader è Vertex- > Hull- > Tessellation- > Domain- > Geometry- > Pixel. Non ho ancora usato questi nuovi, quindi non sentirti qualificato per descriverli accuratamente.

Gli shader Vertex e Pixel offrono funzioni diverse all'interno della pipeline grafica. Gli shader di vertici raccolgono ed elaborano dati relativi ai vertici (posizioni, normali, texcoords).

Gli shader Pixel (o, più precisamente, Fragment) prendono valori interpolati da quelli elaborati nello shader Vertex e generano frammenti di pixel. La maggior parte del "cool" le cose sono fatte in pixel shader. È qui che avvengono cose come la ricerca delle trame e l'illuminazione.

Specifico di DirectX:

Shader:

Insieme di programmi che implementano funzioni grafiche di addizione agli oggetti che non sono definiti nella pipeline di rendering fissa. Per questo motivo possiamo avere i nostri effetti grafici in base alle nostre esigenze, ovvero non siamo più limitati a "fissi" predefiniti operazioni.

HLSL: (linguaggio di ombreggiatura di alto livello):

HLSL è un linguaggio di programmazione come C ++ che viene utilizzato per implementare shader (Pixel Shader / Vertex Shaders).

Shader di vertici:

Un vertex shader è un programma eseguito sulla GPU della scheda grafica che opera su ciascun vertice individualmente. Questo facilita la possibilità di scrivere il nostro algoritmo personalizzato per lavorare con i vertici.

Pixel Shader:

Un pixel shader è un programma eseguito sulla GPU della scheda grafica durante il processo di rasterizzazione per ciascun pixel. Ci dà la possibilità di accedere / manipolare direttamente i singoli pixel. Questo accesso diretto ai pixel ci consente di ottenere una varietà di effetti speciali, come il multitexturing, l'illuminazione per pixel, la profondità di campo, la simulazione delle nuvole, la simulazione del fuoco e sofisticate tecniche di ombreggiamento.

Nota: sia Vertex Shaders che Pixel Shaders (programmi) devono essere compilati utilizzando una versione specifica del compilatore prima dell'uso. La compilazione può essere eseguita proprio come una chiamata a un'API con i parametri richiesti come nome file, funzione voce principale ecc.

In termini di sviluppo, un pixel shader è un piccolo programma che opera su ciascun pixel singolarmente, allo stesso modo uno shader Vertex opera su ciascun vertice individualmente.

Questi possono essere usati per creare effetti speciali, ombre, luci, ecc ...

Dato che ciascun Pixel / Vertex viene utilizzato singolarmente, questi shader si prestano all'architettura altamente parallela dei moderni processori grafici.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top