NVIDIA RTX: cos'è il Ray Tracing e a cosa servono Tensor Core e Ray Tracing Core

Vediamo come funzionano i nuovi Ray Tracing Core e Tensor Core, progettati da NVIDIA appositamente per il Ray Tracing in tempo reale.

speciale NVIDIA RTX: cos'è il Ray Tracing e a cosa servono Tensor Core e Ray Tracing Core
INFORMAZIONI SCHEDA
Articolo a cura di

In questi giorni le nuove schede video NVIDIA RTX 2080 Ti, 2080 e 2070 sono sulla bocca di tutti: sappiamo prezzi, date di uscita e giochi supportati. Ma qual è la vera novità dell'architettura Turing? Ovviamente stiamo parlando dei processori Tensor Core e Ray Tracing Core, i veri protagonisti della sfida che NVIDIA ha appena lanciato: rendere possibile il Ray Tracing in tempo reale.
La strada tracciata punta dritta verso il fotorealismo, che attualmente viene raggiunto nei videogiochi in condizioni ambientali limitate, fallendo lì dove la gestione della luce richiede un livello di computazione troppo elevato per le attuali GPU.

Fotorealismo a tutti i costi

La realtà è molto più complessa di quella che attualmente viene rappresentata nei videogiochi. Ogni oggetto ha una geometria ed ha una composizione chimica: queste caratteristiche innescano dei fenomeni di riflessione e rifrazione della luce che creano giochi di riflessi ed ombre, estremamente difficili da simulare tramite un calcolatore. La superficie di un lago riflette parte dello scenario circostante, un vetro opaco genera un fenomeno di rifrazione che cambia il modo in cui la luce stessa si diffonde in un ambiente, provocando ombre più o meno definite in base al percorso dei raggi luminosi.
Le interazioni fisiche necessarie per riprodurre una semplice scena, come quella in un parco durante una giornata in pieno sole, sono meno banali di quanto si possa pensare: il sole irradia i propri "raggi luminosi", che vanno a riflettersi sulle foglie degli alberi, sull'erba e sul terreno, rimbalzando sugli oggetti circostanti in una lunga serie di percorsi.

Se fossimo in un videogioco in prima persona e ci trovassimo vicino ad un laghetto, dovremmo vedere i riflessi degli alberi sulla superficie dell'acqua, che si comporta come uno specchio riflettente. Per creare un effetto veritiero è necessario sapere quale sia la fonte di illuminazione (come il Sole), su quali geometrie sono andati a riflettersi gli alberi, come è posizionato il laghetto, quanto riflette l'acqua e dove è posizionato l'osservatore.
Se quest'ultimo si muove dovrà vedere un cambiamento del riflesso in modo contestuale al suo movimento: dal punto di vista computazionale uno scenario del genere richiede una enorme mole di calcoli da eseguire in tempo reale, in quanto non è dato sapere come si muoverà il giocatore.

L'algoritmo di Ray Tracing

Un algoritmo di Ray Tracing venne proposto da Turner Whitted già nel 1979: concettualmente riesce a tracciare il percorso che compie un raggio luminoso dall'osservatore fino alla fonte luminosa, così da ricostruire in modo veritiero il comportamento della luce, disinteressandosi così di tutti quei raggi che non raggiungono l'osservatore. L'idea era fin troppo avanzata per l'epoca e richiedeva un hardware spropositato per simulare pochi pixel al secondo.

Per riuscire a calcolare il comportamento di miliardi di raggi in tempo reale che si diffondono in un ambiente qualsiasi abbiamo dovuto aspettare 10 lunghi anni di ricerca e sviluppo da parte di NVIDIA. Il risultato è RTX, cioè una piattaforma che racchiude hardware e software necessario al rendering Ray Tracing. La sola forza bruta, che prevede il calcolo di tutte le interazioni dei raggi, non è sufficiente a raggiungere la simulazione in tempo reale con l'hardware attuale, ma l'obiettivo è stato raggiunto ugualmente grazie all'integrazione di un hardware specifico per l'intelligenza artificiale, basata su algoritmi di Deep Learning, che riesce a completare le informazioni mancanti per ricreare un sistema di luci ed ombre fisicamente credibile e simile a quello che accadrebbe nella realtà.
Ad oggi per rappresentare un sistema di riflessi convincente in tempo reale si usa la Rasterization: gli oggetti 3D vengono convertiti in pixel su un piano in 2D, ovvero di tutti i triangoli che compongono la scena poligonale vengono rappresentati solo quelli che sarebbero visibili dalla prospettiva dello schermo. Il valore di ogni pixel può essere modificato tenendo conto delle fonti luminose che lo colpiscono, dunque il suo colore varia in base a come sono posizionate le luci: il processo è a tutti gli effetti artistico e la sua aderenza alla realtà dipende dall'implementazione dei programmatori e dal loro talento.

Il Ray Tracing, al contrario, calcola tutti i raggi luminosi che raggiungono l'osservatore, evitando di impiegare preziose risorse computazionali in interazioni fisiche che non sono visibili al giocatore. In pratica partendo dalla telecamera che rappresenta il nostro punto di vista, viene calcolato il percorso della luce che si diffonde nell'area fino a giungere alla sua fonte.

