Estratto del documento

Grafica e immagini digitali

Lunedì 29 febbraio 2016 10:37
Prof. Davide Gadia

Lezioni divise in teoria - laboratorio

Orario lezioni:
Lunedì: 10.30 - 12.00, 13.00 - 14.30
Giovedì: 10.30 - 12.00

Obiettivo del corso

Fornire le basi teoriche, tecniche e pratiche della computer graphics.

Laboratorio

Per il laboratorio portare computer e mouse a tre tasti.
Verrà utilizzato Blender: software open source per la modellazione 3D.
Obiettivo del corso: fotorealismo.

Esame

Progetto + Orale (singolarmente)
Date (indicative): 23/6, 14/7, 19/9, 24/1/17
Esame: mezz'ora - 40 minuti a testa

  • Progetto: Vale metà del voto finale
  • Progetto da fare in Blender
  • Verranno valutati sia gli aspetti comunicativi sia gli aspetti tecnici
  • Portare USB (o computer), portare tutto (boh…)
  • Votazione max - 26/30 + possibili 2 punti x stereoscopia, scripting e + punto x animazione

Orale: Vale 50% sul voto finale
Domande su teoria + materiale aggiuntivo per possibili + 4 punti
VOTO DEL PROGETTO VALIDO PER MASSIMO 2 APPELLI ANCHE NON CONSECUTIVI

Per settimana prossima

Installare Blender 2.76b (o 2.77) e installare Sverchok.
Vedere tutorial su Blender (guarda slide).

Grafica e immagini digitali Pagina 1

In Blender si utilizza il linguaggio Python (si fa una grossa botta alla fine del corso).
Guarda Dive into Python: sezioni 1-2-3-4-7
Quickstart Blender Python API
Blender Scripting Best Practices

Grafica e immagini digitali Pagina 2

Introduzione alla computer graphics

Lunedì 29 febbraio 2016 11:29
Appunti di Alessandro Sperotti

Computer graphics

Creazione di immagini tramite l'utilizzo di Software e Hardware.
La CG nasce negli anni '60. Lo scienziato Fetter creò delle prime immagini antropomorfiche su un computer, con lo scopo di studiare l'ergonomia delle cabine di pilotaggio.
La prima GUI (Graphical User Interface) è nata nel 1962 con Sketchpad: in generale, alcune delle tecniche che usiamo ancora oggi, sono nate 30-40 anni fa.

CG per l'animazione vs CG per il tempo reale

Vi è una differenza sostanziale tra la computer grafica per l'animazione (la nostra) piuttosto che quella per il tempo reale:

  • CG per l'animazione: Non vi è interazione. L'obiettivo è il fotorealismo (massima qualità possibile).
  • CG in tempo reale: Ho interazione. L'obiettivo non è la massima qualità possibile, è la qualità nel minor tempo possibile.

Aumentano esponenzialmente i tempi di rendering. Di conseguenza dovrò utilizzare degli algoritmi più "semplici" (o con più "stratagemmi") per ottenere il miglior risultato nel minor tempo possibile.

Pipeline di rendering

Qual è il processo di creazione di un'immagine in CG? Eseguiamo una serie di operazioni: il risultato di queste operazioni è il rendering. La serie di operazioni si chiama Pipeline. Possiamo identificare delle fasi principali:

  • Creo le mesh e definisco i materiali
  • Definisco una "videocamera" virtuale che posizionerò nella scena e applico la "trasformazione di proiezione"
  • Definisco un modello di illuminazione che mi servirà per simulare la luce che colpirà i modelli virtuali.

Questi step sono in comune tra la CG in tempo reale e la CG per l'animazione. Nel corso vedremo sia aspetti ad alto livello (creazione mesh, texturing, rendering, ecc.) sia aspetti a basso livello (scripting).

Modellazione 1 - mesh poligonali

Vi sono vari modi per rappresentare modelli 3D:

  • Superfici (mesh poligonali, parametriche, parametriche)
  • Volumi
  • Scannerizzazione 3D
  • Constructive Solid Geometry (CSG)
  • Rappresentazioni gerarchiche
  • Modellazione procedurale

