|
Visual Computing Group Il Visual Computing Group dell’Istituto di Elaborazione di Informazione del Consiglio Nazionale delle Ricerche svolge da molti anni attività di ricerca del settore della grafica tridimensionale conseguendo numerosi importanti traguardi scientifici e riconoscimenti sul piano internazionale. |
||||||||||
|
||||||||||
|
||||||||||
|
Altre attività Parallelamente a queste attività, sono in corso collaborazioni con le Belle Arti per la realizzazione di alcuni strumenti di visualizzazione per mesh di oggetti d’arte. Questo comprende uno strumento in grado di visualizzare ed esplorare mesh di grandi dimensioni (come il David citato in precedenza) da utilizzarsi all’interno di musei, ed un sistema di rendering non fotorealistico con stile di disegno manuale da utilizzare in campo divulgativo e documentale. |
|
|
PlugIn per Maya Le svariate attività del gruppo di ricerca ha portato allo sviluppo di un gran numero di algoritmi generici per l’elaborazione di mesh poligonali; algoritmi che sono poi stati implementati in una libreria ad uso esclusivamente interno. Di recente questa tendenza si è invertita ed è in corso l’importazione di alcuni di questi algoritmi all'interno di Maya ed il rilascio con licenza di alcuni strumenti software utilizzati per la visualizzazione e l’editing di mesh poligonali I plugin realizzati (e quelli in studio) si basano fortemente sulle librerie grafiche OpenGL, sia per la visualizzazione che per il calcolo vero e proprio. E’ proprio il punto più innovativo di questa suite di prodotti; sfruttare in modo intensivo le capacità dei nuovi hardware grafici attualmente in commercio, delegando a questi calcoli che altrimenti graverebbero sulla CPU . |
|
|
Contatti Visual Computing Group I.E.I. - C.N.RVia V. Alfieri,1 56010 S. Giuliano (Pisa) ITALY Pagina web http://vcg.iei.pi.cnr.it/ Roberto Scopigno email: roberto.scopigno@cnuce.cnr.it phone: +39 050 315 2929 fax: +39 050 313 8091 mobile: +39 348 396 6819 Claudio Montani email: montani@iei.pi.cnr.it tel. +39 050 315 2923 fax +39 050 315 2810 mobile +39 348 39 72 154 email cignoni@iei.pi.cnr.it Phone: +39 050 3152927 Fax: +39 050 3152810 |
|
|
|
Decimator |
||
|
Il decimatore è uno strumento per la semplificazione accurata e controllata di mesh poligonali. In tutte le produzioni tridimensionali interattive, in special modo nei videogiochi, la realizzazione di mesh è sempre vincolata all’utilizzo di un numero limitato di facce poligonali. Il plugin in questione permette di ottenere un modello costituito da un numero prefissato di facce a partire da un modello molto accurato. Il prodotto si distingue dal decimatore già presente all’interno di Maya per l’efficienza e la qualità delle mesh prodotte. Esistono due tipi di decimazione: globale, che agisce indistintamente su tutto l’oggetto e per selezione, in cui si può specificare manualmente in quale parte degli oggetti deve essere effettuata la decimazione. In tutti e due i casi è possibile specificare, attraverso i parametri del plugin, se come obbiettivo vogliamo ottenere un numero prefissato di facce oppure decimare fino ad una soglia di errore massimo. Possiamo poi specificare che il processo avvenga conservando le caratteristiche geometriche della mesh di partenza. Caratteristiche · L’obbiettivo della decimazione è specificabile come percentuale di facce iniziali oppure come massimo errore da introdurre · Parametri di decimazione: o conservazione topologia o conservazione boundary o mantenimento normali o piazzamento ottimale dei vertici · Decimazione sull’intero oggetto oppure su area, tramite Paint Selection |
|||
|
Utilizzo Selezionato l’oggetto da decimare si possono impostare i parametri di decimazione attraverso un pannello MEL. Nel caso del decimatore con selezione, dopo aver scelto la mesh da decimare, dovranno essere selezionate le zone dove effettuare la decimazione: l’algoritmo considererà tutta la mesh per la valutazione dell’errore (garantendo così un risultato ottimale), ma andrà a modificare solo le zone prescelte. |
|
||
|
Esempi |
|
|
Alcuni oggetti elaborati con il decimatore: nel primo caso, una decimazione globale, si passa da 25.000 a 12.000 e a 6000 facce, pur conservando in maniera eccellente la resa visuale dell’oggetto. Nel secondo esempio, invece, si è provveduto ad indicare al decimatore le parti dove effettuare la riduzione di geometria (la pancia dell’uccellino) sicuri di non intaccare dettagli significativi. |
|
|
|
|
|
|
|
|
|
Redetailer |
||
|
Questo è sicuramente il tool più innovativo tra quelli proposti, ed è visto come complemento, ma non solo, del decimatore. Date due rappresentazioni di uno stesso oggetto, una ad alto ed una a basso livello di dettaglio, permette di costruire una normal map da applicare all’oggetto semplificato in maniera da ricostruire il dettaglio perso durante la decimazione. Allo stesso modo, può essere anche estratta una depth map da usare come displacement. Questa mappa risulta particolarmente utile per un successivo impiego dei modelli decimati all’interno di motori interattivi come quelli dei videogiochi e di ambienti virtuali. I risultati che si possono ottenere in questo tipo di applicazioni sono eccezionali, vista la disponibilità di schede grafiche (come, ad esempio, la famiglia GeForce) in grado di utilizzare bump mapping a livello hardware. |
|||
|
Caratteristiche · Generazione mappa di normali · Generazione mappa di offset · Tempo di calcolo ridotto (< 1 minuto per coppia di oggetti 25000facce / 500facce ) |
|||
|
Utilizzo Selezionati i due oggetti da trattare, viene attivata una finestra di interfaccia OpenGL. In questa finestra possiamo osservare i rapporti spaziali fra i due oggetti e valutare subito l’efficacia del redetailing. Effettuato il calcolo della mappa, infatti, è disponibile una preview sia della mappa generata che del vero e proprio effetto |
|||
|
Esempi Di seguito possiamo osservare un esempio di ridettagliamento di una mesh poligonale decimata in precedenza: Possiamo vedere la finestra di calcolo in azione, le mappe (normali e displacement) generate e la preview dell’ effetto finale. |
|||
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
Questo è invece un esempio di come la mappa di normali possa essere utilizzata in un ambiente interattivo: il coniglio a sinistra è composto da 70.000 facce, quello centrale da soli 500. Il dettaglio, a differenza di una semplice applicazione di texture, reagisce in modo convincente al cambio di illuminazione. L’ultima mesh (sempre di 500 poligoni) mostra la reale geometria dell’oggetto decimato. |
|
|
|
|
Accessibility Mapper |
||
|
Il plugin, dato un oggetto, ne costruisce una mappa di visibilità della superficie. Con il termine visibilità si intende quanto ogni punto della superficie è visibile dall’esterno dell’oggetto, oppure quanto ogni punto risulta illuminabile da una fonte di luce uniforme in tutta la scena. Questo tipo di informazione si trova alla base della maggior parte delle tecniche di dirting utilizzate dai plugin presenti in commercio ma, a differenza di questi, esso utilizza un algoritmo innovativo per il calcolo della visibilità che sfrutta l’hardware grafico come sistema di calcolo, permettendo di costruire la mappa di oggetti anche molto complessi in tempi relativamente brevi. Una delle caratteristiche più interessanti di questo plugin è la possibilità di valutare l’interazione fra l’oggetto da esaminare ed altri oggetti selezionati presenti nella scena. Altre possibilità sono poi l’impostazione di una direzione preferenziale di provenienza dei raggi. E’ interessante notare come questo prodotto possa essere utilizzato anche come motore per la generazione di mappe di prelight per rendering complessi: l’accessibilità risulta infatti strettamente correlata in ogni punto alla quantità di luce che può colpire la superficie. Le mappe generate hanno l’importanza di non dover essere costruite frame per frame ma solamente una volta. Basta poi lavorare su rampe di color remap per ottenere effetti animati sulla diffusione di sporco, ossidazioni e, nel caso si utilizzi paint effects, di crescita degli strokes (effetti interessanti come crescita dell’erba) Caratteristiche · Tre tipi di calcolo: per facce, per vertici e per texel · Calcolo di interazione fra l’oggetto e i suoi vicini occlusori · Possibile impostare una direzione preferenziale di · Tempo di elaborazione (da zero a mappa ultimata) inferiore ai 5 minuti anche per modelli molto complessi (> 50000 facce) |
|||
|
Utilizzo Esaminiamo un utilizzo standard del plugin: per prima cosa andiamo a selezionare l’oggetto per cui verrà generata la mappa ed i suoi occlusori. Scegliamo quindi di effettuare il calcolo per facce. Non esiste una modalità di calcolo migliore fra le tre disponibili; a seconda del dettaglio, della dimensione e della tessellazione degli oggetti si ottengono risultati analoghi ma dalla qualità differente, spesso risulta conveniente effettuare qualche tentativo per individuare il metodo più adatto. A questo punto effettuiamo un paio di iterazioni senza occlusori e con probing omnidirezionali (opzioni di default) per ottenere una prima mappa di accessibilità. Successivamente possiamo introdurre gli occlusori nel calcolo ed effettuare alcune iterazioni: a questo punto la mappa di accessibilità risulta abbastanza dettagliata. Per ottenere un risultato più preciso, possiamo iterare ancora utilizzando una direzione preferenziale. Questa direzione indica il lato più esposto dell’oggetto, quello dove vi sarà meno accumulo di sporco. |
|
||
|
|
||
|
|
|
|
|
|
|
|
Esempi
|
|
|
|
|
Curvature Mapper |
||
|
Questo plugin genera una mappa di curvatura della superficie degli oggetti Questo tipo di valore indica quanto ciascun punto della superficie è piano oppure incurvato. Possono essere calcolati sia il valore di curvatura gaussiana che quello di curvatura media. Inoltre, risulta possibile ottenere anche mappe di direzione: ossia può essere calcolato in ogni punto quale direzione sia orientata la curvatura massima (principale) oppure la curvatura media. Tutti questi dati vengono calcolati in maniera analitica. Una mappa di curvatura così generata può essere impiegata per mappare screpolature della vernice, graffi e microfratture nelle zone di alta curvatura degli oggetti (più soggette di altre a questo tipo di difetti).Le mappe di direzione, invece, possono risultare utili per la realizzazione di shader che posizionino features sulle superfici seguendone l’andamento. Caratteristiche · Esportazione mappa di curvatura gaussiano · Esportazione mappa di curvatura media · Esportazione mappa di direzione media · Esportazione mappa di direzione principale · Tempo di calcolo estremamente ridotto (< 10 secondi) Utilizzo Selezionato l’oggetto da elaborare il plugin calcola in automatico la curvatura gaussiano; nella finestra OpenGL possiamo osservare il risultato del calcolo, sia applicato all’oggetto sia come mappa. Le altre modalità di calcolo sono selezionabili attraverso i menu. E’ poi possibile applicare filtri di smoothing sulle mappe prodotte per ottenere risultati più continui. |
|||
|
Esempi Possiamo osservare come nei seguenti oggetti la mappa di curvatura possa evidenziare zone appuntite e bordi degli oggetti. Nel busto, ad esempio, vengono individuate la maggior parte delle geometrie più “interessanti” del modello. Nel secondo esempio, osserviamo come la direzione di curvatura segua le geometrie del volto |
|
||
|
|
|
|
|
Skinner |
||||||||||||||||||||||||||||||
|
Il problema di generare una mappatura UV a partire da geometrie arbitrariamente complesse è un problema ben noto e sono numerosi sono i metodi studiati per effettuare questa operazione. L’algoritmo implementato all’interno del plugin ha come principale caratteristica la produzione di mappature UV ad alta uniformità. Una mappatura viene detta uniforme se è minima la distorsione che viene applicata ai vari poligoni al momento di essere distesi sul piano. Dopo aver generato la mappatura, il plugin si preoccupa di cercare un packing ottimale per le varie patch dell'oggetto, questo al fine di ridurre lo spazio sprecato. Caratteristiche · Distorsione da srotolamento minima · Packing efficiente per ridurre lo spazio sprecato · Funzionante su mesh arbitrarie |
|||||||||||||||||||||||||||||||
|
Esempi Nelle immagini possiamo osservare alcune mappature UV di due oggetti di prova: un busto femminile ed un toroide. Accanto alle mappature possiamo trovare una valutazione di quanto esse siano uniformi: questa valutazione è stata effettuata misurando il rapporto fra le aree dei poligoni e le aree della loro proiezione sulla texture (i salti cromatici delle mappe di uniformità indicano le distorsioni maggiori). |
|
||||||||||||||||||||||||||||||
|
|
|
Automatic mapping di Maya (4 piani): molto spazio sprecato e grande distorsione |
|||||||||||||||||||||||||||||
|
|
|
VCG Skinner: il rapporto fra area poligoni e area texel è pressoché costante |
|||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||