Fondamenti di Grafica Tridimensionale 2015/2016

Programma

Il corso presenta un'introduzione alle principali tematiche della Grafica Tridimensionale focalizzando sugli aspetti teorici e pratici della modellazione basata su mesh triangolari e sulle basi del rendering interattivo e fotorealistico. Una parte significativa del corso ha carattere progettuale e prevede la partecipazione attiva degli studenti allo sviluppo collaborativo di MeshLabJS, un sistema open source per il mesh processing. La parte progettuale e' basata principalmente sulle seguenti tecnologie: C++, Qt, Javascript, WebGL, threejs.

Argomenti trattati nel corso:

Modalita' di esame

L'esame e' costituito da una parte progettuale ed una teorica.
La parte teorica che riguarda gli argomenti di grafica trattati durante il corso, puo' essere sostenuta o con un compitino, o con un orale al momento della consegna della parte progettuale.
La parte progettuale vale 20 trentesimi, mentre la parte teorica vale 10 trentesimi. Voto finale = Progetto + max (Orale, Compitino)
I risultati del compitino finale li trovate qui

Orario

Lunedì Martedì Mercoledì Giovedì Venerdì
Aula C1
14-16
Aula A1
09-11

Lezioni e Lucidi

Data Contenuto
23 Set 2015 - Mercoledì Aula C114:00 Introduzione al corso, (PDF)
Data Structures for 3D Meshes (PDF)
25 Set 2015 - Venerdì Aula A109:00 Introduzione alla VCG lib (PDF)
30 set 2015 - Mercoledì Aula C114:00 Data Structures for 3D Meshes (Differential Geometry)
Introduzione alla VCG lib
Codice:
FGT1516_common.zip contiene un folder FGT_1516 contenente un file common.pri (file di progetto per qt creator) utilizzato da tutti i prossimi sorgenti distribuiti. Il folder FGT1516 deve essere messo nel folder vcglib/apps della vostra copia del repository svn della libreria (info su come fare checkout del repository svn su vcg.sf.net).
FGT_20150930.zip contiene invece il codice visto a lezione. Il codice e' contenuto in un folder FGT_20150930 che va piazzato all'interno del folder precedente. Se avete fatto tutto bene, e se avete qtcreator installato e' sufficiente aprire il progetto all'intero dentro il folder FGT_20150930 e compilare.
02 Ott 2015 - Venerdì Aula A109:00 Sistemi di Riferimento e Trasformazioni (PDF)
Codice:
FGT_20151002.zip contiene invece il codice visto a lezione in cui tramite concatenazioni di trasformazioni e replicazioni si crea un anello di moebius fatto di cubetti. Il codice e' contenuto in un folder FGT_20151002 che va piazzato all'interno del folder FGT1516.
07 Ott 2015 - Mercoledì Aula C114:00 Paradigmi di rendering RayTracing e Rasterizzazione (PDF)
Codice:
FGT_20151007.zip contiene invece il codice visto a lezione in cui tramite tramite l'uso di un pos e di operazioni di Flip* si contano i loop di edge di bordo. Il codice e' contenuto in un folder FGT_20151007 che, al solito, va piazzato all'interno del folder FGT1516.
09 Ott 2015 - Venerdì Aula A109:00 The Rasterization Rendering Pipeline (PDF)
Lighting Models (PDF)
14 Ott 2015 - Mercoledì Aula C114:00 Lighting Models (PDF)