Sceglierò la tecnica più corretta a seconda dei miei obiettivi finali.

Mesh poligonale

Una mesh poligonale è un modello 3D composto da poligoni (triangoli o quadrati). Un poligono sarà formato da delle primitive connesse tra loro: queste primitive sono: Vertici, Spigoli e Facce. Per Topologia intendiamo come sono disposte tra loro le primitive nello spazio (le caratteristiche della connessione tra primitive).

La tecnica più utilizzata per modellare è il box modeling: Parto da un solido elementare (un cubo) e lo modifico, creando/spostando/eliminando vertici e facce, un po' come uno scultore modella la creta. Spesso si inizia da materiale di riferimento: le blueprint sono un esempio (immagini di riferimento, sketch, ecc.). I blueprint possono essere degli schemi (ortogonali) con cui il modellatore inizia a modellare.

Triangoli o Quads?

Vediamo i vantaggi tra l'utilizzo dei triangoli contro i quadrati:

Triangoli:

  • I triangoli garantiscono la coplanarità dei vertici (tutti i vertici sono sullo stesso piano).
  • È più facile il calcolo della normale.
  • Più facili i test di intersezione.
  • (Soprattutto per Realtime CGI) La primitiva viene gestita dalle schede grafiche.

Svantaggi:

  • È più difficile da gestire per le mesh complesse, modelli articolati, ecc.
  • Non sono adatti per le tecniche di suddivisione.

Quads:

  • Non garantiscono coplanarità.
  • Gestione topologia più facile per modellare per modelli ortogonali.

Normale di un triangolo

La normale di un triangolo è un versore (vettore di modulo 1) perpendicolare alla superficie. Il verso della normale ha un ruolo essenziale nel calcolo dell'illuminazione e lo shading. Dato un punto x, x appartiene al piano del triangolo se il verso della normale è dato dalla regola della mano destra (campo magnetico). In questo modo identifico le due facce del triangolo: la front face e la back face.

Back face culling: rimuovo dalla pipeline di rendering tutte le back face (usata per RealTime CGI).

Oltre alla forma, dobbiamo considerare la realizzazione geometrica e la caratterizzazione topologica, ossia dove sono posizionati i vertici nello spazio (la forma) e come sono connessi tra loro gli elementi della mesh. È possibile avere la stessa realizzazione geometrica con più caratterizzazioni topologiche, fatte in modi diversi.

Alla fine del corso dovremo vedere la topologia sia dal punto di vista del modellatore che il punto di vista dello sviluppatore. Se la topologia dal punto di vista del modellatore è ben progettata non avrò problemi in fase di animazione/rendering.

Per topologia dal punto di vista dello sviluppatore per creare un software di modellazione servirà una struttura dati efficiente. Per il punto di vista dello sviluppatore avremo bisogno di una DS molto efficiente, che permetta di gestire la memoria in maniera efficiente e di estrarre informazioni per modifiche in tempo reale.

Grafica e immagini digitali Pagina 4

Per il punto di vista dello sviluppatore avremo bisogno di una DS molto efficiente, che permetta di gestire la memoria in maniera efficiente e di estrarre informazioni per modifiche in tempo reale. Abbiamo due diversi approcci:

  • Liste Facce - vertex (Approccio "così così")
  • Approccio Half Edge

Liste facce - vertice

Gestisco le facce e i vertici tramite le liste. Per ogni faccia avrò una lista dei propri vertici. Ogni faccia è memorizzata nella lista di facce e ogni faccia contiene gli indici dei suoi vertici nella lista dei vertici. Un grave problema di questo approccio è che mancano informazioni sugli spigoli. Prendiamo ad esempio il caso in cui io creo anche una lista che gestisca gli spigoli: in questo modo aggiungerò ridondanza, in quanto dovrò gestire ben 3 liste per ricavare una singola informazione. Quindi sarà il caso di utilizzare una struttura dati più efficiente.

