Informatica Grafica (2a parte) a.a. 2011/2012 Prof. Massimiliano Dellisanti Fabiano Vilardi 1 Grafica 3D Con “Grafica 3D” si indicano quelle tecniche informatiche finalizzate alla descrizione (e rappresentazione ) di oggetti in uno spazio tridimensionale. Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 2 Stereoscopia La Grafica 3D non va confusa con la “Stereoscopia” che è invece una tecnica di visualizzazione finalizzata a riprodurre la sensazione di “profondità” mediante l’uso di di coppie di immagini (una per l’occhio destro e una per l’occhio sinistro, in modo da replicare il fenomeno della visione binoculare per mezzo del quale l’uomo osserva l’ambiente circostante) Esistono diverse tecniche e dispositivi stereoscopici. Ad esempio: Head Mount Display Metodo degli Anaglifi Stereoscopia mediante filtraggio attivo Stereoscopia mediante filtraggio passivo Monitor Autostereoscopici Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 3 Stereoscopia Head Mount Display Anche denominati “caschi per la realtà virtuale”: sono dispositivi da indossare provvisti di lenti e doppio monitor opportunamente posizionati per consentire la visione binoculare. Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 4 Stereoscopia Anaglifi Un anaglifo è una immagine ottenuta dalla sovrapposizione di due immagini (una per occhio) filtrate mediante due lenti di colore complementare (tipicamente rosso e blu). Osservando l’anaglifo con un paio di occhiali provvisti di lenti degli stessi due colori, si possono separare le due immagini e osservarne ciascuna su ciascun occhio simulando la visione binoculare. Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 5 Stereoscopia Visualizzazione Stereoscopica mediante filtraggio passivo Usata nella proiezione di film nei “cinema 3D”. Due pellicole cinematografiche (una per occhio) vengono proiettate su uno schermo attraverso filtri polarizzatori. Gli spettatori indossano occhiali provvisti di filtri dello stesso tipo capaci di separare nuovamente le due immagini (che sono sovrapposte sullo schermo). Rispetto al metodo degli anaglifi viene preservato il colore dell’immagine. Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 6 Stereoscopia Visualizzazione Stereoscopica mediante filtraggio attivo Usata nei “televisori 3D”. Il televisore mostra le immagini destra e sinistra alternandole ad elevata velocità. Il telespettatore indossa un paio di occhiali “attivi” (detti shutter glasses) capaci di oscurare (e rendere trasparente) le due lenti alternativamente e in maniera sincrona con le immagini provenienti dal monitor. In questo modo ciascun occhio vede solo l’immagine che gli compete. Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 7 Stereoscopia Monitor Autostereoscopici Sono monitor provvisti di un reticolo ottico capace di indirizzare immagini diverse a seconda dell’angolo di osservazione, permettendo ad un occhio di vedere una immagine diversa da quella che vede l’altro. Spesso gli angoli di visione sono troppo stretti e poco adatti a grandi schermi. Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 8 Grafica 3D In maniera analoga al caso bidimensionale possiamo distinguere due modalità di rappresentazione della scena 3D: Rappresentazione Volumetrica (Volume Rendering) Rappresentazione Vettoriale La scena è descritta da voxel (volume pixel) ordinati in una griglia tridimensionale. E’ questo il tipico caso delle immagini mediche provenienti da TAC, RMN, ecc. La scena è descritta da primitive geometriche tridimensionali. Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 9 Grafica 3D Vettoriale Gli oggetti sono descritti mediante una opportuna composizione di figure geometriche semplici. Nel caso di solidi complessi (non facilmente riducibili in sfere, coni e parallelepipedi) si usa la tecnica delle mesh. Una mesh è un opportuno reticolo di punti (nuvola di punti descritti ciascuno da coordinate x,y,z) appartenenti alla superficie del solido che si vuole descrivere. I punti possono essere organizzati in gruppi di tre: poiché per una terna di punti passa una ed una sola superficie piana, ogni tripletta definisce un triangolo piano opportunamente orientato nello spazio 3D. Pertanto una qualunque superficie è approssimata mediante un numero sufficientemente elevato di triangoli piani. Di fatto anche le superfici descritte mediante forme geometriche primitive vengono ridotte ad un insieme di triangoli per essere visualizzate. La scheda video si limita ad effettuare le operazioni di visualizzazione su un numero elevato di triangoli attraverso i quali si compone tutta la scena 3D. Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 10 Camera Model L’insieme di oggetti presenti nello spazio 3D virtuale costituiscono la Scena 3D. La scheda video del calcolatore si occupa della operazione di rendering, ovvero della generazione di una immagine bidimensionale (di tipo raster) a partire dalla descrizione numerica (sotto forma di punti, triangoli, coordinate) della scena. Vieni quindi effettuata (matematicamente) la proiezione dei punti (e dei triangoli) su un piano di proiezione (coincidente con la superficie del monitor) in modo da ottenere le coordinate 2D con le quali tracciare le immagini raster. Perché questo sia possibile bisogna disporre oltre che della descrizione della scena, anche della descrizione del punto di vista dell’osservatore. Si immagina che l’osservazione avvenga per mezzo di una macchina fotografica (camera) virtuale che riprende la scena. Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 11 Camera Model Punto di osservazione della camera virtuale. Come tutti gli oggetti di una scena 3D, la camera ha una posizione (coordinate x,y,z) ma anche una orientazione, ovvero “guarda” in una specifica direzione (3 angoli di rotazione rispetto agli assi). Pertanto diremo che gli oggetti 3D hanno 6 gradi di libertà (6 Degrees Of Freedom: la collocazione nella scena 3D è determinata da 6 variabili indipendenti) Viewing Frustrum (View Volume) (Solo gli oggetti posizionati all’interno di questo tronco di piramide vengono renderizzati) Far Plane (Back Clipping Plane) (Gli oggetti più lontani dalla camera rispetto a questo piano non vengono renderizzati) Piano di proiezione (View Plane) Field Of View orizzontale Angolo di apertura orizzontale dell’obbiettivo virtuale Near Plane (Front Clipping Plane) (Gli oggetti più vicini alla camera rispetto a questo piano non vengono renderizzati) Field Of View verticale Angolo di apertura verticale dell’obbiettivo virtuale Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 12 Matrici di Proiezione Le coordinate dello spazio 3D devono essere proiettate sul View Plane. Le coordinate 2D ottenute permettono di generare l’immagine raster risultante. Proiezione Prospettica y P(x,y,z) yv z d xv = (d/z) x + 0 y + 0 z yv = 0 x + (d/z) y + 0 z zv = 0 x + 0 y + (d/z) z (la coordinata Z in realtà risulta utile solo ai fini dello zbuffer come vedremo in seguito e non per la determinazione del punto sul view plane) (Piano di proiezione) Matrice di Proiezione Prospettica Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi d/z 0 0 0 d/z 0 0 0 d/z 13 Matrici di Proiezione Sebbene la proiezione prospettica produce un rendering più realistico è possibile proiettare i punti mediante proiezione ortogonale. Proiezione Ortogonale y P(x,y,z) yv z d xv = 1 x + 0 y + 0 z yv = 0 x + 1 y + 0 z zv = 0 x + 0 y + 1 z (la coordinata Z risulta utile solo ai fini dello z-buffer come vedremo in seguito e non per la determinazione del punto sul view plane) (Piano di proiezione) Matrice di Proiezione Ortogonale Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 1 0 0 0 1 0 0 0 1 14 Trasformazioni Geometriche Per ruotare, traslare ed in generale trasformare la collocazione degli oggetti nello spazio 3D dobbiamo agire sulle coordinate dei punti che li descrivono. Tutte le operazioni possibili sono descritte dalla seguente trasformazione affine: p = A p’ + b A = matrice 3x3 p,p’,b = vettori dello spazio 3D Tutte le operazioni possono essere ridotte ad una opportuna composizione di 3 tipi di trasformazioni fondamentali: Traslazione Rotazione Scala Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 15 Trasformazioni Geometriche Traslazione: Spostamento di un punto nello spazio 3D di un vettore b = [ bx, by, bz ] Y b X y= Ix+b I = matrice identità b = vettore spostamento Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 16 Trasformazioni Geometriche Rotazione: Spostamento di un punto nello spazio 3D attorno ad uno degli assi coordinati di un angolo α (si osservi che gli assi x,y e z sono orientati per convenzione secondo l’ordine dettato dalla regola della mano destra. Analogamente gli angoli crescono nel verso indicato dalla regola della mano destra) y p’(x’,y’,z’) α z x’ = cos(α) x – sin(α) y y’ = sin(α) x + cos(α) y z’ = z p(x,y,z) x p’ = R p R = matrice di rotazione Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 17 Trasformazioni Geometriche Matrice di Rotazione attorno all’asse X: 1 0 0 0 cos(α) -sin(α) 0 sin(α) cos(α) Matrice di Rotazione attorno all’asse Y: cos(α) 0 -sin(α) 0 1 0 sin(α) 0 cos(α) Matrice di Rotazione attorno all’asse Z: cos(α) -sin(α) 0 sin(α) cos(α) 0 0 0 1 Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 18 Trasformazioni Geometriche Scala: L’operazione di scala consiste nel moltiplicare ciascuna coordinata per un fattore k y= Sx S = matrice di scala Esempi di trasformazioni di scala: Matrice di Scala: kx 0 0 0 ky 0 0 0 kz simmetria rispetto al piano xy (kx = 1; ky = 1; kz = -1) simmetria rispetto all’asse x (kx = 1; ky = -1; kz = -1) simmetria rispetto all’origine (kx = -1; ky = -1; kz = -1) Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 19 Coordinate Omogenee Introduciamo una notazione che ci permette di scrivere le trasformazioni in maniera più compatta. Aggiungiamo una dimensione ai vettori in modo che sia: wx wy p wz w con w 0 In particolare scegliamo w = 1 In questo modo la generica trasformazione p = A p’ + b, tradotta nello spazio delle coordinate omogenee, si può scrivere: A y=Tx con T matrice 4x4 : b T= 0 0 0 1 Ora la matrice T può contenere sia informazioni di rotazione e scala, che di traslazione Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 20 Trasformazioni Geometriche Composizione di Trasformazioni: P3 P1 T0 P1 = T0 P0 P2 = T1 P1 = T1 ( T0 P0 ) P3 = T2 P2 = T2 ( T1 P1 ) = T2 ( T1 ( T0 P0 ) ) … T1 T2 P2 P0 Si osserva pertanto che le matrici di trasformazione si possono comporre mediante moltiplicazione a sinistra: T = T2 T1 T0 Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 21 Rasterizzazione di punti e segmenti La scheda video è capace di effettuare le operazioni di proiezione e trasformazione (moltiplicazioni matriciali) per ciascun punto. Una volta proiettati i punti di un segmento, la scheda si occupa della “rasterizzazione” del segmento stesso, ovvero del tracciamento dei pixel intermedi sulla immagine raster finale (detta view buffer o frame buffer). (Le schede video implementano l’algoritmo di Bresenham per il tracciamento di linee a causa della sua elevata efficienza) Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 22 Aliasing L’aliasing (in generale) è il fenomeno di rappresentazione ambigua di un segnale. La figura ad esempio mostra un tipico caso di aliasing: sia un segmento obliquo che una serie di segmenti disposti “a scalini” risultano nella stessa rappresentazione sulla matrice di pixel. Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 23 Anti-aliasing Le schede video implementano algoritmi di anti-aliasing, ovvero metodi per migliorare la renderizzazione di linee oblique: L’idea consiste nel considerare il segmento come un rettangolo che “copre” parzialmente dei pixel. I pixel vengono colorati con intensità proporzionale all’area coperta. A distanza sufficiente dallo schermo (e a risoluzioni sufficientemente elevate), l’effetto finale è molto più gradevole. Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 24 Rasterizzazione di triangoli Essendo le superfici rappresentate da triangoli, la scheda video deve saper tracciare non solo i segmenti che li delimitano, ma anche riempirli del loro colore. L’algoritmo di riempimento dei triangoli viene detto algoritmo scan-line (perché il riempimento avviene per righe nel frame buffer: la scheda grafica le scandisce una per una per tracciare i pixel dell’interno del triangolo) Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 25 Lighting, Material, Shading Nessun rendering può essere sufficientemente realistico senza tenere in conto l’effetto della luce sulle superfici. Riprodurre fedelmente i fenomeni di riflessione e rifrazione che avvengono in realtà è particolarmente dispendioso in termini di calcoli necessari rendendo impossibile la generazione di animazioni in tempo reale. Si usano quindi algoritmi di shading (ombreggiata) che simulano e approssimano in maniera grossolana (ma visivamente efficace) i fenomeni luminosi. In ogni scena 3D è possibile definire uno o più sorgenti luminose (per ciascuna si può definire il tipo: posizionale, direzionale, spot-light) Per ogni superficie della scena sono descritte le proprietà ottiche alle quali obbedisce. Tali proprietà definiscono il “materiale” della superficie e sono le seguenti: • Ambient Color (è il colore della superficie non influenzato dalle sorgenti luminose della scena) • Diffuse Color (è il colore della superficie dovuto alla riflessione della luce diffusa) • Specular Color (è il colore della superficie dovuto alla riflessione della luce proveniente dalle sorgenti luminose della scena) • Emissive Color (è il colore della superficie dovuto alla emissione luminosa propria dell’oggetto) • Trasparenza (definisce il livello di trasparenza della superficie) Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 26 Lighting, Material, Shading I colori definiti nel materiale servono per il calcolo del colore dei pixel con il quale verrà riempito il triangolo mediante l’algoritmo scan-line. E’ evidente che per calcolare il colore finale del triangolo è necessario tenere in considerazione la posizione del triangolo nello spazio rispetto alle fonti luminose della scena. Nel caso di una singola fonte luminosa è evidente che la quantità di luce riflessa da una superficie piana dipende dal coseno dell’angolo formato tra la direzione di provenienza della luce e la normale alla superficie. L L L N componente riflessa piccola ⍬=70⁰ Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi N componente riflessa grande ⍬=35⁰ N componente riflessa massima ⍬=0⁰ 27 Flat Shading E’ il metodo di shading (applicazione degli effetti luminosi) sostanzialmente più semplice. Consiste nel calcolare il colore del triangolo in base all’angolo formato dalla direzione della luce e la normale alla superficie. La direzione normale può essere calcolata a partire dalle coordinate die punti del triangolo. 1. Individuazione dell’insieme di triangoli 2. Calcolo della normale per ogni faccia Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 3. Applicazione del lighting ad ogni normale 28 Gouraud Shading Questa metodologia prevede che venga definita a priori una “normale” per ciascun vertice del triangolo. (Tali normali non sono calcolabili matematicamente dai tre punti del triangolo). Il colore viene pertanto calcolato (grazie alle normali) in ciascuno dei tre vertici, quindi l’interno del triangolo viene riempito con il colore ottenuto dalla interpolazione dei tre calcolati. Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 29 Phong Shading Questo tipo di shading è simile al Gouraud ma anziché interpolare il colore dopo aver effettuato il calcolo di shading, l’interpolazione avviene per il calcolo delle normali. In pratica a partire dalle normali in ciascun vertice, viene calcolata una normale (mediante interpolazione) per ciascun punto interno al triangolo. Quindi per ciascun pixel del triangolo (ora dotato di “normale”) viene effettuato il calcolo di shading per ottenerne il colore. Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 30 Confronto tra modelli di Shading Resa estetica crescente Flat shading Gouraud shading Phong Shading Semplicità computazionale Le schede video usano Phong o Gouraud di default Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 31 Z-Buffer L’ordine con il quale i triangoli vengono renderizzati potrebbe causare problemi: una superficie lontana renderizzata per ultima potrebbe sovrapporsi (nell’immagine raster finale) ad una superficie vicina renderizzata prima. Si potrebbero ordinare le primitive prima del rendering così da disegnare prima le superfici più lontane (algoritmo del pittore). Ma questo non risolve i casi in cui le superfici si intersecano. Tale problema è invece risolto dallo Z-Buffer (o Depth-Buffer): si tratta di un’altra griglia di dimensioni pari a quelle del View Buffer, nella quale, in corrispondenza di ciascun pixel, viene annotata la coordinata z di provenienza del pixel. In caso di sovrapposizioni di pixel la scheda grafica è così in grado di decidere se sovrascrivere il colore di quel pixel oppure no. (Lo Z-Buffer è dispendioso in termini di memoria ed è allocato nella memoria della scheda video) 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi + 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 = 5 5 5 5 5 5 5 64 5 5 5 5 5 5 64 64 5 5 5 5 5 64 64 64 5 5 5 5 64 64 64 64 5 5 5 64 64 64 64 64 5 5 64 64 64 64 64 64 5 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 32 Culling e Clipping Per ottimizzare il processo di rendering si omette la proiezione di superfici ritenute poco importanti per l’effetto finale: Culling (eliminazione di primitive non utili) • Occlusion Culling Non viene renderizzato ciò che è coperto da altri oggetti • View Frustrum Culling Non viene renderizzato ciò che è fuori dal frustrum visibile • Backface Culling Non viene renderizzato perché è la parte interna di una superficie chiusa. (devo sapere che la superficie è chiusa, non può essere sempre usato) • Importance Culling Non viene renderizzato perché la sua proiezione è troppo piccola rispetto alla scena Clipping (taglio di quelle porzioni di oggetti e triangoli che fuoriescono dalla zona visibile) Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 33 Scene Graph Le informazioni che costituiscono la scena (posizione della camera, luci, trasformazioni, oggetti, primitive, superfici, materiali, ecc) vengono organizzate nella memoria del calcolatore in una struttura gerarchica (struttura ad albero, oppure “grafo”) detta Scene Graph. I nodi di questa struttura possono rappresentare una primitiva da renderizzare, ma anche operazioni o effetti visivi. Ad esempio un nodo “Trasformazione” permette di applicare la trasformazione geometrica in esso specificata a tutti i nodi suoi figli. Lo stesso dicasi per un singolo nodo “materiale” che può essere applicato a molte superfici in contemporanea. Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 34 OpenGL / DirectX Le schede video sono dunque capaci di realizzare milioni di operazioni al secondo su milioni di triangoli. Le loro funzioni di accelerazione hardware sono sfruttate da librerie software (raccolte di funzioni già scritte e pronte per l’uso) che i programmatori utilizzano nella stesura delle loro applicazioni. Le due librerie che attualmente rappresentano un vero e proprio standard per il controllo e il comando delle schede video sono: Informatica Grafica – Prof. Massimiliano Dellisanti Fabiano Vilardi 35