Indice: Cosa sono gli shader e come funzionano?
Quanto appare opaco un tessuto? Come si riflette la luce sul legno laccato? Gli shader descrivono queste proprietà dei materiali nel rendering. Per una visualizzazione 3D convincente, geometria, materiale, luce e composizione dell’immagine devono essere in armonia. Questa panoramica spiega i fondamenti e illustra cosa significano per le visualizzazioni di materiali e superfici, le immagini di prodotti e le scene di interni. Puoi trovare esempi del nostro lavoro nello studio di rendering 3D.
Cosa sono gli shader?
Gli shader sono programmi utilizzati per il calcolo dei dati grafici. Nel rendering, determinano, tra le altre cose, come le superfici reagiscono alla luce. La grafica in tempo reale utilizza fasi programmabili come gli shader di vertice e di frammento sulla GPU. Nel rendering offline, i materiali vengono spesso costruiti tramite nodi; a seconda del renderer, i calcoli vengono eseguiti sulla CPU o sulla GPU. Gli shader non sono quindi limitati esclusivamente alle schede grafiche. I fondamenti tecnici sono descritti nella documentazione Khronos su GLSL e nella documentazione Microsoft su HLSL.
Un artista CGI dello studio Danthree sta controllando i campioni di tessuto per una visualizzazione 3D. Gli shader svolgono un ruolo fondamentale nella riproduzione di materiali realistici utilizzati nei rendering fotorealistici.
Cosa sono i vertex shader?
Un vertex shader elabora i vertici di un modello. Ad esempio, ne calcola la posizione per la visualizzazione sullo schermo e trasmette ulteriori dati, come le coordinate delle texture, alle fasi successive. Non determina da solo il colore finale di ciascun pixel.
Cosa sono gli shader di frammento?
Uno shader di frammento elabora i frammenti generati durante la rasterizzazione. A partire dai parametri del materiale, dalle texture e, se del caso, dai dati relativi all'illuminazione, calcola i valori cromatici e altri risultati. Un frammento non è necessariamente un pixel definitivo nell'immagine finale.
Come funzionano gli shader nel contesto del 3D?
Per una pipeline di rasterizzazione semplificata vale quanto segue: mesh, shader dei vertici, rasterizzazione, shader dei frammenti, ulteriori test e unione in un'immagine. La rasterizzazione genera frammenti dalle superfici proiettate. Le texture e le coordinate UV possono supportare il calcolo. Questo è un esempio di grafica in tempo reale, non una descrizione generale di ogni processo di rendering.
Gli editor di materiali in Unreal Engine e Unity aiutano a impostare tali calcoli. Anche i renderer offline come Arnold, V-Ray e Redshift utilizzano sistemi basati su materiali e nodi. Un materiale combina shader, parametri e, se necessario, texture. La documentazione di Unreal sui materiali e quella di Unity sul Lit Shader mostrano diverse implementazioni.
Diversi tipi di mappe shader per modelli 3D: mappa delle normali, mappa diffusa, mappa speculare. Ciascuna di queste mappe ha una funzione specifica per rendere realistiche le superfici di un modello
Che ruolo svolgono gli shader nella creazione di visualizzazioni 3D fotorealistiche?
Il Physically Based Rendering (PBR) utilizza modelli del comportamento della luce, ad esempio per la riflessione, la rugosità e la conservazione dell’energia. Ciò facilita una rappresentazione realistica dei materiali in condizioni di luce variabile. Tuttavia, non garantisce la corrispondenza con un prodotto reale: i valori dei materiali, la scala, l’illuminazione e i riferimenti devono essere coerenti tra loro. Un articolo fondamentale in materia è Physically-Based Shading at Disney. Un esempio applicativo tratto dal nostro lavoro è il progetto Barbas, con immagini di camini e una narrazione visiva a scorrimento.
Per i marchi di arredamento e di interior design, oltre alla rappresentazione dei materiali, è fondamentale il linguaggio visivo. Legno, tessuto, pietra e metallo devono essere in armonia con il prodotto; luce, prospettiva e allestimento degli spazi devono rispecchiare il marchio. Ciò vale sia per i rendering dei soggiorni che per le visualizzazioni dei bagni e le immagini delle cucine.
Gamba in legno di una sedia in 3D, realizzata con shader PBR. Questi shader simulano strutture del legno e materiali di superficie realistici in rendering 3D fotorealistici.
Quali tipi di shader esistono?
Il termine “shader” viene utilizzato a diversi livelli. Gli shader di vertice e di frammento indicano fasi tecniche di elaborazione; gli shader di superficie e di volume descrivono la rappresentazione dei materiali. Spesso ti imbatterai nei seguenti approcci:
Phong e Blinn-Phong: modelli di illuminazione classici con calcolo semplificato dei punti di luce. Non sono modelli fisici completi dei materiali, ma possono essere sufficienti per determinate applicazioni in tempo reale o rappresentazioni stilizzate.
Shader di superficie PBR: descrivono caratteristiche quali rugosità, carattere metallico, riflessione o trasmissione mediante parametri basati su principi fisici. L'implementazione concreta dipende dal renderer. Maggiori informazioni nel glossario sul rendering basato sulla fisica (Physically Based Rendering).
Shader nel ray tracing: in questo caso, le proprietà dei materiali vengono valutate nei punti in cui i raggi incontrano le superfici. Il ray tracing è una tecnica di rendering e non un tipo di materiale. Può essere utilizzato anche in tempo reale. Le differenze sono spiegate nel nostro glossario sul ray tracing.
Shader volumetrici: descrivono la diffusione, l’assorbimento e, se del caso, l’autoluminescenza all’interno di un volume, ad esempio nel caso di nebbia, fumo o vapore. La diffusione della luce al di sotto di una superficie solida, come ad esempio la cera, viene invece spesso descritta con un modello subsuperficiale all’interno del materiale della superficie.
Nodi e OSL: si tratta di metodi per creare o programmare shader, non di tipi di materiale a sé stanti. I nodi collegano visivamente le funzioni; l’Open Shading Language consente di programmare shader nei renderer che lo supportano. Un esempio è riportato nella documentazione di Arnold relativa all’OSL.
Rappresentazione 3D fotorealistica di un letto imbottito con tessuto di velluto, creata con shader premium. Gli shader consentono di visualizzare in modo realistico le texture del tessuto e i riflessi della superficie.
Cosa c'è da sapere sulle diverse mappe degli shader 3D?
Le mappe di texture forniscono valori spazialmente diversi per uno shader, come ad esempio il colore o la ruvidità. Nel caso delle texture basate su immagini, spesso è il mapping UV a determinare quale area dell'immagine appare su quale superficie del modello. Le texture procedurali e altre proiezioni possono funzionare anche senza unwrapping manuale delle UV.
Non tutti i materiali richiedono tutte le mappe. A fare la differenza sono gli input dello shader e le caratteristiche che il prodotto deve presentare:
Colore di base: il colore di base del materiale senza illuminazione o riflessi incorporati nella texture. Il modo in cui viene utilizzato per la riflessione diffusa o metallica dipende dal modello del materiale.
Rugosità: Descrive la rugosità microscopica. Influisce sulla nitidezza o sull'ampiezza dei riflessi.
Metalness: nel modello Metallic Roughness distingue tra comportamento metallico e non metallico. Vernici, rivestimenti e superfici miste richiedono un’adeguata suddivisione dei materiali.
Mappa delle normali: Modifica la direzione delle normali della superficie per il calcolo dell'illuminazione. In questo modo si ottengono dettagli visibili senza modificare effettivamente la geometria e il profilo dell'oggetto.
Mappa di spostamento: Sposta geometricamente la superficie e può quindi modificare anche il profilo. In alternativa, è possibile utilizzare una mappa di altezza (Height Map) per il bump mapping; in tal caso, essa modifica solo il calcolo dell'illuminazione.
Specular e IOR: descrivono, a seconda del modello del materiale, le proprietà di riflessione e l'indice di rifrazione. Tali parametri possono essere rilevanti anche nei moderni shader PBR, non solo nei vecchi workflow Specular-Glossiness.
Opacità e ritaglio: controllano l'opacità o le aree ritagliate, ad esempio i motivi traforati. La rifrazione della luce attraverso il vetro richiede inoltre un modello di trasmissione e rifrazione adeguato.
Emissione: descrive la luce propria, ad esempio per i display. Il fatto che illumini l'ambiente circostante e l'intensità di tale illuminazione dipendono dal renderer e dalle sue impostazioni.
Occlusione ambientale: Approssima l'occlusione nelle cavità e nei punti di contatto. Non sostituisce un calcolo completo dell'illuminazione e non dovrebbe causare un doppio oscuramento.
Per le texture delle immagini, controlla la scala, l’orientamento, le giunture e le distorsioni sul modello. Un test di ripetibilità mostra solo se un’immagine di texture può essere ripetuta lungo i bordi. Non sostituisce né il controllo del materiale alla luce né il confronto con un riferimento. Il nostro articolo sul texture baking spiega come preparare le informazioni relative alle texture.
Come si sceglie lo shader giusto?
Per la scelta di uno shader, il materiale, l’applicazione di destinazione e i riferimenti disponibili sono più importanti di un elenco di effetti il più lungo possibile. Questi cinque punti aiutano a orientarsi:
1) Materiale e caso d'uso
I materiali come il tessuto, il legno, la pietra e il metallo reagiscono in modo diverso alla luce. Uno strato di vernice richiede impostazioni diverse rispetto al metallo spazzolato. Nelle applicazioni in tempo reale, il dispositivo di destinazione e la frequenza dei fotogrammi desiderata limitano la complessità dei materiali; nel caso delle immagini di prodotto renderizzate, invece, è il tempo di rendering disponibile a rivestire un ruolo fondamentale.
Inquadratura ravvicinata di una sedia moderna, visualizzata con shader PBR per una resa realistica dei materiali e delle texture in 3D. Gli shader PBR sono fondamentali per i rendering basati su principi fisici.
2) Renderer e pipeline
Non sempre è possibile trasferire un materiale da un renderer all'altro senza modifiche. Verifica gli shader, i canali di texture, gli spazi colore e i formati di esportazione supportati. Le nozioni di base sui materiali di Unreal Engine e la documentazione relativa a Unity HDRP Lit indicano quali parametri sono richiesti dalla rispettiva applicazione.
3) Illuminazione e identità aziendale
Valuta i materiali in condizioni di illuminazione ben definite e successivamente nella scena prevista. Gli ambienti HDRI, le luci area e i profili di illuminazione IES hanno funzioni diverse. Anche il motore di rendering, la gestione del colore e l’output influenzano il risultato. Il linguaggio visivo nasce da questa interazione, non solo dallo shader.
4) Prestazioni e scalabilità
Nel caso delle varianti di prodotto, sono utili i materiali riutilizzabili e le versioni tracciabili. Per i visualizzatori in tempo reale è necessario verificare i canali dei materiali supportati, le dimensioni delle texture e i dispositivi di destinazione. L'esportazione in formato glTF o GLB non riproduce automaticamente tutte le funzioni di uno shader offline.
5) Team ed esperienza
Il lavoro sui materiali comprende l’osservazione e il confronto: in quale direzione corre la trama del tessuto, qual è l’ampiezza di un riflesso, come appare la superficie nei dettagli? Il nostro team CGI coniuga questa comprensione del prodotto con la progettazione dell’illuminazione, della prospettiva e dello spazio del marchio.
Conclusione: cosa sono gli shader e a cosa servono?
Gli shader determinano il modo in cui i materiali vengono calcolati durante il rendering. Per ottenere immagini di prodotto convincenti, è necessario che anche la geometria, le texture, l’illuminazione e la gestione del colore siano corrette. Adattiamo i materiali digitali ai tuoi riferimenti e li utilizziamo nelle immagini di prodotto, nelle scene ambientali e nelle animazioni. Per definire quali siano le basi necessarie a tal fine, analizziamo il tuo prodotto e l’utilizzo previsto.
Due artisti CGI dello studio Danthree stanno lavorando insieme alla realizzazione di shader fotorealistici per una visualizzazione 3D. Gli shader svolgono un ruolo fondamentale nella rappresentazione di superfici realistiche nella grafica 3D.