Struttura dati Half-edge

Per implementare questa struttura dati eseguo le seguenti operazioni "spezzo" un edge in due al fine di ottenere due entità separate. Ora nella struttura dati avrò dei puntatori al vertice alla fine dell'halfedge, l'half edge successivo, la faccia interna all'half edge, e l'half edge gemello in senso opposto.

…E se usassimo i quadrati anziché i triangoli? Non cambierebbe niente, in quanto la maggior parte dei motori di rendering convertono un quadrato in 2 triangoli.

Differenze tra modelli per animazione e per real time

Nei modelli per l'animazione avremo un alto livello di dettaglio per curvature, un alto numero di poligoni, una tecnica di modellazione basata su quads. Spesso inoltre vengono utilizzate superfici parametriche.

Nei modelli per il Real time avremo un compromesso a livello complessità mesh/prestazioni, un numero di poligoni basso rispetto ai modelli di animazione, in fase di modellazione vengono considerati principalmente i triangoli, e vengono spesso usati modelli poligonali.

Formula di Eulero

La formula di Eulero descrive la relazione tra il numero di vertici ed il numero di facce, in questo modo: Dati V vertici, E spigoli, e F facce e g che indica il genere della superficie (ossia il numero di buchi sulla superficie). Se la superficie è chiusa, le facce sono triangoli e quindi ogni F ha 3E, ed ogni E è condiviso da 2F.

Formati di interscambio

Come vengono salvati i file in un software di modellazione? Esistono vari formati per il salvataggio dati di mesh alcuni sono basati su ASCII, Binari e formati che possono essere proprietari o open. Il problema da risolvere è il garantire l'esportazione e riutilizzo formati in Software e ambienti diversi: inoltre devo garantire la compatibilità tra varie librerie.

Wavefront Object

Uno dei formati di interscambio più facili è il Wavefront Object (.obj). L'obj è un formato ASCII, face-based, semplice ed open: esso memorizza solo la geometria: vertici, coordinate UV, normali, ecc. Le informazioni su materiali/texture sono memorizzate su file .mtl esterno.

Grafica e immagini digitali Pagina 5

Le informazioni su materiali/texture sono memorizzate su file .mtl esterno.

Collada

Il formato Collada (.dae) è basato su XML: comprendeva geometria, shader, animazioni, versioni multiple dello stesso asset, ecc. Garantisce una grande flessibilità, ma la sua "rovina" è stata la difficoltà nell'implementare API e tool che seguano correttamente gli standard forniti.

Alembic

Il formato Alembic (.abc) è stato proposto da Sony e ILM. Esso è open source. Gli sviluppatori di Alembic volevano poter esportare solo i modelli selezionati. A questo proposito è un formato che gestisce la geometria e lo scene caching progettato per la massima efficienza e un basso consumo di memoria.

Modellazione poligonale - parte 2

Subdivision surfaces Un problema che salta fuori con le nostre conoscenze attuali è la difficoltà della creazione di modelli high-poly tramite box modeling. Tramite le subdivision surfaces potremo creare delle mesh dettagliate e con molti vertici, a partire da una mesh semplice.

Gli approcci degli algoritmi delle subdivision surfaces si dividono in due categorie: approssimazione o interpolazione. Entrambe sono delle tecniche ricorsive. Essendo ricorsive devo stabilire un "caso limite", che in questo caso si traduce con la "superficie limite" ossia, il massimo grado di suddivisione per cui vengono ottenuti benefici. Esso può venire precalcolato. In pratica, setto un limite di iterazioni. In genere con 2/3 iterazioni ottengo un modello ottimale.

Schemi di suddivisione

Esistono diversi tipi di algoritmi di subdivision surfaces, e li possiamo categorizzare in 2 grandi gruppi, il face split (più semplice) ed il vertex split.

  • Face split: da un quadrato fisso un vertice al centro e unisco, fino a formare 4 quadrati.
  • Face split per triangoli: creo 3 vertici in mezzo ad ogni spigolo e unisco, creando 4 triangoli.
  • Vertex split: a partire da un vertice creo altri 3 vertici, fino a formare un quadrato.

