Dopo l'avvento del 3D, che ha tracciato un solco epocale nella storia dei videogiochi cambiando per sempre il design e in generale l'approccio allo sviluppo dei nostri media preferiti, la curva dell'evoluzione grafica ha subito un percorso più morbido e lineare: nel corso degli anni è aumentata la potenza dell'hardware e di conseguenza sono aumentati i poligoni, sono migliorate risoluzioni e qualità delle texture, sono stati introdotti effetti particellari e infine l'illuminazione dinamica è diventata una costante.
L'avvento della prima generazione di schede grafiche NVIDIA GeForce RTX, seguito dalle più recenti GPU AMD e accompagnato dall'arrivo dell'intelligenza artificiale, con tecnologie come DLSS e FSR, ha segnato un ulteriore passo in avanti verso il traguardo del fotorealismo e alcune tecnologie che fino a quel momento erano riservate al mondo del cinema e della grafica professionale, si sono fatte strada anche nel segmento videoludico.
Stiamo parlando del Ray Tracing, una tecnica di rendering che ha rivoluzionato il modo di intendere l'illuminazione dei videogiochi, migliorandone sensibilmente la qualità grafica complessiva con ripercussioni, ancora non del tutto espresse, anche sulla fisica.
Ma che cos'è il Ray Tracing e come funziona questa tecnologia? Proviamo a scoprirlo insieme.
Ray Tracing: simulare la fisica della luce
Partendo dalla definizione, il Ray Tracing è una tecnica di rendering che simula il percorso della luce attraverso una scena virtuale, calcolando in maniera dettagliata la sua interazione con gli oggetti presenti nella scena.
Questo avviene seguendo il percorso dei raggi luminosi dalla sorgente agli occhi del giocatore: quando un raggio colpisce un oggetto, possono verificarsi diverse interazioni, come riflessione, rifrazione o assorbimento. Queste interazioni vengono calcolate in modo preciso per ogni raggio, producendo effetti di luce naturali che simulano appunto il comportamento reale della luce.
Il Ray Tracing utilizza complessi algoritmi per determinare il comportamento dei raggi luminosi, tenendo conto di fattori come la geometria degli oggetti, i materiali e le proprietà ottiche delle superfici. Ogni raggio viene tracciato attraverso la scena, interagendo con gli oggetti lungo il percorso e accumulando informazioni sull'illuminazione e sul colore finale dei pixel incontrati lungo il tragitto. Questo processo richiede una potenza di calcolo significativa: più raggi vengono simulati, più risorse hardware sono necessarie. Utilizzare il Ray Tracing per renderizzare l'intera scena in tempo reale è quindi, ad oggi, un processo troppo impegnativo anche per gli hardware più avanzati.
Per ovviare a questo problema vengono quindi "proiettati" solo i raggi che contribuiscono effettivamente alla composizione della scena, eliminando quelli che non interagiscono direttamente con gli oggetti presenti o che rimbalzano in maniera indefinita.
Tra le tecniche principali che vengono utilizzate per ottimizzare il Ray Tracing all'interno di un videogioco, vanno citate il Ray Casting, il Bounding Volume Hierarchy e il Denoising Filtering: il processo di base nel Ray Tracing coinvolge il "lancio" di raggi, Ray Casting appunto, dalla telecamera attraverso ogni pixel dell'immagine nella scena virtuale. Ogni raggio rappresenta un percorso che la luce potrebbe seguire dalla sorgente luminosa fino alla telecamera. Durante questo processo, vengono intersecati gli oggetti presenti nella scena per determinare quali elementi sono visibili dalla prospettiva della telecamera e quindi, per esempio, dal punto di vista del giocatore.
Il Bounding Volume Hierarchy (BVH) o "Gerarchia dei volumi di delimitazione", è una tecnica utilizzata nell'ottimizzazione del Ray Tracing e in altre applicazioni di grafica computerizzata per accelerare il processo di rilevamento delle collisioni e il rendering di scene complesse. La BVH organizza gli oggetti all'interno di una scena in una struttura gerarchica di volumi di delimitazione, chiamati bounding volume (volumi di delimitazione). Questi bounding volumes sono generalmente semplici da calcolare e descrivono in modo approssimativo la forma e la posizione degli oggetti all'interno della scena. Nel contesto del Ray Tracing, la BVH viene utilizzata per determinare quali oggetti o parti della scena devono essere calcolate per l'intersezione con i raggi di luce lanciati dalla telecamera. Utilizzando la BVH, è possibile ridurre significativamente il numero di intersezioni da calcolare, poiché è possibile evitare l'analisi di oggetti che non sono inclusi nel percorso del raggio di luce.
Per correggere poi il "rumore" generato dalle approssimazioni vengono infine utilizzati i cosiddetti Denoiser, di cui abbiamo parlato approfonditamente nella nostra guida al DLSS 3.5 e alla Ray Reconstruction.
Va infine sottolineato che la maggior parte delle applicazioni del Ray Tracing nei videogiochi moderni utilizzano tecniche di rendering ibrido, che chiamano in causa la più tradizionale rasterizzazione.
La rasterizzazione è il metodo tradizionale utilizzato nelle GPU per renderizzare la grafica 3D in tempo reale: questa inizia con la descrizione geometrica di una scena, che comprende vertici, triangoli e altri elementi geometrici. La scena viene successivamente proiettata su uno schermo piatto, che è suddiviso in pixel: la GPU determina quali triangoli della scena si sovrappongono con quegli stessi pixel. Infine viene applicata una serie di operazioni, come trasformazioni geometriche, illuminazione, texture mapping e shading, per calcolare il colore finale di ogni pixel sulla base dei triangoli sovrapposti. Per quanto pesante, il processo della rasterizzazione è meno gravoso rispetto al Ray Tracing: a quest'ultimo vengono delegate riflessioni, ombre e rifrazioni principali, mentre per i calcoli di illuminazione più semplici si utilizza la rasterizzazione.
In questo modo è possibile ottenere risultati spettacolari dal punto di vista della qualità grafica, senza tuttavia compromettere le prestazioni di gioco.
Quando l’hardware fa la differenza
Il Ray Tracing richiede una potenza di calcolo davvero importante e per ottenere risultati ottimali senza compromettere la fruibilità di un gioco è necessario un hardware appositamente progettato. In questo senso, l'approccio intrapreso dai vari produttori come NVIDIA, AMD è sostanzialmente differente.
A guidare la "rivoluzione" dell'illuminazione è stata l'azienda guidata da Jensen Huang: NVIDIA ha infatti lanciato sul mercato una linea di GPU dotata di unità specializzate nel calcolo del Ray Tracing (e successivamente del Path Tracing). Sin dalla prima iterazione delle schede grafiche della gamma NVIDIA GeForce RTX, con l'architettura Turing, la casa verde ha messo in campo gli RT Core (Ray Tracing Core): questi core sono stati progettati e ottimizzati per eseguire calcoli complessi associati alla simulazione del tracciamento della luce, come l'intersezione dei raggi con gli oggetti della scena, il calcolo delle riflessioni e delle rifrazioni, le ombre e molto altro. Questo hardware sfrutta le capacità di calcolo in parallelo ed è perfettamente integrato nelle architetture targate NVIDIA, lavorando in simbiosi con i CUDA Core, i Tensor Core e con le unità di rasterizzazione: la gestione coordinata del carico di lavoro su tutte le componenti consente di ottenere un processo di rendering più rapido e preciso.
L'evoluzione delle schede grafiche NVIDIA ha contribuito a migliorare le prestazioni del Ray Tracing: con l'architettura Ampere prima e Ada Lovelace poi, la casa verde ha implementato RT Core sempre più performanti e un numero maggiore di unità di calcolo dedicate.
L'implementazione e l'integrazione dell'intelligenza artificiale nelle proprie GPU, ha inoltre consentito a NVIDIA di migliorare tecniche di rendering già esistenti, nonché di introdurre nuove soluzioni: come abbiamo ampiamente raccontato nel nostro speciale sul DLSS e sulla Ray Reconstruction, il colosso californiano è riuscito a rendere l'utilizzo del Ray Tracing (e poi del Path tracing) una concreta possibilità.
AMD ha invece adottato un approccio più incentrato sul software: le schede grafiche della casa rossa non dispongono di unità hardware dedicate e sfruttano le capacità di calcolo dell'architettura RDNA per ottenere risultati simili. A partire dalle GPU Radeon RX 6000, l'architettura RDNA 2 ha portato in dote i cosiddetti Ray Accelerator, unità di calcolo che, sebbene incorporate nelle normali compute unite (e quindi non paragonabili agli RT Core), sono ottimizzate per il Ray Tracing.
Sebbene la qualità e le performance delle tecniche utilizzate da AMD siano ancora ad un livello inferiore rispetto a quelle della concorrenza, questo tipo di approccio ha permesso alla casa rossa di fornire un supporto "opensource", allargando la compatibilità delle sue tecnologie grafiche alla maggior parte degli hardware disponibili sul mercato.
Un cammino tracciato
Sebbene il Ray Tracing sia una tecnologia piuttosto giovane in ambito videoludico, l'impatto che ha avuto sull'intera industria è già sostanziale, soprattutto nel segmento del PC gaming. La strada da percorrere per arrivare all'applicazione generalizzata di questa tecnica di illuminazione è ancora lunga e passa inevitabilmente dallo sviluppo parallelo dell'intelligenza artificiale e soprattutto dal mondo console: se l'attuale generazione di macchine da gioco casalinghe ha utilizzato il Ray Tracing più per scopi di marketing che come vero strumento per il miglioramento della grafica, la prossima tornata di console non potrà esimersi dal fornire un hardware in grado di supportare appieno questa tecnologie.
Sul fronte dei giochi invece, abbiamo già visto come il Ray Tracing (e ancora di più il Path Tracing) sia in grado di cambiare profondamente l'esperienza finale: dalla prima prorompente dimostrazione di Metro Exodus, alla definitiva maturazione avvenuta con Alan Wake 2 di Remedy queste tecniche di illuminazione hanno dimostrato di poter massimizzare la resa visiva di un titolo, condizionando positivamente la direzione artistica e fornendo anche un primo assaggio delle potenzialità "fisiche" che può avere una corretta simulazione del comportamento della luce.