Immagini Realistiche con il Ray Tracing

Intorno agli anni sessanta sono state sviluppate numerose tecniche per creare immagini realistiche ed una di queste è il ray tracing, letteralmente tracciamento del raggio. Il raggio è ovviamente quello della luce, difatti il principio su cui si basa questa tecnica è che l’occhio umano non vede nulla nel buio più totale e si accorge di ciò che lo circonda attraverso i raggi di luce.

Supponiamo di avere un ambiente con degli oggetti tra cui una lampadina. Fino a quando la lampadina è spenta l’osservatore non vedrà nulla, ma quando questa viene accesa, disperde nell’ambiente dei raggi luminosi che iniziano a viaggiare. Ognuno di questi raggi di luce incontrerà un oggetto sul suo percorso e verrà più o meno assorbito ( oggetti neri assorbono tutta la frequenza del visibile, mentre quelli bianchi nessuna ) oppure riflesso in modo parziale secondo la natura del materiale colpito. La situazione è che nell’ambiente preso in esame sta viaggiando una quantità enorme di raggi di luce, riflessi e non e capiterà pure che durante il loro tragitto arrivino a colpire i nostri occhi impressionando la retina. Questa informazione verrà poi elaborata dal nostro cervello permettendoci così di formare un’immagine dell’ambiente circostante.
Nella tecnica del ray tracing quindi i raggi che noi dobbiamo prendere in considerazione saranno quelli che andranno a colpire la retina dell’osservatore e non tutti, tecnicamente questo modello viene chiamato forward ray tracing. Nella realtà però la luce ha una natura duale: particellare, presa in considerazione finora ed ondulatoria. Possiamo difatti immaginare la sorgente di luce come una fonte puntiforme continua, dalla quale vengono sparate infinite particelle in tutte le direzioni, dette fotoni. Un raggio luminoso è quindi il percorso rettilineo di un fotone o meglio ancora, un raggio luminoso identifica tutti quei fotoni che viaggiano nel medesimo tratto rettilineo di spazio allo stesso tempo. Un fotone durante il suo percorso vibra più o meno intensamente ( frequenza ), quando questi colpisce la retina dell’occhio, trasferisce la sua energia alla retina stessa, si dice che la impressiona, permettendo di distinguere i vari colori. Ad ogni frequenza e quindi ad una determinata lunghezza d’onda ( 1 / frequenza ) o livello energetico è associato un certo colore. Si definisce spettro l’intera gamma di lunghezze d’onda formati dai fotoni e soltanto una piccola porzione di essa è visibile. Quando due fotoni con lunghezze d’onda si incontrano, si mescolano e formano un altro colore dato dalla somma dei due elementari, se sommiamo tutti i colori dello spettro visibile si ottiene il bianco.
Dal punto di vista computazionale, generare migliaia di raggi ed ognuno seguirlo durante il suo percorso, ha un costo di risorse hardware troppo elevato, inoltre pensando che solo una piccola parte di questi impressionerà la retina dell’osservatore, avremo uno spreco di calcolo esagerato. Come possiamo fare allora? Il trucco sta nel seguire un raggio a ritroso, dall’occhio alla lampadina, in questo modo abbiamo la certezza di calcolare le traiettorie dei raggi che ci interessano alla formazione dell’immagine, il backward ray tracing. L’algoritmo che dobbiamo implementare è quindi molto più semplice, perché dobbiamo irradiare dal punto di vista dell’osservatore un certo numero di raggi e poi per ognuno vedere il comportamento, perché se colpisce un oggetto la sua energia può essere dissipata totalmente o parzialmente e quindi essere trasmesso in qualche altra direzione. Nel momento in cui un raggio cessa di viaggiare, possiamo considerare tutte le intersezioni con gli oggetti che ha incontrato e calcolare il contributo in termini di colore che ogni intersezione ha prodotto, a questo punto la somma di tutti i contributi rappresenterà l’effettivo colore da stampare sullo schermo. Questo modo ricorsivo di operare prende il nome di recursive backward ray tracing.
In un prossimo articolo approfondiremo questi concetti dal punto di vista computazionale.

Pubblicato
Categorie: Grafica

Di Giampaolo Rossi

Sviluppatore software da oltre 16 anni.