November 10, 2007

Omaggio ottico a Blender

Un post per pubblicizzare un programma eccezionale, che mi sta facendo passare del buon tempo davanti allo schermo. Blender e' un software completamente open source e gratuito, tanto da far parte integrante di Debian da tempo, specializzato nella grafica 3D. Nella mia limitata esperienza, non ho mai visto un software open source tanto curato e ben funzionante come Blender (bhe, oltre al sistema operativo medesimo, certo). Il programma e' abbastanza complesso e complicato da usare, ci vuole pazienza per seguire qualche tutorial, la cui scelta e' parecchio ampia. E soprattutto in rete si trovano milioni di informazioni, il bello dell'opensource.

Ho messo qui attorno degli esempi che ho preso dalla pagina d'archivio della fondazione Blender. Le possibilita' sono enormi. Blender, come altri simili programmi 3D, funziona diversamente da programmi tipo Photoshop. Nella sua interfaccia grafica, si costruisce una vera e propria scena a tre dimensioni, in cui ci si puo' addentrare come un gioco 3D. Si inseriscono oggetti come sfere, cubi e cilindri, oggetti vettoriali fatti di punti, vertici e superfici nello spazio, e li si manipola per cambiargli forma. Quando gli oggetti sono pronti, gli si assegna un materiale (quindi un colore, una trasparenza, luminosita', riflettivita'...). Si piazzano nella scena quindi le sorgenti di luce, con la loro direzione, intensita', tipo di illuminazione. Quindi quando la scena tridimensionale e' completata, l'unico modo per poi vederla su uno schermo o su carta e' fargli una foto: si piazza una "macchina fotografica" nell'angolazione voluta, e si scatta la foto (fare il "rendering").

Programmare il rendering della scena e' qualcosa di davvero complesso. Il Ray Tracing e' la tecnica che permette di simulare nel mondo dei bit i raggi di luce e la loro propagazione tra gli oggetti (tra l'altro questo fa parte di un mercato abbastanza grande, esistono software milionari che fanno ray tracing per sistemi ottici complicati; Blender e' piu' per il lato artistico, ma e' gratis). La luce viaggiando e incontrando oggetti diversi, cambia le sue proprieta', e la fisica fin dal 1800 si e' messa a studiare cosa succede alla luce nell'attraversare lo spazio. Il risultato formalizzato in termini matematici e' quell'ottica chiamata geometrica, che una volta trasportata in linguaggio macchina, diventa Ray Tracing e genera immagini piuttosto realistiche come quelle qui attorno.

Ci sono molte cose che devono essere tenute in conto da un programma che fa un buon Render della scena. Il singolo raggio di luce, che e' un oggetto piu' matematico che fisico/reale, avendo una sola dimensione (la retta generata dal vettore d'onda direbbe qualcuno), se viaggia nel vuoto (o nell'aria a condizioni normali) non cambia ne' di direzione, ne' di spettro (l'insieme dei colori che lo formano). Se viene da una lampada a incandescenza o dal sole, si puo' pensare che sia "bianco", cioe' che al suo interno ci siano tutti i colori (non solo quelli dell'arcobaleno, ma di piu', se chiamiamo colore una frequenza, cosa non corretta quanto interessante). Quando invece incontra la superficie di un oggetto reale possono succedere un po' di cose, prese in conto dal nostro buon software.

Normalmente se l'oggetto e' opaco e appare colorato, il raggio di luce che gli arriva addosso (supponiamolo "bianco") verra' in parte assorbito (quindi perso), in parte riflesso con un angolo a caso (scattering si dice). La parte riflessa (scatterata) avra' anche modificato il suo spettro, perche' l'oggetto si sara' mangiato tutti i colori del raggio tranne quello che poi noi diciamo essere il suo colore (in effetti quando diciamo che un oggetto ha un colore, e' proprio vero il contrario, l'oggetto si tiene per se' tutti i colori tranne quello che poi noi gli attribuiamo come "suo"!). Se invece l'oggetto e' speciale, come uno specchio, sara' capace di riflettere il raggio conservando il suo angolo di incidenza e il suo spettro. Quindi il raggio fara' come una palla da biliardo che rimbalza sul bordo, angolo di incidenza uguale a quello di riflessione. Questo permette di vedere perfettamente un oggetto riflesso in uno specchio perfetto. Ma gli oggetti in genere possono essere anche in una via di mezzo tra uno specchio perfetto e un oggetto che diffonde luce completamente a caso, possono un po' riflettere e un po' scatterare, e un po' filtrare qualche frequenza, come possono fare delle vernici luminose.

