Esame di Grafica 2002/03

Marco Serra (Matr. 1617/59)

Secondo Progetto

 

Modellazione 3D mediante superfici NURBS e Rendering

(pacchetti xccurv, xcsurf, xcrayt)



 

Il soggetto e' un modellino alto 13 cm di un personaggio della Disney, l'assistente di Archimede che in USA chiamano Lamp, che sta sempre a fianco al mio monitor.

 

 

Le note per il download sono nell’ultimo paragrafo di questa relazione.

 

 

L'esperienza.
Ho scelto di modellare, tramite i pacchetti xccurv xcsurf xcrayt, un oggetto reale e di riprodurlo il piu' fedelmente possibile, rispettando le reali proporzioni e, nei limti del tempo di ricercare i materiali piu' adatti. Purtroppo, proprio quando avevo acquisito buon padronanza con i pacchetti, il tempo e' scaduto e non ho potuto arricchire la scena con dettagli qualificanti.

 

 

Ho realizzato le parti "geometriche" del modello usando le superfici usual a disposizione, per le parti "semi-geometriche" ho sfruttato molto la tecnica Tubolar, Revolution ed Extruding.

Per le parti non geometriche ho adottato quasi sempre la tecnica di Swinging che mi ha dato grosse soddisfazioni. Per piccoli ritocchi ho usato anche le funzionalita' di free form deformation, fornite dal plug-in ffd di xcsurf, ma non spesso in quanto poco precise per le mie esigenze.

 

Ho avuto grosse difficolta con il guanto, che e' una superfice libera. Il tentativo di realizzarlo dito per dito ha generato un monchino con 4 pioli conficcati. Un obrobrio!! Ho tentato allora un complesso swinging tra il profilo orrizzontale e quello laterale e mi ha prodotto un guanto accettabile ma solo in certe zone. Usare quella superfice ha richiesto numerosi interventi. Ho deciso di trimmare, dove possibile le parti da ricostruire e sono sceso piu' volte alla struttura dei file  .db per modificare certe caratteristiche o prelevare curve di livello 3D da superfici.
Ho capito troppo tardi che era meglio scegliere un soggetto semmai piu' complesso, formato da tante parti ma tutte semi-geometriche e comunque mai naturali.
Un altra scelta forse errata e' stata quella di voler posizionare con xcsurf le superfici che compongono il modello. Ho scoperto le potenzialita' di xcrayt e della libreria descriptor solo alla fine, e non ho potuto usufruirne appieno, visto che non ne avevo piu' bisogno.
Comporre e posizionare il modello intero gia' da xcsurf e' un po' scomodo ma ha permesso l'immediato caricamento in xcrayt che, infatti, mi ha presentato il modello renderizzato al primo colpo, senza bisogno di posizionamenti e aggiustamenti, se non minimi.

 

Per la cattura degli screenshot ho usato Gimp, per il ridimensionamento e ritocco delle stesse ho usato PhotoShop, per questa relazione, avevo fretta e ho usato MS Word (quindi e’ consigliato IExplorer)

 

La Realizzazione

Testa Collo e Lampadina

 

Tracciato il profilo in scala con xccurv ho passato il file a xcsurf e per Revolution ho ottenuto le superfici volute.

 

 

Tronco e spalle.

 

Due cilidri, presi dalle usual, opportunamente scalati e ruotati. Il tronco e' stato scalato lungo l'asse y per ottenere la sezione a ellisse delle dimensioni volute

 

 

 

Anche

Ho tracciato con xccurv la circonferenza  di profilo. Poi l'arco di cerchio di tracciato (angolo 36° raggio 7,4 cm ... a tanto sono arrivato. sigh). Ora la superfice e' facile da ottenere con la Tubolar.
Ma ora come lo chiudo questo tubo?
Mi sono creato i 2 coperchi prelevando le curve 3D dei suoi estremi direttamente dal file .db del tubo aperto. Ho ottenuto 2 circonferenze inclinate e posizionate esattamente come gli estremi del tubo. Poi ho ricavato per ognuna un punto interno complanare (punto medio di 2 C.P. opposti) quindi ho fatto l'Extruding tra punto e circonferenza.
Alla fine, per come sono stati costruiti, i coperchi erano perfetti e gia' posizionati.

 

 

Gambe e Braccia

 

Tracciato il profilo in scala con xccurv della gamba e del braccio, poi ho tracciato le traiettorie infine ho passato le curve a xcsurf e con la tecnica Tubolar ho ottenuto le superfici volute.

 

 

 

Scarpe

 

Le scarpe sono costituite da:

 

Una bombatura alla caviglia, ottenuta per Revolution.

 

Il Tacco

 

Ho generato il profilo e portato in xcsurf, ne ho creato 2 copie traslate piu’ in basso dell'esatto spessore del tacco.

L’ultima l’ho un po’ scalata per darle l’inclinazione presente sul modello.

L'idea e' di generare il tacco per Extruding, ma la superfice rimarrebbe aperta sopra e sotto. Per chiuderla ho fatto l'Extruding di 5 curve 3D:  i 3 profili suddetti e 2 punti interni e complanari a quello sopra e a quello sotto rispettivamente.

 

 

 

La Suola

 

Anche qui un Extruding tra 5 curve: 3 curve di profilo piu' i soliti 2 punti per chiudere il volume sopra e sotto..

 

 

 

 

 

La Scarpa

 

Per swinging tra

- un profilo, costituito dall'unione delle 2 curve usate per tacco e suola e poi splittato per averne solo la meta’ - una traiettoria disegnata appositamente.

