Che cos'è il Ray Tracing?

Dall'annuncio di Nvidia nel 2018 delle sue schede grafiche RTX serie 20, la sua caratteristica killer, "ray tracing" è stato un termine popolare nei circoli dei videogiochi. Ma può essere difficile capire cos'è il ray tracing, come funziona e perché ha un aspetto migliore rispetto alle tecniche precedenti.

Che cos'è il ray tracing e come funziona?

Nel mondo reale, quando vedi qualcosa, quello che vedi è un fotone proveniente da una fonte di luce. Sulla strada per te, quel fotone potrebbe essere stato riflesso da una o più superfici. Ogni riflesso cambia le caratteristiche della luce che raggiunge i tuoi occhi.

Il sole emette un'ampia gamma di colori di luce, ogni superficie assorbe una parte della luce e ne riflette altre. Ciò che vediamo come una superficie verde, come una foglia, appare così perché riflette principalmente la luce verde. Se la luce che si riflette sulla foglia colpisce un'altra superficie, come un muro bianco, quella superficie apparirà leggermente diversa da come sarebbe se fosse una luce bianca pura che la illumina. Ogni riflesso incide su ogni futura superficie con cui la luce interagisce, modificandone l'intensità e il colore visibile.

Il ray tracing è una tecnica grafica che segue gli stessi principi. Vengono proiettati raggi di luce, vengono calcolate le proprietà della luce riflessa e rifratta, come il colore, e il raggio continua a viaggiare.

Nel mondo reale ogni fonte di luce, come una lampadina o il Sole, emette fotoni in tutte le direzioni, la stragrande maggioranza dei quali non raggiunge mai i tuoi occhi. Simulare questo sarebbe un processo follemente intenso che produce un risultato per lo più sprecato. Per ridurre il carico di lavoro, il ray tracing funziona al contrario, proiettando i raggi dalla telecamera. Ciascun raggio può percorrere una certa distanza senza riflettere o riflettere un certo numero di volte prima che vengano eseguiti i calcoli e impostato il valore dei pixel.

Ad esempio, un raggio viene proiettato dalla prospettiva dello spettatore, quando colpisce un muro bianco un algoritmo genera ricorsivamente un raggio riflesso che poi viaggia attraverso una lastra di vetro blu, infine, il raggio riflesso colpisce una sorgente di luce bianca e viene assorbito. Il vetro blu assorbe tutto tranne la luce blu che proietta una luce blu sul muro, facendo sì che il pixel sia colorato di blu.

Perché il Ray Tracing ha un aspetto molto migliore?

Il metodo standard per il rendering delle scene in tempo reale prevede l'utilizzo di mappe di luce precalcolate e l'illuminazione dell'intera scena. Alcuni giochi utilizzano un'illuminazione volumetrica limitata per includere fonti di luce in movimento e per consentire ombre dinamiche, questa tecnica viene utilizzata con parsimonia anche se è piuttosto impegnativa per il processore.

Il ray tracing può ottenere un risultato fotorealistico se viene svolto del lavoro extra nella fase di progettazione del gioco. Se tutte le superfici includono dettagli come la riflettività, la trasparenza e il modo in cui la luce si rifrange attraverso di esse, il risultato complessivo può apparire più naturale. Sebbene questo approccio comporti ovviamente più lavoro in fase di progettazione del gioco, consente al risultato di apparire fotorealistico con la luce che reagisce come dovrebbe quando si riflette su cemento, metallo, legno e vetro eccetera.

Il ray tracing consente di proiettare ombre e riflessi accurati come parte del processo di rendering. nei metodi di rendering tradizionali, entrambi questi effetti sono del tutto facoltativi e possono causare notevoli cali di prestazioni.

Il ray tracing stesso ha un enorme successo in termini di prestazioni. Fino a quando le schede grafiche RTX di Nvidia non sono state annunciate con l'accelerazione hardware per il ray tracing, si pensava che la potenza di elaborazione necessaria per eseguire il ray tracing in tempo reale nel software era più di un decennio via. Anche con l'accelerazione hardware, il ray tracing provoca comunque un calo significativo delle prestazioni in quanto è ancora la parte più lenta del rendering di un frame.