L'oggetto in questione, poi, puo' chiaramente anche non assorbire troppa luce, e lasciarne passare una buona parte attraverso (il vetro per esempio). Qui allora la cosa si fa piu' complessa, perche' il raggio che attraversa il vetro cambia direzione all'interno del mezzo (rifrazione), e poi la cambia ancora quando ne esce. Il risultato sono gli occhiali. Le lenti in genere riescono a giocare su questo meccanismo e cambiare la direzione dei raggi in maniera controllata. Siccome la rifrazione, la riflessione, l'assorbimento e il filtraggio di certe frequenze e' qualcosa che puo' essere scritto in equazioni (abbastanza semplici per il singolo raggio) e le equazioni sono poi facili da tramutare in programma per computer, che ne puo' gestire molte insieme, Blender e il Ray Tracing possono simulare come la luce cambia attraverso gli oggetti della scena.

Il segreto per snellire una quantita' di calcoli che in principio e' infinita (tra due raggi qualunque ne esistono infiniti, come per le rette) e' quello di partire non dalle sorgenti di luce e seguire tutti i raggi in tutte le direzioni, ma di limitarsi a quelli a cui si e' interessati, che sono quelli che alla fine del loro viaggio arrivano all'occhio, o macchina fotografica. Quindi in effetti l'analisi viene fatta al contrario, partendo dalla fine, dalla macchina fotografica e risalendo fino alla sorgente. In questo modo il Rendering di una scena non troppo complicata e' fatto nel giro di un minuto. L'ottica geometrica applicata, duecento anni di storia, condensati nel processore in pochi secondi. Cosa ne penserebbe Newton?

[PS: l'ultima immagine e' mia! Se non cambiano idea nel frattempo, dovrebbe poi apparire in copertina di un giornale di ricerca.. viva blender.]

9 comments:

Anonymous said...

gran bel post socio !

in realta' me lo devo rileggere con calma, ma sembra un gran bel post!
Pero' un appunto: non hai citato la trasformata di Fourier nemmeno una volta... allora non e' poi cosi' importante?!
e vogliamo piu' dettagli sul colore !

quando ti rileggo torno a dire qualcosa di sensato, giuro !

Anonymous said...

...non ho parole...nel senso letterale del termine; aspetta, adesso che ci penso mi stanno venendo delle parole, ma non postabili! Scherzi a parte, un post incredibile, l'ho letto tutto d'un fiato, e come Squa non c'ho capito molto, ma mi riprometto di leggerlo con più calma e annotarmi qualcosina...l'immagine finale ha del psichedelico/psicotico, mi ha quasi ipnotizzato!...
...comunque ti preferivo quando buttavi a terra gli stuzzicadenti e li contavi al volo!!
GianMuga

Unknown said...

ma io non sono mica rainman! e odio i numeri tra l'altro. se vuoi pero so innescare un'ossidazione violenta e creare plasma atmosferico organico (bruciando scoreggie)

Anonymous said...

...visto?! cosa ti dicevo? come rainman:
"ah ah scoreggio ah ah scoreggio".
Se andate a Las Vegas potete fare una fortuna: Squa tienitelo stretto il cervellone e fallo fruttare!!
Sempre GianMuga

Unknown said...

ma te invece di perdere tempo qua quando ti muovi a scrivere qualcosa? dai che i fans aspettano

Anonymous said...

Bella Pedo, segnalerò il tuo post alla mia sorellina, che ormai è entrata nel mondo del lavoro e si occupa di computer graphics.

Unknown said...

bella rutz, se un po' ne sa di ste cose la sorella si rendera' conto della potenza. in rete c'e' di tutto per imparare. e sopratutto e' gratis (anche per window$)

Anonymous said...

La mia lil sista è rimasta favorevomente sorpresa dal software, che non conosceva.
Meno male che c'è Pedo ad aprirci gli occhi sull'open source.
E che cazzo!!! (si può dire...?)

Unknown said...

se po' di' , se po' di', ao!
tze tze