2009-05-07 6 views
56

Cosa sono gli ombreggiatori Vertex e Pixel?Cosa sono gli ombreggiatori Vertex e Pixel?

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

+1

possibile duplicato di [Vertex shader vs Fragment Shader] (http://stackoverflow.com/questions/4421261/vertex -shader-vs-fragment-shader) –

risposta

36

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

Un Vertex Shader è anche componente GPU ed è anche programmato utilizzando un linguaggio assembly simile specifico, come pixel shader, ma sono orientate alla geometria scena e possono fare cose come aggiungere bordi di silhouette cartoony agli oggetti, ecc

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

Ci sono più risorse sul Web per ottenere una migliore comprensione di come utilizzare queste cose. Soprattutto NVidia e ATI sono buone risorse per i documenti su questo argomento.

+13

Gli shader sono scritti anche in linguaggi di alto livello (non assemblati) come Cg, HLSL e GLSL. –

11

Vertex e Pixel shader forniscono diverse funzioni all'interno della pipeline grafica. I vertex shader acquisiscono ed elaborano dati relativi ai vertici (posizioni, normali, texcoord).

Gli shader Pixel (o più accuratamente, Fragment) prendono i valori interpolati da quelli elaborati nello shader Vertex e generano frammenti di pixel. La maggior parte delle cose "interessanti" viene eseguita con pixel shader. Qui è dove avvengono le ricerche sulla trama e l'illuminazione.

3

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

Questi possono essere utilizzati per creare effetti speciali, ombre, illuminazione, ecc ...

Poiché ciascun Pixel/Vertex è operato individualmente questi shader si prestano all'architettura altamente parallelo dei moderni processori grafici.

57

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

per renderne pipeline -

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

ciascuna risultante primitiva viene passato al

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

ciascuna risultante primitiva ottiene scanline convertita e ciascun pixel coperchi campata viene passato attraverso la

Pixel Shader (Fragment Shader in OpenGL) - Calcola il colore di un pixel sullo schermo in base a ciò vertex passaggi, trame rilegate e dati aggiunti dall'utente. Questo non può leggere lo schermo corrente, basta capire quale colore/trasparenza dovrebbe essere quel pixel per la primitiva corrente.

quei pixel poi vengono messe sul buffer di corrente (schermo, backbuffer, render-to-texture, qualunque)

Tutti gli shader possono accedere ai dati globali, come la matrice di visione del mondo e lo sviluppatore può passare in modo semplice variabili da utilizzare per l'illuminazione o per altri scopi. Gli shader vengono elaborati in un linguaggio simile a un assemblatore, ma le versioni moderne di DirectX e OpenGL sono state compilate in compilatori di linguaggio di alto livello in stile C, rispettivamente denominati HLSL e GLSL. NVidia ha anche un compilatore di shader chiamato CG che funziona su entrambe le API.

[Modificato in modo da riflettere l'ordine errato che avevo prima (geometria;> vertex> Pixel) come osservato in un commento.]

Ora ci sono 3 nuovi shader utilizzati in DirectX 11 per tassellazione. Il nuovo ordine shader completo è Vertex-> Hull-> Tessellation-> Domain-> Geometry-> Pixel. Non ho ancora usato questi nuovi, quindi non mi sento qualificato per descriverli in modo accurato.

+2

La pipeline di rendering è errata. I vertici vengono prima elaborati nel vertex shader e quindi i primitivi che costituiscono attraversano lo shader della geometria. Mi chiedo perché nessun altro si sia lamentato di questo ordine sbagliato, ancora. –

+2

Lo shader tessellation consiste di * Hull shader * e * Domain shader *. Lo stage intermedio * Tessellator * non è programmabile. Quindi ci sono solo due shader aggiuntivi. Gli equivalenti GL dovrebbero essere * Tessellation Control * e * Tessellation Evaluation *. –

3

DirectX specifico:

Shader:

insieme di programmi che implementa funzioni grafiche aggiunta agli oggetti che non sono definiti nella pipeline di rendering fisso. Per questo motivo possiamo avere i nostri effetti grafici in base alle nostre esigenze, ad esempio. Non siamo più limitati alle operazioni "fisse" predefinite .

HLSL: (High-Level Shading Language):

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

Vertex Shaders:

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

Shaders

Pixel:

Un pixel shader è un programma eseguito su GPU della scheda grafica durante il processo di rasterizzazione per ogni 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 della nuvola, la simulazione del fuoco e le sofisticate tecniche di shadowing.

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 come una chiamata a un'API con parametri richiesti come nome file, funzione di inserimento principale, ecc.,