Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Ray Tracing, che passione!

Introduzione approfondita al Ray Tracing, la tecnica di base di ogni animazione 3D
Introduzione approfondita al Ray Tracing, la tecnica di base di ogni animazione 3D
Link copiato negli appunti

Introduzione

Chi si occupa di grafica 3D per passione o per ragioni di lavoro, deve spesso confrontarsi con applicativi che generano le immagini finali con la tecnica chiamata ray tracing (o dei raggi traccianti). Si tratta di un algoritmo tra i più usati in questo settore, ideato ormai diversi anni fa, con lo scopo di realizzare scene al computer con caratteristiche e proprietà il più possibile realistiche. Perciò, si può definire ray tracing il procedimento che genera in modo bidimensionale una scena tridimensionale, descritta mediante funzioni cosiddette primitive, come triangoli, cubi, sfere e coni, con una qualità descrittiva elevata, mediante la simulazione dell'interazione fra luce ed oggetti. Ogni oggetto appartenente alla scena viene individuato univocamente nello spazio dall'insieme di coordinate cartesiane X, Y e Z, definite rispetto ad un punto di riferimento, detto origine degli assi. Ad esso vengono poi associate altre proprietà relative alla superficie, per caratterizzarlo in base alle proprie esigenze.

La scena deve poi essere caratterizzata dalla presenza nello spazio di un osservatore (punto o occhio), che volge lo sguardo in una determinata direzione. Ovviamente, affinché la scena sia visualizzabile, occorre anche definire almeno una sorgente dalla quale illuminarla, definendone tipo, intensità e colore. Il ray tracing si contraddistingue per la resa qualitativa della elaborazione, proprio perché riesce ad intergire con le proprietà intrinseche dei materiali che formano gli oggetti ed i corpi di una scena, raggiungendo livelli qualitativi fotorealistici, grazie alla applicazione di leggi fisiche e modelli matematici che si rifanno alla realtà.

Alla base dell'algoritmo vi è un criterio elementare: per ogni punto appartenente ad un oggetto vengono generati i raggi relativi alle sorgenti luminose, creando un gioco di riflessioni e rifrazioni con i raggi provenienti da altri punti ed oggetti, che determinano le proprietà dei pixel (o punti) dell'immagine da visualizzare. Si può facilmente intuire come una tecnica tanto semplice richieda al tempo stesso una potenza di elaborazione notevole, in quanto anche in presenza di scene non complesse il numero di raggi da calcolare è elevatissimo. Un software di ray tracing richiede dunque i passaggi appena descritti, per la elaborazione di una scena, sia essa semplice o complessa. Esso fa inizialmente definire gli oggetti da un punto di vista delle proprietà dei materiali e delle posizioni nello spazio 3D. Occorre successivamente posizionare l'osservatore e le sorgenti luminose con le loro direzioni relative, per poi calcolare la scena secondo il processo denominato rendering.

Gli elementi basilari

In questo articolo tenteremo di spiegare le basi della teoria ray tracing, richiamando concetti che cercheranno di evitare riferimenti matematici e geometrici complessi, che possono eventualmente essere approfonditi nei numerosi testi che trattano tale teoria. Si valuteranno anche i principi dell'antialiasing, un metodo che consente di migliorare la resa dell'immagine, smussando gli angoli seghettati generati dalla tecnologia digitale dei monitor. Per il momento eviteremo quindi volutamente di considerare elementi avanzati di grafica 3D collegata al ray tracing stesso, come motion blur, texture mapping e radiosity, che saranno argomento di successive trattazioni.

LA SCENA
La scena è una collezione di oggetti e di sorgenti luminose visualizzabili da una telecamera (osservatore).

GLI OGGETTI
In generale un oggetto è un elemento qualunque, sia esso solido, liquido o gassoso, che viene rappresentato nella scena. Sebbene un programma di ray tracing possa elaborare solo oggetti che sono descrivibili matematicamente (come sfere, cilindri, coni e piani), essi possono essere combinati per creare oggetti di maggiore complessità (da una semplice sedia ad un aereo). La superficie di ciascun oggetto ha determinate proprietà (texture o tessitura), come il colore, la rugosità e la lucentezza. Per semplicità tratteremo oggetti caratterizzati dal solo colore.

LE SORGENTI LUMINOSE
Le sorgenti luminose, come gli oggetti, possono essere collocate in un qualunque punto della scena. Essendo, per definizione, elementi che emettono raggi luminosi, il loro ruolo nell'ambito della scena è di importanza fondamentale, in quanto senza di esse la scena non potrebbe essere in pratica visualizzata, venendo a mancare i raggi da tracciare nello spazio. Una volta individuato il corretto posizionamento delle sorgenti di luce occorre assegnare a ciascuna di esse l'intensità, che ne rappresenta un parametro fondamentale. Esso riassume in pratica le proprietà inerenti il colore e la luminosità delle sorgenti stesse. Potreste così voler rappresentare una scena all'aria aperta in una giornata di sole oppure descriverne una d'interno con una luce soffusa di una lampada. In ogni caso, le sorgenti luminose rappresentano una degli aspetti più significativi della teoria del ray tracing. La scelta della posizione e del tipo di luce risulta perciò determinante per ottenere una scena con una resa adeguata alle aspettative.