Il chip Turing è stato completamente ripensato

NVIDIA RTX sfrutta un rendering ibrido, ovvero implementa la Rasterization, il Ray Tracing e l'intelligenza artificiale. Di fatto è la prima volta nella storia che una GPU è in grado di sfruttare un algoritmo che si avvale del Ray Tracing in real time. L'architettura Turing non punta certo alla miniaturizzazione, essendo uno dei chip più grandi sul mercato, secondo solo al V100 usato nei supercomputer. Al suo interno troviamo 3 processori completamente nuovi. Rispetto a Pascal lo Streaming Processor riesce a gestire parallelamente operazioni floating point e integer, le prime per lo shading e le seconde per calcolare indirizzi, per un totale di 14 TFLOPS + 14 TIPS (dove IPS indica integer operations per second).

Le vere novità sono i due nuovi processori, il Ray Tracing core (RT Core) e il Tensor core. Il primo viene impiegato esclusivamente per il Ray Tracing e riesce a calcolare 10 miliardi di raggi al secondo, ovvero 10 Giga Rays/s, contro 1.2 Giga Rays/s della GeForce 1080 Ti. Il Tensor Core è completamente dedicato ai processi di intelligenza artificiale ed è la parte finale che riempie l'informazione mancante, con prestazioni di 110 TFLOPS FP16 (che può aumentare se si abbassa la precisione).
Tutti questi sistemi di numerazione sono difficilmente paragonabili con le architetture passate, ma lasciano capire come il chip sia stato ripensato completamente e suddiviso in 3 processori che svolgono operazioni diverse, per lo più in parallelo. Il modello nuovo ha richiesto delle nuove metriche, ovvero dei nuovi sistemi di misura che indicano le operazioni svolte, come il calcolo dei raggi luminosi.
Approssimativamente, in 1 singolo frame l'architettura Turing sfrutta il core RT per calcolare più raggi luminosi possibili, così da utilizzare le informazioni per lo shading delle superfici, effettuate dal processore SM.
Il Ray Tracing core è progettato per accelerare i calcoli di Ray Tracing suddividendo l'immagine in diversi macro volumi, a loro volta suddivisi in altri volumi che sono suddivisi ancora in altri volumi. Ogni volta che viene trovata l'intersezione di un raggio con uno di questi volumi (pensabili come scatole), tutti gli altri vengono ignorati per ispezionare i volumetti dentro quello esatto. L'algoritmo si ferma quando ha trovato qual è il triangolo del modello poligonale che viene colpito dal raggio luminoso.

Infine, entra in gioco il terzo precessore, il Tensor core, che è stato progettato appositamente per le Neural Network (reti neurali). Nel caso di Turing parliamo di Deep Neural Network, dedicate ai processi di Deep Learning (uno degli ambiti più in voga del Machine Learning).
In poche parole, una rete neurale non è altro che un algoritmo di intelligenza artificiale che, in questo caso, viene impiegato per capire come riempire quei pixel dei quali non si ha alcuna informazione alla fine del frame, ovvero per aumentare la risoluzione finale dell'immagine. Il Ray Tracing è talmente dispendioso che non sarebbe possibile generare un'immagine in alta risoluzione senza l'ausilio di una AI che riesca ad aumentarla artificialmente, senza dover calcolare tutti i pixel, ma compiendo dei calcoli statistici per riempire l'immagine e farla sembrare realistica.
Calcolando che ogni Giga Rays/s equivale a 10TFLOPS ed effettuando una media pesata delle operazioni si ottiene una nuova unità di misura che cerca di identificare, con un singolo numero, i calcoli dell'architettura Turing: si parla di 78T RTX-OPS (78 tera RTX operations per second) per la 2080 Ti, contro i 12T RTX-OPS della GTX 1080 Ti se svolgesse operazioni di Ray Tracing (cifre dichiarate da NVIDIA).

La sfida del Ray Tracing

Capendo le difficoltà insite nel Ray Tracing si percepisce perché ci siano voluti 10 anni di ricerca e sviluppo per arrivare all'architettura Turing. Siamo a tutti gli effetti di fronte ad una rivoluzione nell'ambito della computer grafica, che finalmente permette l'automatizzazione dei processi di illuminazione. Oltre a rendere l'aspetto dei futuri videogiochi decisamente migliore, i nuovi processori semplificano la vita dei programmatori, che possono affidare alle nuove GPU l'arduo compito di abbellire gli ambienti con riflessi convincenti.

Se a livello hardware le novità sono tante, non è detto che queste vadano di pari passo con gli standard odierni. Senza il Ray Tracing è più che lecito aspettarsi di poter sfruttare le nuove schede Turing per giocare in 4k ad almeno 60 fps, ma non è altrettanto scontato che NVIDIA riesca a garantire le stesse prestazioni una volta attivati i calcoli dei raggi luminosi. Per ora è ancora presto per parlarne e bisognerà attendere i primi benchmark per tirare le somme.