Computer grafica 3D

computer grafica tridimensionale

La Computer grafica 3D è un ramo della Computer grafica che si basa sull'elaborazione di modelli virtuali in 3D da parte di un computer. Essa viene utilizzata insieme alla computer animation nella realizzazione di immagini visuali per cinema o televisione, videogiochi, ingegneria, usi commerciali o scientifici. Il termine può anche essere riferito ad immagini prodotte con lo stesso metodo.

Aspetti teorici

La Computer grafica 3D è basicamente la scienza, lo studio e il metodo di proiezione della rappresentazione matematica di oggetti tridimensionali tramite un'immagine bidimensionale attraverso l'uso di tecniche come la prospettiva e l'ombreggiatura (shading) per simulare la percezione di questi oggetti da parte dell'occhio umano. Ogni sistema 3D deve fornire due elementi: un metodo di descrizione del sistema 3D stesso ("scena"), composto di rappresentazioni matematiche di oggetti tridimensionali, detti "modelli", e un meccanismo di produzione di un'immagine 2D dalla scena, detto "renderer".

Modelli 3D

Oggetti tridimensionali semplici possono essere rappresentati con equazioni operanti su un sistema di riferimento cartesiano tridimensionale: per esempio, l'equazione 1+1=2 è perfetta per una sfera di raggio r. Anche se equazioni così semplici possono sembrare limitative, l'insieme degli oggetti realizzabili viene ampliato con una tecnica chiamata geometria solida costruttiva (CSG, constructive solid geometry), la quale combina oggetti solidi (come cubi, sfere, cilindri, ecc.) per formare oggetti più complessi attraverso le operazioni booleane (unione, differenza e intersezione): un tubo può ad esempio essere rappresentato come la differenza tra due cilindri di diametro differente.

Anche questa tecnica non risulta però sufficiente a descrivere con equazioni semplici una gran quantità di oggetti, per cui non è di utilizzo comune. Per modellare superfici curve in modo arbitrario si possono usare le patch, ovvero l'estensione delle spline, che approssimano curve continue, alle tre dimensioni. Le patch più comunemente usate sono in pratica basate su spline NURBS.

L'impiego di equazioni matematiche pure come queste richiede l'utilizzo di una gran quantità di potenza di calcolo, e non sono quindi pratiche per le applicazioni in tempo reale come videogiochi e simulazioni. Una tecnica più efficiente, ma che permette un minore livello di dettaglio, per modellare oggetti consiste nel rilevare solo alcuni punti dell'oggetto, senza informazioni sulla curva compresa tra di essi. Il risultato è chiamato modello poligonale. Questo presenta "faccette" piuttosto che curve, ma sono state sviluppate tecniche di rendering per ovviare a questa perdita di dati.

Delle superfici poligonali di un modello senza informazioni sulla curvatura possono essere comunque raffinate per via algoritmica in superfici perfettamente curve: questa tecnica è chiamata "superfici di suddivisione", perché la superficie viene suddivisa con un processo iterativo in più superfici, sempre più piccole, fedeli alla curva interpolata e che vanno a comporre un'unica superficie sempre più liscia.

Creazione della scena

Una scena si compone di "primitive" (modelli tridimensionali che non possono essere ulteriormente scomposti); il modo più semplice per organizzarla è quello di creare un array di primitive, ma questo metodo non permette una descrizione più dettagliata della scena, semplicemente "spiega" al renderer come disegnare la stessa. Una tecnica più avanzata organizza gli oggetti in una struttura dati ad albero (scene graph), che permette di raggruppare logicamente gli oggetti (ad esempio, si può quindi replicare volte un oggetto, avendolo modellato attraverso più patch NURBS raggruppate, all'interno della stessa scena).

Le primitive sono generalmente descritte all'interno del proprio sistema di riferimento locale, e vengono posizionate sulla scena attraverso opportune trasformazioni. Le trasformazioni affini più impiegate, come omotetia, rotazione e traslazione, possono essere descritte in uno spazio proiettivo con una matrice 4x4: esse si applicano moltiplicando la matrice per il vettore a quattro componenti che rappresenta ogni punto di controllo delle curva. La quarta dimensione è denominata coordinata omogenea.

Ad ogni nodo dello scene graph è associata una trasformazione, che si applica anche ad ogni nodo sottoposto, ricreando l'interazione fisica tra oggetti raggruppati (come quella tra un uomo e il suo vestito). Anche in sistemi di modellazione e rendering che non fanno uso di scene graph è comunque generalmente presente il concetto di trasformazione applicata "in verticale".

Rendering

Per maggiori informazioni, visita l'articolo principale Rendering

Il rendering è il processo di produzione dell'immagine finale a partire dal modello matematico del soggetto (scena). Esistono molti algoritmi di rendering, ma tutti implicano la proiezione dei modelli 3D su una superficie 2D.

Gli algoritmi di rendering si dividono in due categorie: scanline renderers e ray tracers. I primi operano oggetto per oggetto, disegnando direttamente su schermo ogni poligono o micropoligono; essi richiedono quindi che tutti gli oggetti (anche quelli modellati con curve continue) siano stati sfaccettati in poligoni. I secondi operano pixel per pixel, tracciando un raggio visuale immaginario dal punto di vista all'interno della scena, e determinando il colore del pixel dalle intersezioni con gli oggetti.

Una delle funzioni principali di un renderer è la determinazione della superficie nascosta. Il ray tracing svolge implicitamente questa funzione, determinando il colore di un pixel in base all'intersezione del raggio visuale col primo oggetto, ma per l'altro tipo di algoritmi servono tecniche più avanzate per determinare quale poligono sia il più vicino al punto di vista. Il metodo più semplice è quello di disegnare i poligoni a partire da quelli più lontani, in modo che quelli più vicini li sovrascrivano; ma questa tecnica, detta painter's algorithm, "algoritmo del pittore", si rivela inefficace con poligoni sovrapposti. Per risolvere questo problema fu sviluppato lo z-buffering, che impiega un buffer per conservare la coordinata z relativa ad ogni pixel elaborato: se la profondità del poligono che sta per essere elaborato per il pixel è minore di quello in memoria, il pixel viene riscritto; altrimenti l'algoritmo passa al pixel successivo.

Un'immagine perfettamente nitida, con profondità di campo infinita non è affatto fotorealistica. L'occhio umano è abituato alle imperfezioni come il lens flare (il riflesso sulla lente), la limitatezza della profondità di campo e il motion blur ("effetto movimento") presenti nelle fotografie e nei film.

Illuminazione e shading

Lo shading (lett. "ombreggiatura") è il processo di determinazione del colore di un determinato pixel dell'immagine. Esso comprende in genere il processo di illuminazione (lighting), che ricostruisce l'interazione tra gli oggetti e le sorgenti di luce: a questo scopo sono necessari per un modello di illuminazione le proprietà della luce, le proprietà di riflessione e la normale alla superficie del punto in cui l'equazione di illuminazione viene calcolata.

Per produrre una rappresentazione visuale dell'immagine efficace, bisogna simulare la fisica della luce. Il modello matematico più astratto del comportamento della luce è l'equazione di rendering, basata sulla legge di conservazione dell'energia. Essa è un'equazione integrale, che calcola la luce in una certa posizione come la luce emessa in quella posizione sommata all'integrale della luce riflessa da tutti gli oggetti della scena che colpisce quel punto. Questa equazione infinita non può essere risolta con algoritmi finiti, quindi necessita di approssimazione.