Knowledge Aided Engineering Manufacturing and Related Technologies Computer Graphics Michele Antolini 09/03/2012 [email protected] Prime applicazioni di computer graphics Sketchpad • 1963 - Ivan Sutherland sviluppa una delle prime GUI (Graphical User Interface) utilizzando un plotter 2D e una penna luminosa, sviluppando il concetto innovativo di oggetti e istanze KAEMaRT Michele ANTOLINI Prime applicazioni di computer graphics Sketchpad • La tesi di dottorato di Sutherland è stata la base per i moderni software per il Computer Aided Design (CAD), per la programmazione object oriented e, in generale, per le Graphical User Interfaces (GUI) KAEMaRT Michele ANTOLINI Sketchpad AN INTRODUCTORY EXAMPLE • I segmenti sono congiunti per via di un vincolo matematico • Non hanno semplicemente le stesse coordinate numeriche! • Basi della modellazione parametrica (oltre gli scopi del corso) KAEMaRT Michele ANTOLINI AMPLE Sketchpad KAEMaRT 23 Michele ANTOLINI Sketchpad KAEMaRT Michele ANTOLINI Sketchpad KAEMaRT Michele ANTOLINI Sketchpad KAEMaRT Michele ANTOLINI Sketchpad KAEMaRT Michele ANTOLINI Sketchpad KAEMaRT Michele ANTOLINI Sketchpad KAEMaRT Michele ANTOLINI Sketchpad • Sketchpad si può inoltre considerare il primo esempio di software per la grafica vettoriale (vector graphics) • La tesi di Sutherland è disponibile online all'indirizzo: http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-574.pdf • Biografia di Ivan Sutherland http://en.wikipedia.org/wiki/Ivan_Sutherland KAEMaRT Michele ANTOLINI Grafica 2D • La grafica 2D si definisce generalmente come generazione di immagini digitali basata su calcolatore • Rappresenta generalmente modelli geometrici (2D), testo, immagini digitali • Si divide in: • Pixel Art: ogni immagine visualizzata è concepita come un insieme (ordinato) di punti (detti pixel, da picture element). Ogni manipolazione modifica il colore di pixel specifici. Un'immagine definita come griglia di punti si definisce raster graphics. • Grafica Vettoriale: le immagini sono generate a partire da primitive geometriche come punti, linee, curve, poligoni, basandosi su funzioni matematiche KAEMaRT Michele ANTOLINI Raster vs Vector Fonte: Wikipedia KAEMaRT Michele ANTOLINI Grafica 2D • Pixel: un pixel è la più piccola unità rappresentabile su uno schermo • Immagine: un’immagine è un oggetto bidimensionale formato da un insieme ordinato (per righe e per colonne) di pixel KAEMaRT Michele ANTOLINI Grafica 2D • Rasterizzazione: la rasterizzazione è un’operazione che permette di trasformare grafica vettoriale (descritta matematicamente) in un’immagine • Ad ogni pixel viene associato un colore KAEMaRT Michele ANTOLINI Grafica 3D • Tassellazione: si può considerare l’equivalente 3D della rasterizzazione. • Dalla rappresentazione matematica di un elemento (segmento, curva, superficie) se ne genera un’approssimazione formata da triangoli KAEMaRT Michele ANTOLINI Grafica 3D • Le applicazioni della grafica 3D si basano sulla rappresentazione tridimensionale di funzioni geometriche (punti, linee, curve, superfici, solidi) e ne forniscono la rappresentazione su schermo tramite proiezioni bidimensionali, dette rendering • Rendering: processo di generazione di un'immagine a partire da un modello tridimensionale • Per effettuare l'operazione è necessario specificare: • Geometria • Punto di vista e field of view (FOV) • Texture (letteralmente “tessuto”) • Illuminazione • Shading (letteralmente “ombreggiatura”) KAEMaRT Michele ANTOLINI PROIEZIONE PROSPETTICA KAEMaRT Michele ANTOLINI Proiezione prospettica • Frustum: solido troncato da due piani paralleli. • Si utilizza la definizione di una piramide a base quadrata e dei piani near e far per racchiudere la scena visibile dal punto di vista dell’utente (posto all’apice della piramide) e proiettarla in una finestra (viewport) di dimensioni specificate (top, bottom, left, right) KAEMaRT Michele ANTOLINI Proiezione prospettica / 2 • Frustum: solido troncato da due piani paralleli. • Si può definire il volume di rendering specificando le dimensioni della viewport (width e height), le distanze near e far e l’angolo coperto dal campo visivo lungo l’asse Y ( Field Of View Y) KAEMaRT Michele ANTOLINI Proiezione ortogonale parallela • La proiezione ortogonale di una scena racchiusa in un parallelepipedo ha la caratteristica di conservare il parallelismo delle rette indipendentemente dal punto di vista KAEMaRT Michele ANTOLINI Rendering • Definendo geometria, punto di vista e campo visivo è possibile proiettare la scena 3D su un piano per calcolarne la rasterizzazione A A’ B B’ Centro di proiezione KAEMaRT Michele ANTOLINI Piano di proiezione TEXTURE MAPPING KAEMaRT Michele ANTOLINI Texture mapping • Applicazione di un’immagine bidimensionale (detta texture) sulla superficie di un oggetto 3D. KAEMaRT Michele ANTOLINI Texture mapping • Applicare una texture significa generare una corrispondenza tra un punto su una superficie 3D ed un altro su un’immagine bidimensionale • Non esiste un modo univoco per risolvere il problema http://www.siggraph.org/education/materials/HyperGraph/hypergraph.htm KAEMaRT Michele ANTOLINI Texture mapping • È possibile mappare, ad esempio, le coordinate parametriche (u,v) di una superficie con le coordinate della texture (normalizzati tra 0 e 1) http://www.siggraph.org/education/materials/HyperGraph/hypergraph.htm KAEMaRT Michele ANTOLINI Texture mapping • Utilizzando una mappatura non lineare è possibile ottenere diversi effetti http://www.siggraph.org/education/materials/HyperGraph/hypergraph.htm KAEMaRT Michele ANTOLINI Texture mapping - Proiezione • Un’altra tecnica si basa invece sulla proiezione della geometria su un piano http://www.siggraph.org/education/materials/HyperGraph/hypergraph.htm KAEMaRT Michele ANTOLINI Texture mapping - Proiezione • La coordinata ortogonale al piano di proiezione viene ignorata durante l’applicazione della texture http://www.siggraph.org/education/materials/HyperGraph/hypergraph.htm KAEMaRT Michele ANTOLINI Texture mapping – Cylinder mapping • Chiusura della texture su sé stessa (a formare un cilindro) e trasformazione delle coordinate x,y,z in coordinate cilindriche ( r, theta, altezza) http://www.siggraph.org/education/materials/HyperGraph/hypergraph.htm KAEMaRT Michele ANTOLINI Texture mapping – Cylinder mapping • Dopo la trasformazione in coordinate cilindriche, la r viene ignorata (tutti i punti della geometria con uguali theta e altezza hanno lo stesso colore) http://www.siggraph.org/education/materials/HyperGraph/hypergraph.htm KAEMaRT Michele ANTOLINI Texture mapping – Cylinder mapping • Dopo la trasformazione in coordinate cilindriche, la r viene ignorata (tutti i punti della geometria con uguali theta e altezza hanno lo stesso colore) http://www.siggraph.org/education/materials/HyperGraph/hypergraph.htm KAEMaRT Michele ANTOLINI Texture mapping – Sphere mapping • Inscrizione della geometria all’interno di una sfera e proiezione della texture http://www.siggraph.org/education/materials/HyperGraph/hypergraph.htm KAEMaRT Michele ANTOLINI Texture mapping – Cube mapping • Il cube mapping necessita di 6 immagini, corrispondenti alle sei facce di un cubo che circonda la geometria http://www.siggraph.org/education/materials/HyperGraph/hypergraph.htm KAEMaRT Michele ANTOLINI Texture mapping – Cube mapping • Insieme allo sphere mapping, il cube mapping è la tecnica più utilizzata per risolvere il problema dell’environment mapping ed è sfruttata massivamente nei giochi http://www.siggraph.org/education/materials/HyperGraph/hypergraph.htm KAEMaRT Michele ANTOLINI Bump mapping • Il bump mapping permette di aumentare il livello di dettaglio di una scena senza aggiungere complessità alle geometrie • La tecnica si basa sull’interpretazione di una texture (solitamente in scala di grigi) applicata ad un oggetto per generare sporgenze, solchi o rugosità. • La corrispondenza tra il livello di grigio e l’entità del solco o della sporgenza è definito dall’utente al momento dell’applicazione della texture. KAEMaRT Michele ANTOLINI Bump mapping • L’utilizzo del bump mapping permette di calcolare l’ombreggiatura di un oggetto ma non ne cambia la geometria • Nell’immagine di esempio, infatti, la sagoma delle sfere non viene influenzata dalla presenza di solchi KAEMaRT Michele ANTOLINI SHADING KAEMaRT Michele ANTOLINI Shading • Lo shading è l'operazione che permette, dato il colore di una superficie o di una faccia di un poligono, di calcolarne l'ombreggiatura in base alla direzione della luce (partendo dalla posizione della sorgente luminosa). • Flat shading: assegnazione di una tonalità di colore per ogni faccia dei poligoni contenuti nella scena • Smooth shading: per ogni pixel dell'immagine rasterizzata, la tonalità di colore dipende dall'interpolazione dei vettori normali alle facce del poligono. I diversi algoritmi di smooth shading si differenziano in base al metodo di interpolazione dei vettori normali. KAEMaRT Michele ANTOLINI Shading FLAT SHADING KAEMaRT SMOOTH SHADING (Gouraud e Phong) Michele ANTOLINI Shading • Oltre agli algoritmi di shading predefiniti, è possibile programmare algoritmi personalizzati da far eseguire direttamente dalla scheda grafica • Questa funzionalità rende possibile la definizione di materiali complessi al fine di ottenere effetti fotorealistici • Il massimo grado di fotorealismo è raggiunto da algoritmi di raytracing, che simulano il comportamento dei fotoni emessi da una sorgente luminosa KAEMaRT Michele ANTOLINI Realistic rendering http://www.realtime-technology.com KAEMaRT Michele ANTOLINI Realistic rendering http://www.nvidia.com KAEMaRT Michele ANTOLINI Computer Grafica • I programmi di grafica (non solo 3D) hanno una struttura molto simile • Fasi: • Definizione geometrie (vertici, vettori, linee, poligoni, curve, superfici, volumi) • Definizione punto di vista, FOV, proiezione • Tassellazione, shading (+ eventuali texture) • Sono coinvolti vettori, matrici, equazioni matematiche KAEMaRT Michele ANTOLINI FASI STORICHE KAEMaRT Michele ANTOLINI Software -> Hardware • Anni ‘80: Presenza di algoritmi maturi per le operazioni 3D (la tesi di Sutherland è del 1963) • Necessità di applicare ad un grande numero di dati le medesime operazioni • 1984: la IBM rilascia il primo tentativo di scheda per PC dedicata all'accelerazione hardware 2D/3D (con un processore 8088-2, 8MHz) • Negli anni '90 l'accelerazione 2D prima e 3D poi diventano sempre più importanti per le prestazioni dei computer, così società come S3, ATI, Matrox cominciano a produrre schede di accelerazione hardware sempre più performanti KAEMaRT Michele ANTOLINI OpenGL • 1992: la Silicon Graphics sviluppa una specifica per disegnare scene tridimensionali a partire da chiamate a funzioni primitive • Si tratta della prima definizione di Open Graphics Library (OpenGL) • Definita come interfaccia: i costruttori implementano le funzioni in base allo specifico hardware sottostante • 2007: il controllo dell’interfaccia OpenGL passa al consorzio Khronos Group KAEMaRT Michele ANTOLINI OpenGL • È una specifica, un insieme di API (definizione dei punti di ingresso per la programmazione) • Non è legata ad hardware specifico, le funzionalità sono modellate in maniera astratta • È uno standard aperto e ne esistono implementazioni per diversi sistemi operativi (anche di tipo mobile (iPhone, Android, Symbian) KAEMaRT Michele ANTOLINI OpenGL • Implementazioni software di funzioni non supportate dall’hardware • Sfruttamento delle capacità dei diversi acceleratori 3D • L’interfaccia si è evoluta nel tempo, ma la filosofia iniziale non è mai cambiata (es. principio della macchina a stati, astrazione dalle funzionalità hardware) KAEMaRT Michele ANTOLINI OpenGL - Date • 1992: OpenGL 1.0 • 1997 (gennaio): OpenGL 1.1, texture su GPU • 1998-2003 OpenGL viene aggiornato più o meno annualmente • 2004: OpenGL 2.0, shaders programmabili (GLSL, OpenGL Shading Language) • 2008: OpenGL 3.0, geometry shader, vertex array (tra le altre cose) • 2010 (11 marzo) OpenGL 4.0: • tassellazione • virgola mobile a 64bit (doppia precisione) per gli shader • supporto OpenCL (GPGPU) per lo sfruttamento della GPU per General Purpose computing KAEMaRT Michele ANTOLINI OpenGL • L’interfaccia OpenGL ha portato nel tempo ad una convergenza nell’architettura hardware delle schede grafiche • Nelle schede grafiche attuali, sezioni specifiche si occupano della gestione di: • punti, linee, poligoni (primitive base) • Generazione e tassellazione di curve e superfici parametriche • pipeline per trasformazioni e illuminazione • Z-buffering • Texture mapping • Alpha blending KAEMaRT Michele ANTOLINI OpenGL • OpenGL non si occupa di: • event management • input management (tastiera/mouse) • window management • L’ambiente di sviluppo per OpenGL è normalmente costituito da alcune librerie: • gl OpenGL • glu GL Utilities • gl<ws> Estensione per <ws> (window system) • glut Interfaccia a <ws> KAEMaRT Michele ANTOLINI OpenGL Libreria gl • • • • • • • rendering 3D lighting z-buffering alpha blending applicazione texture antialiasing fog KAEMaRT Michele ANTOLINI OpenGL Libreria glu • gestione parametri viewing • gestione texture mapping • polygon tessellation (decompositore generico di poligoni concavi) • curve e superfici parametriche • gestione errori KAEMaRT Michele ANTOLINI OpenGL Libreria glut • • • • • interfaccia con il window system gestione eventi gestione input keyboard/mouse primitive 3D realizza trasparenza rispetto al window system sottostante KAEMaRT Michele ANTOLINI Direct3D • Parte delle DirectX (interfaccia per la gestione della multimedialità e delle periferiche di gioco per MS Windows) • Interfaccia proprietaria, sviluppata da Microsoft e implementata solo per sistemi Microsoft • Estremamente legata all’hardware e alle funzionalità fornite dalle schede grafiche • Per ogni versione, la backward compatibility è difficilmente garantita • Dalla versione 9 in poi le prestazioni sono molto elevate e l’architettura è diventata matura • Maggiore sfruttamento dell’hardware sottostante a discapito della compatibilità KAEMaRT Michele ANTOLINI GPU • Le schede grafiche (GPU) non sono più “semplici” rasterizer ma gestiscono luci, texture e shading • Negli anni 2000 i produttori di GPU forniscono gli strumenti per programmare direttamente sull’hardware gli algoritmi di shading • Ogni vertice della geometria ed ogni pixel rasterizzato vengono processati da un programma residente sulla GPU che può includere texture aggiuntive o altri tipi di input KAEMaRT Michele ANTOLINI Shaders • I primi shaders erano definiti direttamente nell’hardware della scheda video (flat e smooth shaders) • Prima di OpenGL 2.0, alcune schede grafiche erano programmabili in linguaggio assembler, il cui codice binario doveva essere copiato sulla scheda • Con OpenGL 2.0 è stato definito un linguaggio di programmazione per shaders, il GLSL (OpenGL Shading Language) KAEMaRT Michele ANTOLINI Shaders • Le schede grafiche diventano una logica programmabile • Il consorzio OpenGL ARB (Architecture Review Board) detta le specifiche per il linguaggio di alto livello (simile al C) con cui programmare le schede • Il compilatore è integrato nei driver OpenGL (se compatibile 2.0) di ogni scheda, quindi ottimizzato a seconda dell’hardware sottostante KAEMaRT Michele ANTOLINI Shaders • Gli shaders seguono il paradigma di programmazione definito stream processing • La GPU permette centinaia, migliaia di operazioni contemporanee su dati multipli: Single Instruction Multiple Data (SIMD) • Uno shader è un vero e proprio programma che sfrutta le capacità di calcolo parallelo della GPU KAEMaRT Michele ANTOLINI GLSL • Il consorzio OpenGL ARB ha definito un linguaggio standard di alto livello per la programmazione di shaders • Sono stati tenuti in considerazione molti requisiti: • Buona integrazione con specifiche OpenGL • Possibilità di sfruttamento di hardware futuro • Indipendenza dall’hardware sottostante • Semplicità e longevità • Compatibilità con calcolo parallelo massivo KAEMaRT Michele ANTOLINI GLSL • Gli shaders si dividono in vertex shaders e fragment shaders • Sono solitamente associati tra di loro • Il vertex shader è l’algoritmo che viene richiamato per ogni vertice risultante dalla tassellazione e gestisce le caratteristiche del modello • Il fragment shader (o pixel shader) viene richiamato per ogni pixel dell’immagine e gestisce texture e bump mapping KAEMaRT Michele ANTOLINI GLSL - Esempi KAEMaRT Michele ANTOLINI GLSL - Esempi Toon Shader KAEMaRT Michele ANTOLINI GLSL - Esempi Shader Animati (i calcoli vengono eseguiti dalla GPU) KAEMaRT Michele ANTOLINI GLSL - Esempi Shader Animati (i calcoli vengono eseguiti dalla GPU) KAEMaRT Michele ANTOLINI GLSL - Esempi Effetti particellari (le traiettorie delle particelle sono calcolati in parallelo dalla GPU) KAEMaRT Michele ANTOLINI GPGPU • Le schede grafiche odierne non si occupano più solo di grafica • La programmabilità e la capacità di eseguire calcoli complessi da applicare ad un gran numero di dati in contemporanea (alto parallelismo a livello hardware) fa preferire l’esecuzione di alcuni algoritmi su GPU piuttosto che su CPU • Questa tecnica si definisce General Purpose (Computing) on GPU (GPGPU) • Esistono numerose applicazioni in grado di sfruttare la GPU, non solo di tipo scientifico, ma anche programmi di grafica come Photoshop parti del sistema operativo Mac OSX Snow Leopard • Esistono anche diverse implementazioni di encoder/decoder audio/video che, sfruttando la GPU, riescono ad incrementare le prestazioni anche di 20 volte rispetto alle implementazioni per CPU KAEMaRT Michele ANTOLINI Librerie per GPGPU Le principali librerie che permettono l’esecuzione di codice su GPU sono: • OpenCL (standard utilizzato dal sistema operativo Snow Leopard ) • CUDA (sviluppato per le schede Nvidia) • Stream (sviluppato per le schede Ati) KAEMaRT Michele ANTOLINI Un po’ di teoria adesso! LET’S START KAEMaRT Michele ANTOLINI