Approssimazione o interpolazione

Interpolazione: Viene mantenuta la posizione dei vertici originari (l'approccio più semplice, vengono mantenuti i punti originali e vengono "spostati" quelli nuovi).

Approssimazione: la posizione dei punti originali viene cambiata (in genere vengono generate superfici più smooth). Il vertex split in genere lavora solo per interpolazione, mentre il face split può lavorare sia su interpolazione sia su approssimazione.

Grafica e immagini digitali Pagina 6

Qui abbiamo varie tecniche di vertex e face split.

Catmull-Clark subdivision

La tecnica di Catmull-Clark è la tecnica di approssimazione più famosa, sviluppata da Pixar. È la base per le tecniche ottimizzate utilizzate attualmente.

Decimazione

La decimazione è l'"inverso" della subdivision surface: ossia da una mesh molto complessa con un grande numero di vertici arrivo ad una mesh più semplificata con meno vertici, ma che mantiene la topologia simile a quella del modello originale.

Una buona tecnica di decimazione deve mantenere la topologia originale, deve approssimare al meglio la rappresentazione geometrica dell'originale, ed infine (opzionale) i vertici della mesh generata possono essere un sottoinsieme dei vertici della mesh di partenza.

Una tecnica nota per la decimazione è il metodo di Schroeder. Questo metodo si basa su una classificazione dei vertici. Per mantenere la stessa forma si individuano gli spigoli importanti per l'aspetto della mesh, e vengono rimossi gli spigoli "non necessari".

Classifico i vertici in questo modo:

  • Vertici interni
  • Vertici del contorno
  • Vertici di un edge rilevante per l'aspetto
  • Vertici comuni a 3 edge rilevanti per l'aspetto (non rimuovibile)

I vertici di tipo 1 sono eliminati solo se la distanza d del punto dalla superficie approssimante i vertici di tutti i triangoli che hanno quel punto come vertice è inferiore ad una certa soglia. I vertici di tipo 2 e 3 si possono eliminare se la distanza d dalla retta congiungente i vertici adiacenti è inferiore ad una soglia assegnata. I vertici di tipo 4 non possono essere eliminati.

Level of Detail (LOD)

Il LOD è una tecnica usata nei videogiochi per ottimizzare i tempi di calcolo e massimizzare il framerate. La logica del LOD è che viene utilizzata una versione low poly di un modello quando questo è molto lontano, e man mano che mi avvicino sostituisco questo modello con delle altre versioni più high poly.

3 fasi:

  • Generation: Creo prima la modellazione high poly e poi versioni con meno poligoni (ad esempio con tecniche di semplificazioni, come la decimazione trattata poco fa: esiste anche l'approccio opposto, prima low poly poi high poly).
  • Selection: l'applicazione seleziona un modello piuttosto che un altro sulla base di un parametro (spesso la distanza dalla camera, ossia suddivido lo spazio in segmenti e utilizzo un determinato livello per ogni segmento diverso).
  • Switching: gestisco il cambiamento da un modello all'altro. È necessario evitare un cambiamento brusco del modello (popping). Ora esistono tecniche più avanzate, come il blending (interpolo le due mesh durante il passaggio, tecnica molto efficace ma che richiede un alto numero di calcoli) o la trasparenza (l'oggetto diventa più trasparente man mano che si allontana e lo sostituisco con l'altro modello, riducendo il popping).

Modellazione procedurale

Nella modellazione procedurale non modello, ma creo un'immagine/modello/scena in modo automatico o semi-automatico tramite un algoritmo. Questo approccio è ottimo per creare oggetti caratterizzati da casualità, auto-similarità e ripetizione di elementi/strutture.

Nella modellazione procedurale sono racchiusi diversi tipi di tecniche, come ad esempio delle tecniche per creare un singolo modello, o tecniche per creare delle scene con più istanze di uno o più modelli; un esempio di quest'ultima tecnica può essere la parametrizzazione dei modelli (ossia ho un modello "template" ed esso viene modellato in base ai parametri che inserisco).

Approcci della modellazione procedurale: frattali e grammaticale

Frattali

Un frattale è una forma geometrica frammentata che può essere divisa in parti, ognuna delle quali è (almeno in modo approssimato) una copia ridotta della forma generale. I frattali sono caratterizzati da auto-similarità (ogni struttura creata tramite i frattali è comunque simile ad una struttura di partenza), struttura fine, ed irregolarità (non si possono descrivere tramite geometria euclidea).

Nella pratica abbiamo una definizione semplice e ricorsiva, basata su numeri complessi.

Insieme di Mandelbrot

L'insieme di Mandelbrot è l'insieme dei numeri complessi c tale per cui non è divergente la successione definita da:

Ad esempio: se c = 1 non appartiene all'insieme poiché sostituendo ricorsivamente ottengo che la successione diverge: se c = -1 invece otterremo valori del tipo 0, -1, 0, -1, ecc allora la successione non converge e possiamo affermare che c appartenga all'insieme.

Autosimilarità

Essa può essere deterministica o statistica.

  • Deterministica: autosimilarità perfetta.
  • Statistica: autosimilarità imperfetta.

Nelle applicazioni più comuni dei frattali possiamo studiare fenomeni naturali, nuvole, piante, ecc.

Terreni frattali

Possono venire creati in modo molto semplice da un algoritmo chiamato algoritmo mid point displacement: divido una superficie in una griglia 4x4, perturba in posizione verticale dei nuovi 5 vertici in maniera casuale, e ripete ricorsivamente il processo sui nuovi quadrati diminuendo il livello di perturbazione. Vi sono altre tecniche per generare un terreno: ad esempio tramite la...

...he

Anteprima
Vedrai una selezione di 15 pagine su 66
Grafica e Immagini digitali Pag. 1 Grafica e Immagini digitali Pag. 2
Anteprima di 15 pagg. su 66.
Scarica il documento per vederlo tutto.
Grafica e Immagini digitali Pag. 6
Anteprima di 15 pagg. su 66.
Scarica il documento per vederlo tutto.
Grafica e Immagini digitali Pag. 11
Anteprima di 15 pagg. su 66.
Scarica il documento per vederlo tutto.
Grafica e Immagini digitali Pag. 16
Anteprima di 15 pagg. su 66.
Scarica il documento per vederlo tutto.
Grafica e Immagini digitali Pag. 21
Anteprima di 15 pagg. su 66.
Scarica il documento per vederlo tutto.
Grafica e Immagini digitali Pag. 26
Anteprima di 15 pagg. su 66.
Scarica il documento per vederlo tutto.
Grafica e Immagini digitali Pag. 31
Anteprima di 15 pagg. su 66.
Scarica il documento per vederlo tutto.
Grafica e Immagini digitali Pag. 36
Anteprima di 15 pagg. su 66.
Scarica il documento per vederlo tutto.
Grafica e Immagini digitali Pag. 41
Anteprima di 15 pagg. su 66.
Scarica il documento per vederlo tutto.
Grafica e Immagini digitali Pag. 46
Anteprima di 15 pagg. su 66.
Scarica il documento per vederlo tutto.
Grafica e Immagini digitali Pag. 51
Anteprima di 15 pagg. su 66.
Scarica il documento per vederlo tutto.
Grafica e Immagini digitali Pag. 56
Anteprima di 15 pagg. su 66.
Scarica il documento per vederlo tutto.
Grafica e Immagini digitali Pag. 61
Anteprima di 15 pagg. su 66.
Scarica il documento per vederlo tutto.
Grafica e Immagini digitali Pag. 66
1 su 66
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher sk8erb0y di informazioni apprese con la frequenza delle lezioni di Grafica e immagini digitali e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Milano o del prof Gadia Davide.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community