LA TELECAMERA
La telecamera (osservatore) rappresenta il punto di osservazione della scena. Per capire il suo ruolo ci si può brevemente riferire alla teoria della fotografia, assimilandola al piccolo foro che occorre praticare in un lato di una scatola rudimentale schermata dalla luce per impressionare una lastra fotografica collocata nel lato opposto. Per fare una foto occorre tenere aperto il foro per un certo tempo, in modo che il fascio di luce possa sensibilizzare adeguatamente la pellicola. La ragione per la quale il foro debba avere un diametro ridotto è fornita dal fatto che bisogna evitare la saturazione luminosa, con il rischio di una sovraesposizione dell'immagine generata.

Il sistema, pur essendo semplice, funziona proprio grazie al fatto che la luce arriva da una determinata posizione seguendo un'unica direzione, colpendo una sola zona della lastra. Se l'apertura fosse più larga l'immagine diventerebbe rapidamente sfuocata, come risultato dell'incremento di quantità di luce incidente. La logica dell'algoritmo di ray tracing è simile a questa: la telecamera determina dove i raggi luminosi debbano colpire lo schermo del computer (equivalente alla pellicola fotografica). Per capire come ciò avvenga esattamente tratteremo ora il concetto di ray casting, che ci aiuterà a capire meglio l'argomento di ray tracing, che ne rappresenta una logica estensione.

IL RAY CASTING
Si tratta di un metodo nel quale le superfici visibili degli oggetti (cioè inquadrati direttamente dalla telecamera) vengono colpite dai raggi di luce dall'osservatore nella scena. Prima di proseguire ribadiamo dunque che come la pellicola (o lastra) fotografica è assimilabile allo schermo del computer, il foro (od obiettivo) della macchina fotografica è paragonabile all'occhio dell'osservatore. L'unità più piccola di luce viene definita pixel (o punto) e può assumere forme circolari od ellissoidali. I monitor attuali possono raggiungere anche risoluzioni di oltre 1600 pixel orizzontali x 1200 pixel verticali (a frequenze di refresh elevate), garantendo una definizione di immagine senza precedenti. A ciascun pixel è possibile associare un solo colore nell'unità di tempo e nel ray tracing esso rappresenta il colore della luce che passando sull'oggetto, attraversa il pixel stesso fino ad arrivare all'occhio. Ciascun fascio di luce viene detto appunto raggio.

I RAGGI
Un raggio è una sottile linea diritta utilizzata nel ray tracing per modellare un fascio di luce, che inizia in un certo punto (occhio) e si estende in una certa direzione della scena. I raggi consentono quindi di determinare quali oggetti appartenenti alla scena debbano essere visualizzati.

L'ALGORITMO DI RAY CASTING
L'algoritmo di ray casting si basa proprio sui raggi luminosi che attraversano la scena. Ad ogni punto appartenente allo schermo corrisponde un raggio che dall'occhio attraversa il pixel stesso per raggiungere lo spazio dell'immagine. In tal senso tutti gli oggetti che compongono la scena vengono valutati per stabilire se un determinato raggio debba o meno interessarli.

Ovviamente esiste la possibilità che un singolo raggio coinvolga l'intersezione di più oggetti, nel caso siano ad esempio uno dietro l'altro. Per ciascun raggio, l'intersezione che è più vicina all'occhio è la sola che è visibile all'occhio stesso. Il colore in quel punto è determinato proprio dall'intensità del raggio di luce che lo attraversa. Ciò avviene per ogni pixel presente sullo schermo, fatto che fa immediatamente intuire quanto possa diventare pesante l'elaborazione di scene complesse. Si pensi ad esempio alla realizzazione di una scena con una risoluzione di 640 punti orizzontali x 480 punti verticali (per un totale di 307.200 punti): nell'ipotesi di avere collocato 10 oggetti nella nostra scena l'algoritmo dovrà verificare 10 intersezioni per ognuno dei 307.200 punti, per un totale di 3.072.000 verifiche di intersezioni! Ciò conferma il fatto che un programma di ray tracing solitamente impiega la maggioranza del tempo (dal 75 al 95%) di calcolo per la elaborazione di tali informazioni. La configurabilità consente però di ottimizzare tali calcoli, in funzione del sistema utilizzato, riducendo il numero di verifiche di intersezione per ciascun raggio ed incrementando la velocità di ogni singola operazione di verifica. Rispetto al rayc asting, il ray tracing tende comunque ad appesantire ulteriormente la situazione.


IL RAYTRACING

Rispetto al ray casting che si preoccupa di determinare solo quali siano le superfici visibili degli oggetti, il ray tracing estende tale valutazione cercando di stabilire come debbano apparire le superfici stesse. I programmi di ray tracing consentono infatti all'utente di impostare diversi effetti per rendere maggiormente realistiche le immagini, come ombre, trasparenze e riflessioni, che sarebbero difficilmente ottenibili applicando altri metodi.

