Gli shader sono piccoli programmi che vengono eseguiti sulla GPU come parte del processo di rendering. Si occupano di tutto, dalla trasformazione della geometria dei modelli 3D all'applicazione di texture, illuminazione, ombre ed effetti di post-elaborazione. Sono fondamentali per i giochi moderni e contribuiscono a renderli così impressionanti.
Tuttavia, non è sempre stato così. Le prime schede grafiche si basavano su hardware a funzione fissa, con unità separate dedicate a compiti quali la texturizzazione e l'illuminazione. Sebbene queste unità fossero potenti per l'epoca, erano anche rigide. Man mano che i giochi diventavano più complessi e ambiziosi dal punto di vista visivo, l'hardware fisso limitava sia gli effetti visivi che la libertà creativa. Gli shader programmabili hanno eliminato questi limiti.
I primi shader ampiamente utilizzati erano i pixel shader. Questi determinano il colore finale di ogni pixel sullo schermo e possono gestire calcoli di illuminazione, ombre, texture, trasparenza ed effetti di post-elaborazione come sfocatura o cel shading. Subito dopo sono stati introdotti i vertex shader, che consentono agli sviluppatori di manipolare i dati dei vertici come posizione, colore e coordinate delle texture prima del rendering della geometria.
Successivamente sono stati introdotti gli shader geometrici, in grado di generare e modificare la geometria al volo all'interno della pipeline grafica. Sebbene oggi non siano molto utilizzati a causa dei costi in termini di prestazioni, hanno consentito di ottenere effetti quali la geometria procedurale e gli effetti particellari. Gli shader di tassellatura si basano su questo concetto, aumentando dinamicamente i dettagli geometrici e rendendo le superfici più uniformi senza memorizzare ulteriori dati del modello.
Più recentemente, le API moderne hanno introdotto i task shader e i mesh shader. Questi sostituiscono parti delle tradizionali fasi di vertex, geometria e tassellatura con un sistema più flessibile che offre agli sviluppatori un maggiore controllo sulla generazione e l'elaborazione della geometria.
Gli shader ray tracing sono l'ultima novità. Vengono utilizzati per effetti quali riflessi, ombre e illuminazione globale tracciando i percorsi dei raggi di luce attraverso una scena. Sono supportati da DirectX Raytracing e Vulkan e richiedono schede grafiche relativamente moderne per funzionare a livelli di prestazioni giocabili.
Se gli shader sono questo, perché ci vuole così tanto tempo per precaricarli e cosa significa effettivamente precaricare?
Il termine è leggermente fuorviante. In pratica, il precaricamento degli shader significa compilare e memorizzare nella cache gli shader piuttosto che semplicemente caricarli. Gli sviluppatori di giochi possono compilare gli shader al volo mentre si gioca, oppure compilarli in anticipo prima dell'inizio del gioco.
La compilazione degli shader durante il gioco può funzionare in casi semplici, ma spesso causa rallentamenti e interruzioni quando si incontrano nuovi effetti o aree. Se è necessario compilare molti shader contemporaneamente, i tempi di frame possono aumentare notevolmente, motivo per cui questo approccio è così evidente nei giochi open world. Una compilazione eccessiva al volo è spesso segno di una scarsa ottimizzazione del PC.
Il precaricamento degli shader evita questo problema compilandoli in anticipo e memorizzando i risultati in una cache. Una volta compilati, gli shader possono essere riutilizzati immediatamente durante il gioco, garantendo prestazioni più fluide. Lo svantaggio è che è necessario attendere la fase di compilazione degli shader la prima volta che si avvia il gioco.
Questa attesa può ripetersi dopo un aggiornamento importante del gioco o degli driver grafici, poiché i binari degli shader sono strettamente legati sia alla versione del gioco che al driver della GPU. Con gli aggiornamenti frequenti dei driver grafici, la ricompilazione degli shader diventa una frustrazione familiare per i giocatori su PC.
Perché gli sviluppatori non possono semplicemente fornire shader precompilati? Sui nostri amati PC, l'hardware e i driver sono semplicemente troppo diversi tra loro. La compilazione degli shader dipende dall'architettura della GPU, dalla versione del driver e dall'API grafica, quindi uno shader compilato che funziona su un sistema non funzionerà su un altro. Le console evitano questo problema perché sono piattaforme fisse, ma i PC non lo sono.
Quindi, la prossima volta che ti ritrovi a fissare una schermata di precaricamento dello shader, ricorda che serve a ridurre gli scatti e migliorare le prestazioni una volta che inizi a giocare. È un potere che va a tuo vantaggio.
JOIN OUR OFFICIAL CORSAIR COMMUNITIES
Join our official CORSAIR Communities! Whether you're new or old to PC Building, have questions about our products, or want to chat the latest PC, tech, and gaming trends, our community is the place for you.