Mesh di esempio TexturedMesh.zip
Lo zip contiene alcune mesh con texture in cui la parametrizzazione e' stata ottenuta con tecniche diverse (single triangle, hand modeled, automatically generated atlas). Alcune mesh hanno nella texture codificata come colore la normale. Dentro meshlab per vedere la normale per texel, dovete attivare uno degli shader custom (Menu Render->Shader->NormalMapping.rfx).
16 Ott 2015 - Venerdì Aula A109:00 Lighting Models: seconda parte (stessi lucidi scorsa lezione)
Codice:
FGT_20151016.zip contiene il codice visto a lezione in cui una mesh con coordinate di texture per wedge viene caricata e trasformata nello spazio di texture. tramite l'uso di un pos e di operazioni di Flip* si contano i loop di edge di bordo. Il codice e' contenuto in un folder FGT_20151016 che, al solito, va piazzato all'interno del folder FGT1516.
21 Ott 2015 - Mercoledì Aula C114:00 Esercitazioni VCGLib
Codice:
FGT_20151021.zip contiene il codice visto a lezione in cui si affronta il problema di trasformare, mediante tagli, una mesh di genus qualsiasi in una singola porzione di superficie omeomorfa ad un disco. Si utilizza una visita topologica della superficie utilizzando l'adiacenza FF. L'ordine di visita delle facce mi restituisce un albero di connessione tra facce che e' omeomorfo ad un disco. Vari metodi per visualizzare il comportamento della visita sono proposti (colore, rappresentazione dell'albero di visita). Il boundary della nostra superficie e' a questo punto dato dall'insieme degli edge non attraversati dalla visita: tali edge corrispondono esattamente ai tagli da effettuare sulla superficie per renderla omeomorfa ad un disco.
Si mostra infine una procedura (retract) che semplifica tale boundary ritraendo tutti i tagli "dangling' e quindi topologicamente inutili.
23 Ott 2015 - Venerdì Aula A109:00 Spatial Indexing (PDF)
Codice:
FGT_20151023.zip contiene il codice visto a lezione in cui si continua l'esempio della scorsa volta. Il fine e' di implementare una procedura di fairing the renda le curve di taglio che avevamo trovato meno discontinue per mezzo di un processo di smoothing e riproiezione sulla superficie. La riproiezione la facciamo per mezzo di una struttura di spatial indexing.
28 Ott 2015 - Mercoledì Aula C114:00 Simplification and Refinement (PDF)
30 Ott 2015 - Venerdì Aula A109:00 Esercitazione VCG
Codice:
FGT_20151030.zip contiene il codice visto a lezione in cui si continua l'esempio delle scorse volte. La prima parte delle modifiche e' dedicata a implementare la riproiezione della curva di taglio durante il processo di smoothing usando una uniform grid per velocizzare la ricerca del punto piu' vicino della superficie. Nella secona parte si prova a costruire un distance field sulla superficie che codifichi la distanza dalle linee di taglio, utilizzando questa volta kdtree per trovare il vertice della curva di taglio piu' vicino ad ogni vertice della mesh.
04 Nov 2015 - Mercoledì Aula C114:00 sospensione delle lezioni per verifiche intermedie
06 Nov 2015 - Venerdì Aula A109:00 sospensione delle lezioni per verifiche intermedie
11 Nov 2015 - Mercoledì Aula C114:00 Esercitazione VCG
Codice:
FGT_20151111.zip contiene il codice visto a lezione in cui si continua l'esempio delle scorse volte. L'obiettivo e' quello di decomporre una mesh di triangoli usando una mesh di edge che giace sopra di essa. Questa volta si sono viste tre procedure. La prima che rende una mesh di edge 1-manifold duplicando i vertici non manifold. La seconda che trova i vertici terminali deella mesh di edge ed una terza funzione che splitta in tre i triangoli di una mesh su cui cadono una serie di punti dati.
13 Nov 2015 - Venerdì Aula A109:00 Esercitazione VCG
Codice:
FGT_20151113.zip contiene il codice visto a lezione in cui si continua (ancora!) l'esempio delle scorse volte. L'obiettivo e' sempre quello di decomporre una mesh di triangoli usando una mesh di edge che giace sopra di essa. Questa volta si sono viste tre procedure. La prima che rende una mesh di edge 1-manifold duplicando i vertici non manifold. La seconda che trova i vertici terminali deella mesh di edge ed una terza funzione che splitta in tre i triangoli di una mesh su cui cadono una serie di punti dati.
18 Nov 2015 - Mercoledì Aula C114:00 Parametrization and Remeshing 1 (Lezione tenuta da Nico Pietroni ) (PDF)
20 Nov 2015 - Venerdì Aula A109:00 Parametrization and Remeshing 2 (Lezione tenuta da Nico Pietroni ) (PDF)
25 Nov 2015 - Mercoledì Aula C114:00 LEZIONE ANNULLATA (da recuperare in data da definirsi)
27 Nov 2015 - Venerdì Aula A109:00 Introduzione a MeshlabJS
Questa volta nessuno zip. Il codice visto a lezione e' quello sul repository github. In particolare a lezione abbiamo visto come sia possibile aggiungere un semplice filtro che calcola le curvature gaussiane e media di una mesh. Le modifiche viste a lezione sono quelle che sono state committate sul repository il 27 novembre. .
30 Nov 2015 - Lunedì Aula B116:00 Lezione straordinaria di recupero
Global Illumination (PDF)
02 Dic 2015 - Mercoledì Aula C114:00 Esercitazione VCG
Codice:
FGT_20151202.zip contiene il codice visto a lezione in cui si mostrano la soluzione di alcuni degli esercizi mostrati in fondo a questa pagina (cqpire quali attributi ci sono in un file, esperimenti con le adiacenza FF e VF).
04 Dic 2015 - Venerdì Aula A109:00 Introduzione a WebGL/Threejs
Le slide interattive mostrate a lezione sono quelle di David Scott Lyon e Ilmari Heikkinen disponibili qui:
Intro to WebGL with Three.js
Three.js basics
Gli esperimenti fatti a lezione li trovate invece zippati qui: FGT_20151204.zip
09 Dic 2015 - Mercoledì Aula C114:00 MeshLabJS
11 Dic 2015 - Venerdì Aula A109:00 Lezione recap del corso.
Il link con il breakdown di un frame di GTA che vi ho fatto vedere lo trovate qui
14 Dic 2015 - Lunedì Aula B116:00 Compitino Finale
Alcuni esempi di compitini finali (dagli scorsi anni, esempi indicativi ci potrebbero essere piccole differenze di programma): 1, 2, 3, 4, 5.
I risultati del compitino finale li trovate qui