L'ALGORITMO DI RAY TRACING
L'algoritmo di ray tracing è di tipo ricorsivo. Ciò significa che per raggiungere un determinato risultato occorre che un dato processo debba ripetersi un numero arbitrario (ma finito) di volte. L'algoritmo inizia come quello di ray casting, inviando un raggio dall'occhio che attraversando lo schermo determina quali oggetti si intersecano ad esso, individuando quello tra tutti più vicino. La ricorsività si determina nel momento in cui vengono inviati diversi raggi dal punto di intersezione, per verificare quali oggetti vengano riflessi in tale punto, quali oggetti potrebbero essere visualizzati attraverso l'oggetto in questione in tale punto, quali sorgenti luminose siano direttamente visibili dal punto stesso e così via. Questi raggi aggiuntivi vengono spesso indicati come raggi secondari per differenziarli dal raggio principale iniziale. Spesso nella letteratura dedicata al ray tracing si trovano i termini "backward ray tracing" (ray tracing a ritroso) e "forward ray tracing" (ray tracing in avanti). In realtà tali definizioni rappresentano lo stesso concetto. Alcuni testi infatti si riferiscono al percorso a ritroso compiuto dal raggio dall'occhio dell'osservatore alla sorgente luminosa. Altri invece ritengono di analizzare il percorso del raggio dalla sorgente luminosa all'occhio dell'osservatore in avanti. Il primo caso è comunque preferito dalla maggioranza degli autori.

Ci occuperemo ora della descrizione dei tre effetti principali relativi al ray tracing, ciascuno dei quali si determina quando il raggio va a colpire la superficie più vicina di intersezione.

LA RIFLESSIONE
Se la superficie colpita dal raggio luminoso è riflettente, come uno specchio, il ray tracer deve determinare il colore in quel punto, tenendo conto non solo del colore della superficie, ma anche dei colori degli oggetti che si riflettono nel punto stesso. Se si pensa alla classica superficie di marmo (tipica delle prime realizzazioni di scene ray tracing), sarà possibile vedere su di esso i riflessi degli oggetti che sono collocati nelle vicinanze. Ciò deve avvenire proprio a causa della luce che colpendo tali oggetti colpisce il pavimento, rimbalzando e raggiungendo l'occhio dell'osservatore. Per eseguire in modo corretto i calcoli, occorre che il programma di ray tracing sia in grado di individuare l'angolo esatto di riflessione sul pavimento del raggio, creandone uno che possa raggiungere correttamente l'occhio dell'osservatore.

LA TRASPARENZA
Il ragionamento relativo alla trasparenza è simile a quello appena descritto per la riflessione, con la differenza fondamentale che il raggio attraversa in parte la superficie del corpo trasparente uscendone poi inclinato secondo il principio della rifrazione. La rifrazione è un fenomeno fisico ottico che interessa la luce quando attraversa una determinata sostanza, deviandone la direzione. Un tipico esempio di rifrazione è quello che consiste nell'introdurre una penna in un bicchiere d'acqua: osservando il bicchiere dall'alto la penna apparirà come piegata nella zona in cui si immerge nell'acqua stessa.

Ciascun corpo è quindi caratterizzato da un determinato indice di rifrazione, che può essere definito come un valore che descrive la velocità con cui la luce lo attraversa, rispetto alla velocità con cui la luce viaggia nel vuoto. Siccome l'indice di rifrazione del vetro è superiore a quello dell'acqua, la luce risulterà maggiormente deviata rispetto all'acqua.

LE OMBRE
Le ombre rappresentano la terza caratteristica tipica del ray tracing. Per cercare di capire come debbano essere calcolate, si può cercare di immaginare di essere sulla superficie di un certo corpo. Si tratterà quindi di verificare se si scorgano o meno fasci luminosi provenienti dalle sorgenti di luce. In caso affermativo significa che sarà possibile individuare un chiaro percorso fra voi e la sorgente e quindi un certo numero di fotoni viaggeranno lungo tale via. In caso negativo significa che almeno un oggetto con la superficie opaca (cioè non trasparente) si interpone tra voi e la sorgente luminosa, rendendovi così in ombra rispetto alla sorgente stessa. Una volta determinata una intersezione le ombre possono venire calcolate inviando i vari raggi verso le sorgenti luminose. Nel caso si incontri una superficie opaca significa che nessun fascio luminoso può raggiungere il primo oggetto, per cui la superficie risulterà in ombra.

Conclusioni

Si comprende quindi come il numero di calcoli necessari aumenti notevolmente rispetto al ray casting, dato che vengono valutati non solo i raggi primari ma anche le intersezioni relative ai raggi secondari e relativi alle ombre. Nel prossimo articolo affronteremo il metodo di antialiasing, che viene comunemente utilizzato per migliorare ulteriormente la resa dell'immagine finale.

Ti consigliamo anche