La rasterizzazione chiede, per ogni triangolo, «quali pixel copro?». Il ray tracing rovescia la domanda: per ogni pixel chiede «che cosa vedo in questa direzione?». Questo cambio di prospettiva rende naturali effetti che la rasterizzazione può solo approssimare, come ombre precise, riflessi di oggetti fuori dall'inquadratura, rifrazione nel vetro e luce che rimbalza tra le superfici. Il prezzo è un costo di calcolo molto più alto.
L'idea di base
Nella realtà la luce parte dalle sorgenti, rimbalza sugli oggetti e una minima parte raggiunge i nostri occhi. Simularla così sarebbe uno spreco enorme: quasi tutti i raggi non arriverebbero mai alla telecamera. Il ray tracing percorre allora il cammino al contrario, partendo dall'occhio.
Per ogni pixel:
- si lancia un raggio primario dalla telecamera attraverso il pixel;
- si trova la prima superficie che il raggio interseca;
- da quel punto si calcola quanta luce arriva verso la telecamera.
Il calcolo dell'intersezione tra un raggio e un triangolo, o una sfera, è un problema geometrico ben noto e relativamente semplice. Il difficile è farlo per milioni di raggi contro milioni di triangoli.
Il ray tracing classico
Nel modello descritto da Turner Whitted nel 1980, dal punto colpito si lanciano raggi secondari:
- raggi d'ombra verso ogni sorgente di luce: se incontrano un ostacolo, il punto è in ombra rispetto a quella luce;
- raggi riflessi nella direzione speculare, per le superfici lucide;
- raggi rifratti attraverso i materiali trasparenti, deviati secondo l'indice di rifrazione.
Il procedimento è ricorsivo: un raggio riflesso può colpire un'altra superficie riflettente, e così via, fino a un limite di profondità. Ne risultano ombre nette e riflessi perfetti, ma l'illuminazione diffusa rimbalzata da una parete all'altra resta assente.
L'equazione del rendering e il path tracing
Nel 1986 James Kajiya formulò l'equazione del rendering, che descrive in modo generale la luce uscente da un punto come somma della luce emessa e di tutta la luce che vi arriva da ogni direzione, pesata dalle proprietà del materiale. Risolverla esattamente è impossibile per scene reali: l'integrale su tutte le direzioni contiene, ricorsivamente, altri integrali.
Il path tracing la risolve per approssimazione statistica con il metodo Monte Carlo:
- per ogni pixel si lanciano molti percorsi;
- a ogni rimbalzo si sceglie una sola direzione casuale, secondo le proprietà del materiale;
- il percorso prosegue finché incontra una luce, esce dalla scena o viene interrotto;
- il colore del pixel è la media di tutti i percorsi.
Con abbastanza campioni, il risultato converge verso la soluzione corretta e include naturalmente illuminazione globale, ombre morbide, caustiche, profondità di campo e sfocatura di movimento.
Il rumore e il suo prezzo
Con pochi campioni per pixel, l'immagine è piena di rumore: puntini chiari e scuri dovuti alla casualità. Il rumore diminuisce lentamente: per dimezzarlo servono circa quattro volte i campioni, perché l'errore decresce con la radice quadrata del numero di campioni. Le scene con luce che entra da piccole aperture, come un interno illuminato da una finestra, sono le più difficili.
Le tecniche per ridurre il rumore senza moltiplicare i campioni sono essenziali:
- campionamento per importanza: lanciare più raggi nelle direzioni che contribuiscono di più, come verso le sorgenti o nella direzione del riflesso;
- campionamento diretto delle luci: a ogni rimbalzo si interroga esplicitamente una sorgente, invece di sperare di colpirla per caso;
- roulette russa: i percorsi poco significativi vengono interrotti casualmente, compensando il peso di quelli che proseguono;
- denoising: filtri, spesso basati su reti neurali, che ricostruiscono un'immagine pulita da pochi campioni usando informazioni ausiliarie come normali e colore di base.
Accelerare le intersezioni
Testare ogni raggio contro ogni triangolo sarebbe proibitivo. Si usano strutture di accelerazione, la più diffusa delle quali è la BVH (bounding volume hierarchy): gli oggetti vengono racchiusi in scatole, le scatole in scatole più grandi, formando un albero. Un raggio che non attraversa una scatola esclude in un colpo solo tutto ciò che contiene. In questo modo il numero di test per raggio cresce in modo logaritmico rispetto ai triangoli, non lineare.
Le schede video recenti includono unità hardware dedicate all'attraversamento della BVH e all'intersezione raggio-triangolo, che hanno reso possibile il ray tracing in tempo reale nei giochi, di solito in forma ibrida: la scena viene rasterizzata e il ray tracing si usa per riflessi, ombre o illuminazione globale, con pochi campioni e un denoiser aggressivo.
Rasterizzazione o ray tracing?
| Aspetto | Rasterizzazione | Path tracing |
|---|---|---|
| Velocità | molto alta | bassa, migliorata dall'hardware dedicato |
| Ombre | tecniche approssimate (shadow map) | naturali e precise |
| Riflessi | approssimati, limitati a ciò che è visibile | corretti, anche fuori inquadratura |
| Luce rimbalzata | precalcolata o approssimata | inclusa naturalmente |
| Artefatto tipico | errori di trasparenza, ombre seghettate | rumore |
Per un'animazione o un'immagine di prodotto dove conta la fedeltà, il path tracing è oggi lo standard; per l'interattività, la rasterizzazione resta la base, sempre più spesso affiancata dal ray tracing.
In sintesi
- Il ray tracing parte dalla telecamera e chiede, per ogni pixel, cosa si vede in quella direzione.
- Il modello classico usa raggi d'ombra, riflessi e rifratti, ma non la luce rimbalzata diffusa.
- Il path tracing risolve l'equazione del rendering con campioni casuali e include l'illuminazione globale.
- Il rumore cala lentamente: campionamento per importanza e denoising sono indispensabili.
- Le BVH e l'hardware dedicato rendono le intersezioni abbastanza veloci per il tempo reale ibrido.