VCG Library

Libreria per la gestione di mesh triangolate, costituisce il framework dove abbiamo fatto le esercitazioni, e' distribuita con licenza GPL, il sito ufficiale e' vcg.sf.net. Non ne vengono rilasciate release donwloadabili semplicemente ma dovete scaricarla in SVN anonimo;

Learning VCG Library

Piccola serie di esercizi a difficolta' crescente per prendere dimestichezza con la libreria.

Testi e materiale didattico

Durante il corso verranno distributi elettronicamente i lucidi presentati a lezione. Per un trattamento un po' piu' ad alto livello ed ordinato, buona parte degli argomenti teorici (trasformazioni, lighting e shading, texturing, la pipeline di rendering e un po' di teoria del colore li trovate nel seguente testo:

Cover of the book Introduction to Computer Graphics: a Practical Learning Approach
F. Ganovelli, M.Corsini, S. Pattanaik and M. Di Benedetto
CRC Press
ISBN:978-1439852798
Prezzo: 65 euro


Una lista aggiornata di testi di computer graphics ragionevoli la trovate qui . Di seguito un estratto a gusto personale che copre un po' tutti gli aspetti (generale, rendering accurato, interattivo, ecc.).

Per quanto riguarda invece la parte progettuale, che richiede una ottima conoscenza del C++ ed una ragionevole dimestichezza con QT, esiste moltissimo materiale disponibile in rete. Segnalo solo un paio di link:

VCG Library

Libreria per la gestione di mesh triangolate, costituisce il framework dove abbiamo fatto le esercitazioni, e' distribuita con licenza GPL, il sito ufficiale e' vcg.sf.net. Non ne vengono rilasciate release donwloadabili semplicemente ma dovete scaricarla in SVN anonimo; Qualche hint tecnico su come fare checkout della libreria con tortoise sotto win lo trovate nelle pagine della documentazione del meshlab, qui. Per compilare gli esempi (quelli sotto apps/sample) non ci sono makefile o soluzioni .net gia' pronte ma solo i *.pro a partire dai quali usando qmake (il tool di qt per la creazione automatica di makefiles) potete generarli. Gli esempi distribuiti si suppone stiano sotto la dir apps/sample.

MeshLab

Sistema open source per la visualizzazione e il processing di mesh lo trovate sorgenti e compilato su http://meshlab.sourceforge.net . Per la compilazione di MeshLab fate riferimento alla pagina Compiling della wiki di meshlab; Parte dell'esame consiste nella realizzazione di plugins per il meshlab, i possibili progetti di plugins li trovate alla pagina projects della documentazione del MeshLab.