La curva ottenuta andava ritoccata in quanto palesemente troppo "regolare" e quindi innaturale. Mi sono avvalso della possibilita' di modifica interattiva fornita da ffd per deregolarizzare un po' la scarpa. La seconda scarpa l'ho ottenuto copiando la prima. Ho poi deformato leggermente la scarpa sinistra e ripetuto modifiche speculari sulla destra. Il risultato mi sembra buono.

 

 

Il Polso

 

Fa parte del guanto, ma non ha dato problemi, e' una semplice superfice di rivoluzione ma per darle l'aspetto esatto che volevo ho creato una traiettoria e l'ho generato per swinging.

 

 

 


 
Il Guanto



La soluzione per Swinging.(abbandonata)

 

Come gia' accennato all'inizio ho avuto grossi problemi con questa superfice naturale irregolare.
Tutti i miei sforzi di costruirla dito per dito venivano frustrati da risultati estremamente innaturali che non riuscivano a rendere l'idea di un oggetto unico, ma sembravano sempre 4 dita appoggiate l'una all'altra.
Alla fine ho cambiato rotta e ho tentato uno swinging tra 2 profili del guanto, accuratamente replicati dal soggetto originale. Ahime', il pollice non veniva reso bene e nemmeno le parti vicine al polso, il palmo e il dorso della mano.
Che fare?
Qui ho avuto davvero dubbi amletici. Cambio soggetto!
No, continuo!

 

 

 

Lo Swinging senza il pollice

 

 

Via il pollice.

 Lo swinging per il guanto lo produco con la stessa curva ma col pollice amputato.

Da questa struttura devo ora togliere il palmo e il dorso, per raccordarli col polso. Poi aggiungo il pollice

 

 



Il Dorso della Mano

 

 

Questo non sono riuscito a trimmarlo. Cosi’ ho cercato un raccordo con il polso deformando le parti eccedenti del dorso con gli strumenti di  ffd. Ha richiesto un po' di tempo perche' ffd richiede molta manualita', ma alla fine il verdetto di xcrayt mi ha premiato.

 

 

(Nella immagine e’ presente la trimmatura spiegata nel passo successivo)

 

 

 

Il Palmo

 

 

Via il palmo. Trimmando la curva sono sparite le parti del palmo che non andavano bene.

 

Ricostruzione Palmo. Ormai abile nel prelevare curve di livello dai .db delle superfici, ho prodotto il palmo per skinning. La curva parte infatti dal semiprofilo della superfice Polso e termina nel profilo del guanto nel punto in cui e' trimmato. Prelevando le suddette curve dai rispettivi file .db e facendo uno extruding delle stesse ho ottenuto il palmo, che per costruzione risulta gia' perfettamente dimensionato e posizionato. Il risultato e' molto piatto, ma ho provato a deformarlo per creare bombature con ffd ma ho generato un mutante che ho subito seppellito

 

 

 

Ricostruzione del Pollice

 

Per non far sembrare il pollice un piolo piantato in cima alla mano (cosa che mi succedeva regolarmente) ho deciso di ricorrere alla panacea delle tecniche: lo skinning. Ma lo volevo un po' particolare. Come ultimo profilo da "skinnare" gli ho dato una curva di livello del guanto, prelevata direttamente dal file .db dello stesso. L'intento era quello di creare nella parte bassa del pollice un'adeguamento alla forma del guanto in modo da addolcirne il raccordo. Il risultato mi da' ragione solo in parte

 

 

 

Il Guanto finito

 

Che fatica.

 

Il Secondo Guanto

Con il secondo guanto, Lamp fa' OK, quasi a dirmi "puo' bastare amico." e io che mi trovavo perfettamente daccordo, ho deciso di generare l'altro guanto per simmetria. Non trovando la funzione in xcsurf ho cambiato il segno di tutte coordinate x dei C.P. nei file .db e ho ottenuto cio' che volevo.
Risultato visibile gia' da xcsurf 

 

 

Risultato finale ottenuto con xccurv e xcsurf

 

 

 

 

xcrayt

Come ho gia detto ho scelto di posizionare le superfici con xcsurf ed il beneficio si e' avuto abbattendo i tempi di setup del modello finito con xcrayt.  Il posizionamento e' piu' agevole con xcrayt, e col senno di poi, procederei diversamente, ma e' stata comunque una bella soddisfazione vedere il modello completo e renderizzato dopo solo poche operazioni di configurazione con la libreria descriptor.
Mi e' bastato inserire in un file Lamp.c indicazioni su quali sono le superfici da caricare e assegnargli un materiale, uno qualsiasi per iniziare, l'importante e' compilare ed eseguire (make -f Makefile.ok).
L'esecuzione infatt genera un file Lamp.hr che puo' essere letto da xcrayt. Una volta in xcrayt e' tutto da sperimentare, ma e' molto agevole.
Per tarare le caratteristiche dei materiali ho proceduto un po' per tentativi e sono abbastanza soddisfatto del risultato, ma penso che il vetro e la plastica della testa possano essere rese ancora meglio.
Ho posto 3 luci bianche attorno al modello: 2 davanti (sx e dx) e una dietro.
Ho avuto poco tempo per texturizzare e per trovare file .hr o .ppm diversi, e purtroppo la scenografia non e' delle piu' brillanti.

Gallery

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bug di xcsurf  ?
L'uso di Xcsurf non ha dato problemi, solo un raro malfunzionamento della funzione [copia superfici]. In pochi casi, in superfici di swinging appena generate, la superfice copiata mancava della prima riga di control point (cioe' appariva leggermente trimmata). In un altro caso la copia di una superfice su una cella appena vuotata, ha generato una copia parziale della curva copiata ma con inserimento di parti della curva precedentemente cancellata dalla cella stessa.


Download modello

E' possibile effettuare il download del seguente file contenente il modello realizzato:

serra_lampadina.tgz  (scompattare con il comando: tar zxvf serra_lampadina.tgz)