Shader
Da Wikipedia, l'enciclopedia libera.
La parola inglese shader indica uno strumento della computer grafica 3D che generalmente è utilizzato per determinare l'aspetto finale della superficie di un oggetto. Consiste essenzialmente in un insieme di istruzioni, quindi è un programma sottoposto ad alcune restrizioni secondo il paradigma dello stream processing.
Indice |
[modifica] Caratteristiche principali
Gli shader devono riprodurre il comportamento fisico del materiale che compone l'oggetto cui sono applicati. Si può quindi creare uno shader per i metalli, uno per la plastica, uno per il vetro e così via, e riutilizzarli più volte all'interno di una scena. Una volta modellato un oggetto complesso, come può essere ad esempio una finestra, si assocerà al modello della cornice uno shader per il legno, uno per la maniglia, e uno per il vetro. La caratteristica riutilizzabilità di questo strumento è preziosa nel lavoro con la computer grafica 3D, sia in termini di tempo che di risultato finale.
Per determinare l'apparenza della superficie, essi utilizzano tecniche già consolidate come l'applicazione di texture, gestione delle ombre. Gli shader possono anche essere usati per applicare effetti di postprocessing. Essendo programmi a tutti gli effetti, è possibile utilizzarli anche per la replicazione di eventi fisici molto complessi quali collisioni e simulazioni fluidodinamiche. Nell'ambito dell'ottica sono abitualmente usati per simulare: diffusione, riflessione, rifrazione, e dispersione della luce.
[modifica] Shader nelle pipeline grafiche
Le moderne Graphics Processing Unit dispongono di diverse pipeline adibite alla trasformazione di una scena 3D in un'immagine raster che possa essere rappresentata sullo schermo. Tali pipeline svolgono una serie di operazioni basate su shader programmabili.
[modifica] Tipologie di shader
Le librerie grafiche DirectX e OpenGL utilizzano tre tipologie di shader, che sfruttano le capacità di shading delle Graphics Processing Unit presenti nelle schede video.
- Vertex shader - gestisce la posizione dei vertici di un oggetto, pertanto ne può alterare solamente la forma
- Geometry shader - viene usato per combinare una serie di vertici per formare un oggetto più complesso al quale applicare effetti di pixel shading
- Pixel shader - elabora i singoli pixel di un oggetto, per applicare texture o effetti come bump mapping o nebbia.
Con la decima versione delle librerie DirectX, integrate in Microsoft Windows Vista, le tre tipologie sono state riunite nell'Unified shader model, o Shader Model 4.0.
[modifica] Schema semplifcato di una pipeline grafica
- La CPU invia le istruzioni e le coordinate 3D della scena alla GPU
- Nel vertex shader programmabile viene trasformata la geometrie e vengono applicati alcuni effetti di illuminazione
- Il geometry shader, se presente, trasforma ulteriormente la geometria della scena
- La geometria viene riprodotta in triangoli, che vengono ulteriormente trasformati in quad (ogni quad è una primitiva di 2x2 pixel)
- Vengono applicati ulteriori effetti tramite il pixel shader
- Viene effettuato il test di visibilità (z-test): se un pixel è visibile, viene scritto nel framebuffer per l'output su schermo.