Cosa sono gli Shaders: una piccola introduzione...
In Computer Grafica 3D, con il termine Shader (letteralmente, "ombreggiatore") ci si riferisce ad un insieme di istruzioni e procedure (software) atte a definire particolari effetti di illuminazione e colorazione (ombreggiatura, appunto) per il rendering degli elementi della scena 3D.
I processori delle schede video (GPU) seguono una pipeline di rendering programmabile, che consente -proprio attraverso l'implementazione degli shaders- di definire effetti particolari o personalizzati per il rendering delle primitive (le geometrie).
Inizialmente vi era solo il cosiddetto pixel shading, ma in seguito sono state aggiunte altre fasi nella pipeline di rendering.
Le API per la programmazione degli shaders vengono messe a disposizione da diverse librerie di programmazione delle GPU, come Direct3D e OpenGL (OpenGL mette a disposizione un linguaggio ad hoc: GLSL, ossia OpenGL Shading Language, mentre Direct3D fornisce il linguaggio HLSL, ossia High Level Shader Language).
Proprio le librerie Direct3D e OpenGL utilizzano, ad esempio, tre tipi di shaders:
-
Vertex Shader --- riguarda ciascun vertice, che deve essere rappresentato (partendo dalle coordinate 3D virtuali) sullo schermo (2D). E' possibile quindi agire su posizione, colore e coordinate delle textures di ciascun vertice da rappresentare a video.
-
Geometry Shader --- lavora sulle primitive in arrivo dal Vertex Shader. E' in grado di aggiungere o rimuovere vertici o intere primitive alle/dalle mesh (operazioni non effettuabili dal Vertex Shader). Diventa particolarmente utile per aggiungere dettagli (ad esempio, particelle di sistemi particellari o volumetrici, che sarebbero troppo "pesanti" da far calcolare alla CPU che genera i vertici delle geometrie, oppure volumi per la luce o le ombre volumetriche) direttamente in fase di rendering, liberando il processore da questo compito.
-
Pixel Shader (o fragment shader, come è noto in OpenGL) --- lavora direttamente sui pixel dell'immagine (già rasterizzata, quindi), implementando effetti legati, ad esempio, all'illuminazione, alla tonalità del colore, al bump mapping, alle ombre, ecc...
Ci si riferisce a tutti e tre gli shaders insieme con il termine unified shader model.
Gli shaders vengono applicati, per ciascun frame, su diverse parti dell'immagine, o addirittura su singoli pixel o vertici, per cui molte GPU hanno architetture multi-core per effettuare i vari calcoli in parallelo (se i vari elementi sono tra loro indipendenti, più processori possono dividersi il lavoro tra loro ed impiegare così meno tempo).
|