Il ray-tracing visto dal pinguino

Qual è il passo successivo alla realizzazione di una buona immagine tridimensionale con Blender??

Ovviamente delle operazioni che hanno come fine la resa della immagine stessa più coerente possibile con la realtà, molti sono i sistemi adottati ma uno in particolare rende le scene da voi accuratamente costruite veramente eccellenti e questo è il ray-tracing.

Blender è un software molto potente ma, come molti altri in questo ambito, ha dei campi di applicabilità preferenziali dove è in grado di esprimere tutta la sua potenza mentre in altri settori cede il passo verso altri software.

cgi_face.jpg

Un rendering basato su Blender non è da giudicare pessimo ma sicuramente non è all’altezza delle migliori aspettative; ma torniamo un passo indietro, cos’è il rendering??

Bene, per capire cosa sia pensate di scattare una foto alla vostra scena accuratamente costruita dove avete rivestito gli oggetti creati con una texture e cioè una superficie adeguata alla rappresentazione dello stesso.

Per scattare questa foto, e renderla più realistica possibile, dobbiamo simulare e quindi riprodurre con la massima accuratezza il comportamento che la luce assume mentre si propaga, si riflette, si trasforma ed alla fine colpisce l’obbiettivo della nostra fotocamera virtuale.

Il ray-tracing quindi altro non è che un metodo di rendering che permette di fare proprio questo in modo abbastanza veloce prevedendo la ricostruzione del percorso che i raggi di luce farebbero dalle sorgenti all’occhio in un panorama reale dopo aver attraversato superfici o essere stati riflessi dalle stesse.

Il principio quindi è concettualmente molto semplice ma richiede dei raffinati algoritmi ed una enorme potenza di calcolo quindi, per ovviare almeno in parte a questo, il principio di funzionamento viene stravolto per essere applicato al contrario riducendo così i calcoli necessari.

In questo caso è l’utente che provvede a fornire al software una descrizione il più dettagliata possibile di tutti gli elementi che possono concorrere alla realizzazione del risultato finale e cioè l’immagine.

Molto spesso, se non sempre, questi dati vengono forniti tramite un linguaggio semplice attraverso un file di testo che, riportando al suo interno le istruzioni per il calcolo ed essendo rinominato con un estensione consona, si fa da vettore delle informazioni richieste dal software stesso.

Si potrebbe pensare che sia un sistema scomodo e che forse sarebbe il caso di dotare il tutto di interfaccia grafica ma è necessario pensare che una interfaccia in grado di fornire tutte le info possibili diventerebbe pesante e poco accessibile finendo per peggiorare l’usabilità di tutto il codice.

Le prime informazioni necessarie da fornire al software sono i modelli degli oggetti ed il punto di osservazione delle fotocamera virtuale per il quale si voglia creare l’immagine finale, segue quindi una descrizione delle sorgenti di luce comprensiva di colore, intensità e posizione.

Si passa ora alla descrizione delle superfici degli elementi che compongono l’immagine stessa in quanto la luce si comporta in modo diverso se ad esempio incontra superfici lisce o ruvide oppure opache o lucide.

Siamo quasi alla fine del lavoro, resta soltanto da decidere se nella nostra atmosfera sia presente del fumo o della nebbia o delle altre interferenze.

Una volta fornita la mole di informazioni richieste inizia il calcolo che si rivelerà essere lungo e difficile, tuttavia è possibile accorciare i tempi (e le risorse) grazie ad un uso inverso della teoria sopra esposta.

Invece di calcolare ogni traccia di luce proveniente dalla sorgente e che molto verosimilmente non andrà a collidere con i nostri oggetti visto il grandissimo numero di tracce generate, si può partire dai pixel stessi dell’immagine finale calcolando solo quei raggi che effettivamente avranno una interazione con i nostri modelli.

Immaginiamo quindi di partire dalla fotocamera e di tracciare le scie luminose all’indietro fino ad arrivare alla superfici colpite e successivamente alla sorgente stessa della luminosità.

In questo modo è possibile evitare di compiere milioni e milioni di operazioni in più guadagnando tempo e risorse senza inficiare il risultato che si otterrà.

Certamente questa è una descrizione sommaria del processo in quanto nella realtà i calcoli e le difficoltà da affrontare sono molto più complessi di quelli descritti è inoltre indispensabile considerare che i raggi di luce che impattano sui nostri modelli generano a loro volta altri raggi che potrebbero diventare delle ulteriori sorgenti luminose visto che potrebbero interagire con le superfici di altri oggetti vicini.

La risposta Open a questi calcoli si chiama Pov-ray.

Questo è un software open multi-piattaforma che si presta benissimo a molti usi diversi che non siano quelli del ray-tracing grazie alla sua estrema flessibilità ed alla possibilità di includere librerie esterne.

Per sua natura e per volontà degli sviluppatori il software è completamente gestibile tramite linea di comando e non presenta alcun tipo di interfaccia grafica.

Per iniziare è possibile modificare le immagini proposte insieme al download del software che è possibile effettuare all’indirizzo www.povray.org imparando così i primi comandi da includere all’interno dei file di testo “vettori” che diventano così dei veri e propri programmi.

Pov-ray è integrabile in Blender in modo da renderne più immediata l’esecuzione ed altre operazioni da effettuare prima del calcolo vero e proprio ma vi consiglio di iniziare ad usarlo in modo indipendente da altri software magari consultando la documentazione veramente completa fornita dai suoi realizzatori.

Il bello del ray-tracing, e soprattutto del software che vi ho descritto, è che non si limita ad immagini statiche ma è anche in grado, se pur con caratteristiche poco flessibili, di creare dei filmati.

Più in particolare si possono creare delle sequenze di immagini avendo come inizio una particolare scena da voi creata e variando poi successivamente posizione degli oggetti, colori ed altro.

Ora non vi occorre altro che un qualsiasi software in grado di creare un filmato da una serie di immagini statiche, la gestione di questa caratteristica di pov-ray è gestita da una variabile chiamata “variabile orologio” e puoi assumere valori compresi nel range 0 ed 1.

Un classico esempio di istruzione da fornire nell’ormai famoso file di cui vi ho parlato sopra è la seguente:

1
sphere {<5,0,0> 1 rotate y*360*clock}

in questo modo vedrete una ipotetica sfera ruotare intorno al suo asse verticale.

Scrivere movimenti complessi tramite questo tipo di sintassi richiede una profonda conoscenza del linguaggio ma per fortuna accorre in nostro aiuto “clock modifier”, una libreria che contiene funzioni già pronte in grado di visualizzare movimenti complessi, magari variabili nel tempo, senza dover scrivere complicate stringhe di codice.

Esiste anche una seconda libreria chiamata TimeLine che risulta essere più potente, ma anche più difficile nella gestione, rispetto alla prima in quanto permette la variazione del parametro time.

Concludendo spero di aver dato una giusta idea del ray-tracing e della difficoltà del suo calcolo per questo vi consiglio, se foste interessati ad approfondire l’argomento sul campo, di utilizzare macchine in grado di sviluppare una discreta potenza di calcolo giusto per evitare di addormentarvi al ridosso del vostro pc in attesa dei risultati del software.

Ciao a tutti.



2 commenti presenti

  1. MartinaNo Gravatar settembre 13, 2008 12:45

    “qual è” si scrive senza apostrofo…

  2. ShaytanNo Gravatar settembre 13, 2008 13:28

    opsss………..:P

Lascia un commento

Rispetta le regole del blog. La tua e-mail non verrà pubblicata.