Grafica (C.d.S. Informatica)
2003/04
Relazione del Progetto di Grafica assegnato il 27/05/2004
Modellazione e Resa realistica di un "gioco di freccette"
di 
Paolo Cavallini

darts_bersaglio_01_logo.png

INDICE



OBIETTIVO

Utilizzando i pacchetti xccurv, xcsurf e xcrayt di xcmodel 3.0, realizzare un'esperienza significativa di modellazione e resa realistica.

Si realizzi il modello geometrico di un singolo oggetto (una o piu' superfici NURBS) avente una complessita' di forma apprezzabile. Si realizzi poi una scena (geometricamente semplice) in cui inserire l'oggetto precedentemente modellato. Per esempio, l'oggetto da modellare potrebbe essere un monile, un soprammobile, un giocattolo, un logo 3D. Si realizzi quindi lo scene-graph della scena 3D e si producano alcune immagini di buona qualita' (almeno due immagini a campo largo e piu' immagini dell'oggetto e di suoi particolari).

Le specifiche complete sono disponibili al seguente indirizzo web: http://www.dm.unibo.it/~casciola/html/graficaproject2_0304.html

torna all'indice

SCELTA DEL MODELLO E DELLA SCENA

Come modello si e' scelto di realizzare gli oggetti comuni per il gioco delle freccette (dart) che vanno dal classico bersaglio, al mobiletto di legno che lo contiene e, ovviamente alle freccette. Inoltre e' stato aggiunto, come particolare, un foglietto attaccato al bersaglio attraverso una freccetta. Per avere una scena piu' ampia e' stato realizzato anche un tavolino di vetro su cui sono appoggiati due bicchieri da cocktail e due freccette. Il tutto e' stato sistemato all'interno di una stanza con pavimento e muri.

Come spunto per la realizzazione degli oggetti del gioco si sono cercate diverse immagini in rete per avere un'idea generale dei componenti, dalle forme e dal materiale alle dimensioni e colori.
Per quanto riguarda il tavolino ed i bicchieri non sono stati presi modelli gia' esistenti ma sono stati realizzati di pura fantasia.

torna all'indice

MODELLAZIONE DEGLI OGGETTI

La maggior parte degli oggetti realizzati sono, come si puo intuire dalla forma, superfici di rivoluzione, mentre le curve sono quasi tutte di tipo Shape, partizione uniforme e di grado 3.
Di seguito e' descritta la realizzazione dei componenti in dettaglio:


La freccetta e' composta da 4 componenti: punta (bianco), corpo centrale (rosso) e finale (verde) sono "shape" di grado 3 con partizione uniforme e di queste e' stata eseguita una rivoluzione per ottenere la superficie finale.

Le superfici delle alette sono derivate da due curve (profilo giallo e blu); con xcsurf sono state caricate due copie delle stesse curve, a due di esse e' stata eseguita una traslazione di 5 gradi ed infine ne e' stata effettuata un'estrusione.

Realizzata una aletta le altre due sono state copiate e traslate di 60 gradi.

In xccurv caricare le curve:
aletta_07.db,
aletta_07_punto.db,
finale_06.db,
corpo_06b.db,
punta_06.db.

L'oggetto finale, avendo costruito le curve gia' posizionate lungo l'asse y, non ha avuto bisogno di trasformazioni aggiuntive per ottenere la forma desiderata.

In xcsurf caricare le superfici:
aletta_end_07a.db,
aletta_end_07b.db,
aletta_end_07c.db,
finale_end_06.db,
corpo_end_06b.db,
punta_end_06.db.

N.B.: non e' stato realizzato un file .obj in quanto nella fase di resa si e' avuta la necessita' di associare ad ogni singolo componente un colore o un materiale diverso.


Per il bersaglio sono state definiti 7 cerchi uguali (grado 2 con pesi inseriti a mano) posizionati alle giuste distanze dal centro (le dimensioni sono proporzionate a quelle reali). I cerchi grandi sono stati realizzati solo per avere una visione di come sarebbe venuta la griglia.

In xccurv caricare le curve:
cerchio_tripli_i_01.db,
cerchio_tripli_e_01.db,
cerchio_grande_01.db,
cerchio_doppi_i_01 .db,
cerchio_doppi_e_01.db,
cerchio_centro_01.db,
cerchio_25_02.db.


cerchio di base del bordo metallico

Le superfici sono state ottenute anche in questo caso tramite una rivoluzione dei cerchi sopra (dopo un'oppurtuna rotazione).

In realta' sarebbe bastato un solo cerchio di base e con esso, attraverso le dovute traslazioni, realizzare le varie superfici.

Per realizzare i bordi metallici diritti, invece, si e' utilizzata una superficie "Usual" di tipo cilindro, modificata direttamente a mano sul file .db per quanto riguarda lo spessore e opportunamente posizionata in linea con le superfici circolari. Una volta creata ne sono state fatte 19 copie ruotate ciascuna di 18 gradi rispetto alla precedente ottenendo la griglia completa come in figura.

Come base si e' utilizzata una superficie "Usual" di tipo cilindro anch'essa modificata a mano direttamente sul file .db.

In xcsurf caricare le superfici:
griglia_03.obj,
base_04t.db.

N.B.: al posto di creare 20 superfici diritte, in realta', si poteva crearne una sola e poi attraverso lo script in C crearne 19 copie e poi ruotarle, il tutto solamente con qualche riga di codice.



La parte piu' complessa per la realizzazione del mobile e' la rifinitura superiore in cui si sono utilizzate tre curve.

Come si vede nella prima figura, le due curve (blu e gialla) sono state utilizzate per creare la superficie dell'oggetto da collocare sopra al mobile, mentre nell'immagine sotto e' mostrato il profilo per la parte superiore.

Tutte e tre le curve sono di tipo "Shape", uniformi e di grado 3.

 Le forme delle curve sono state tutte realizzate a mano libera tramite xccurv e infine ritoccate le posizione dei CP tramite l'inserimento da tastiera.

 
In xccurv caricare le curve:
mobile_cassa_rifinitura_sopra_02.db,
mobile_cassa_rifinitura_sopra_02a.db,
mobile_cassa_sopra_05.db.


La superficie e' stata creata, tranne la parte superiore, con superfici "Usual" di tipo "Cube" e poi opportunamente modificate per realizzare il piano dietro e i 4 bordi laterali.

Per la parte superiore con 4 copie del profilo della seconda figura posizionati ai vertici e ruotati di 45 gradi si e' eseguita una estrusione.

Analogamente si e' proceduto per l'altra superfice, cioe' fatte due copie delle curve e posizionate adeguatamente si e' effettuata una estrusione.

In piu' sono state utilizzate due superfici "Usual" di tipo "Plane 1" per "chiudere" la superficie derivata dai 4 profili.

In xcsurf caricare la superficie:
mobile_03.obj.

Il foglietto e' stato realizzato tramite le curve estreme con profili tondeggianti per dare un'idea realistica della piegatura che la carta puo' generare stando appesa in verticale per mezzo di una freccetta.

Tutte e tre le curve sono di tipo "Shape", uniformi e di grado 3.

In realta' le curve esterne arancione e bianca non hanno la stezza lunghezza della curva rossa e quindi nel caso si "appiattisse" la superficie derivata non avrebbe una forma perfettamente rettangolare come un foglietto normale.

Cio' e' dovuto al fatto che le curve in questione sono state realizzate a mano libera senza nessun tipo di controllo sulla lunghezza (da sinistra a destra le misure sono 5.68, 6.0, 5.77).

Questo particolare pero' nella scena non si nota affatto e quindi non e' stato corretto l'errore.

In xccurv caricare le curve:
foglio_02a.db,
foglio_02b.db,
foglio_02c.db.


Dopo un'opportuna rotazione delle curve esterne (arancione e bianca) si e' creata la superficie tramite uno "Skinning" ottenendo cosi' l'effetto desiderato.

Dopo le rotazioni delle due curve sono state salvate anche le curve 3D con gli stessi nomi delle curve 2D.

In xcsurf caricare la superficie:
foglio_02.db.




Il tavolo e' composto da due curve, il piedistallo (bianco) e la base sopra (blu): entrambe sono "Shape" di grado 3 con partizione uniforme.

Alla base sopra e' stato creato un bordo non lineare verso il basso in modo da ottenere nella fase di resa una riflessione e trasparenza particolare delle luci e colori presenti nella scena.

In xccurv caricare le curve:
tavolo_piedistallo_01.db,
tavolo_piano_sopra_01.db.


Le superfici sono state ottenute per rivoluzione.

In xcsurf caricare:
tavolo_sopraf_01.db,
tavolo_piedistallof_01.db.

N.B.: non e' stato realizzato un file .obj in quanto nella fase di resa si e' avuta la necessita' di associare ad ogni singolo componente un colore o un materiale diverso.

La curva-profilo del bicchiere (fucsia) e' una "Shape" di grado 3 con partizione uniforme cosi' come la curva che generera' la superficie del contenuto del bicchiere stesso (rosa).

Tutti i CP sono stati inseriti manualmente attraverso l'interfaccia grafica prima in modo grossolano e in seguito, zoomando le parti piu' particolareggiate, in maniera piu' precisa.

In xccurv caricare i file:
bicchiere_05.db,
acqua_02.db.



Le superfici sono state ottenute per rivoluzione.

In xcsurf caricare:
bicchiere_05f.db,
acqua_02f.db.

N.B.: non e' stato realizzato un file .obj in quanto nella fase di resa si e' avuta la necessita' di associare ad ogni singolo componente un colore o un materiale diverso.

La ciliegina e' composta da 4 curve: il corpo della ciliegia (verde), il profilo del gambo (blu), il finale del gambo (arancione) ed il cerchio-profilo del gambo (bianco). Aparte il cerchio le curve sono di tipo "Shape", grado 3 uniforme, mentre il cerchio e' di grado 2 con i pesi modificati a mano.

In xccurv caricare i file:
ciliegia_gambo_finale_03f.db,
ciliegia_gambo_cerchio_02.db,
ciliegia_gambo_02f.db,
ciliegia_03.db.

N.B.: non e' stato realizzato un file .obj in quanto nella fase di resa si e' avuta la necessita' di associare ad ogni singolo componente un colore o un materiale diverso.

La superficie della ciliegia e del gambo finale sono state ottenute per rivoluzione, mentre il gambo e' stato ottenuto tramite una "Tubular" con profilo la curva del cerchietto e come traiettoria la curva-profilo del gambo entrambi definiti sopra.

In xcsurf caricare i file:
ciliegia_gambo_03f.db,
ciliegia_finale_03f.db,
ciliegia_03f.db.

N.B.: non e' stato realizzato un file .obj in quanto nella fase di resa si e' avuta la necessita' di associare ad ogni singolo componente un colore o un materiale diverso.

Anche il profilo del battiscopa e' una curva "Shape", uniforme di grado 3.

In xccurv caricare la curva:
battiscopa_profilo_02.db.

La superficie battiscopa e' stata realizzata tramite estrusione di due profili uguali opportunamente traslati.

In xcsurf caricare la superficie:
battiscopa_02.db (prototipo),
battiscopa_l.db,
battiscopa_f.db.


Per quanto riguarda i muri, il pavimento ed il soffitto e' stata utilizzata la superficie "Usual" di tipo "Plane 1". Fatte le copie utili di tale superfici si e' reso piu' comodo e veloce modificare direttamente i CP nei file .db per posizionarli all'interno della scena.

In xcsurf caricare la superficie:
muro_l.db,
muro_f.db,
floor.db.

torna all'indice

CREAZIONE DELLA SCENA

La creazione della scena e' stata realizzata alternando l'utilizzo dell'interfaccia di xcrayt e la compilazione dello script C per evitare alcuni problemi segnalati nella sezione "Problemi incontrati".
Gli oggetti (luci comprese) prima sono stati inseriti nella scena tramite script C ed in seguito sono stati posizionati tramita l'interfaccia grafica e riportati i riferimenti nello script C.

Per quanto riguarda le luci sono state utilizzate 4 spot-light due rivolte direttamente sul bersaglio delle freccette, una rivolta ad entrambi gli oggetti principali della scena (tavolo e bersaglio) e l'ultima illumina solamente il tavolo. Tutte quante producono luce bianca ma ognuna ha differenti caratteristiche di intensita', ampiezza del cono e del range massimo.
In aggiunta e' presente anche la luce ambiente di color grigio chiaro e bassa intensita' (0.7).

Per quanto riguarda i materiali degli oggetti si e' cercato tramite molteplici prove di ottenere una resa il piu' realistica possibile attraverso piccoli aggiustamenti sui diversi parametri che ne definiscono le caratteristiche.

All'interno della scena sono state inserite 5 texture di cui tre realizzate ad hoc con l'utilizzo di Gimp (il bersaglio con i numeri, il contenuto del foglietto e la sfumatura del bicchiere) e le altre trovate in rete (legno del mobile e pavimento).

torna all'indice

IMMAGINI DI RESA

Alcune rese realistiche della scena.


torna all'indice

PROBLEMI INCONTRATI

Sono stati diversi i problemi legati al programma, dall'interfaccia ai bug del codice, che spesso rendono il l'utilizzo del pacchetto xcmodel 3.0 un po' frustrante. In particolare il pacchetto xcrayt spesso si blocca non appena viene premuto il tasto Render riportando un messaggio di errore nel file .md che a quel punto non viene piu' caricato dal programma. La soluzione migliore e', anche per altri aspetti, l'utilizzo dello script C in cui si definisce praticamente tutto che risolve il problema.

Altro problema incontrato nella fase di render della scena e' quello ripotato nelle figure sotto.
Nell'idea originale del tavolino si voleva che oltre alla base di appoggio dello stesso anche il piedistallo fosse di cristallo, ma dopo ripetute prove si presentava sempre un problema di cui sono sconosciute le cause: la base del piedistallo vista da sopra il tavolo si presenta in maniera puntiforme (vedi figura a sinistra).
L'unica soluzione possibile e' stata quella di modificare il materiale del piedistallo, realizzato infine con un acciaio cromato scuro (forse esteticamente anche piu' bello, figura destra).



torna all'indice

CONCLUSIONI

Il sistema XCMODEL a prima vista puo' risultare molto difficile da utilizzare e a volte anche incomprensibile. Tuttavia man mano che si prende dimestichezza con gli strumenti offerti, risulta essere un ottimo programma di modellazione, potente e preciso nella fase di creazione, soddisfacente nella fase di resa (solo per il problema che ho incontrato).

Inoltre utilizzando
XCMODEL ho potuto apprezzare i vantaggi della modellazione con superfici NURBS e imparare molto piu' approfonditamente i concetti legati alle problematiche legate alla modellazione in generale.

torna all'indice


DOWNLOAD

darts.tgz archivio contenente le directory:

Scompattare nella directory base di XCMODEL.

torna all'indice