XCMODEL tutorial: modellazione e resa di una scena

L'omino LEGO

 

 

Ho scelto come soggetto il famoso omettino giallo del gioco di costruzioni LEGO, in quanto e' um modello facilmente scomponibile in parti composte da primitive geometriche relativamente semplici, ma al contempo e' abbastanza complesso da risultare un interessante esercizio di modellazione. Per completare la scena ho aggiunto alcuni mattoncini di costruzioni e una base con gli appositi incassi.
Ora procedero' col descrivere la realizzazione delle varie parti.

La testa

Sono partito col creare una curva profilo con il tool xccurv, per poi generare la superficie per rotazione con xcsurf. La curva e' di grado 2, con alcuni control point coincidenti per creare gli spigoli. Inoltre ho modificato manualmente i pesi di alcuni CP per ottenere la giusta forma nei tratti arrotondati.

Profilo 2D della testa
Profilo 2D della testa.
Superficie 3D della testa
Superficie 3D della testa.

Tramite lo strumento trim di xcsurf la testa e' stata poi divisa in due meta', in modo da poter immergere la meta' anteriore (e solo quella) in una texture, per realizzare la faccia. La texture e' stata realizzata con il software di manipolazione immagini open source GIMP.

Il corpo

Il corpo e' stato realizzato tramite la funzione extruding di xcsurf, partendo dalle forme 2D delle due basi, inferiore e superiore, una leggermente piu' larga dell'altra. Si tratta essenzialmente di due rettangoli con gli spigoli smussati. Le curve sono di grado 2.

Basi 2D del corpo
Basi 2D del corpo.

La superficie cosi' ottenuta e' stata trimmata in modo da dividere la parte superiore da quella inferiore. La parte superiore e' stata raffinata varie volte e aumentata di grado in V (da 1 a 2) in modo da smussare gli spigoli che si erano creati. E'stata poi aggiunta una terza superficie scalando e posizionando opportunamente un cilindro (load surface -> usual -> cylinder), in modo da realizzare il perno su cui si incassa la testa.

Corpo
Le superfici che compongono il corpo.

Le gambe

Le gambe sono essenzialmente composte da superfici molto semplici, tutte create con il comando usual di xcsurf, opportunamente scalate e posizionate. Il bacino e' infatti composto da un rettangolo e un cilindro, e ogni gamba da un cilindro (la parte superiore) e due rettangoli (la parte intermedia e il piede).

Le gambe
Le gambe viste in xcsurf.
Griglia di control point delle gambe
La rete di control point delle gambe. Da questa immagine si distinguono chiaramente le varie superfici che le compongono.

Le braccia

Le braccia sono senza dubbio la parte piu' complessa del modello, e quella che mi ha richiesto piu' tempo e tentativi. In un primo momento avevo provato a realizzarle con superfici distinte per la parte sopra il gomito e quella sotto, ma non sono riuscito a creare una giuntura soddisfacente, la resa finale mostrava sempre una notevole discontinuita' tra le due parti. Ho quindi desistito e deciso di provare a realizzare ogni braccio con una superficie unica, e ho disegnato tramite xccurv delle curve-sezione da dare in pasto alla funzione di extruding del tool xcsurf, dopo averle ovviamente posizionate nello spazio 3D in modo adeguato. Inoltre alcune spigolosita' sono state attenuate tramite la modifica interattiva di superficie. Ovviamente un solo braccio e' stato realizzato in questo modo, l'altro e' stato ottenuto per simmetria.

Sezioni 2D delle braccia
Le "sezioni" 2D per realizzare il braccio.
Un braccio
Il braccio dopo il processo di extruding e alcuni ritocchi.

Le mani

Le mani sono composte da due parti, un "gomito" (un semplice cilindro che va a incassarsi nel braccio), e la mano vera e propria, che si e' dimostrata piu' difficile da modellare di quanto inizialmente pensassi (o meglio, ci ho messo un po' di tempo a individuare una tecnica efficace).
Sostanzialmente ho creato una sorta di cilindro scavato tramite una curva profilo di forma rettangolare e la funzione di rotazione di xcsurf, dalla quale ho trimmato via uno spicchio. A questo punto ho spostato a mano i control point adiacenti alla zona trimmata in modo da chiudere la superficie e creare la forma desiderata.

La mano
La mano in xcsurf
La griglia di control point della mano
La griglia di control point della mano, in cui si puo' notare come alcuni di essi siano stati spostati in modo da sovrapporsi.

Il resto della scena

L'omino ovviamente necessita di una base su cui poggiare, e ho pensato che sarebbe stata una buona idea fare in modo che questa presentasse a sua volta le caratteristiche di un pezzo di costruzioni. Ho quindi realizzato un cilindro molto schiacciato, la tipica sporgenza in cui si incassano i pezzi LEGO, e lo ho ripetuto per tutto il pavimento mediante un ciclo for nel file di codice c che descrive la scena. Inoltre ho aggiunto alcuni mattoncini di varie dimensioni in modo da rendere la scena piu' completa, realizzati semplicemente con cubi e cilindri opportunamente ridimensionati. Vi sono anche due piani verticali che fungono da pareti, in cui l'ombra degli oggetti si proietta.
La scena in wireframe
La scena prima del rendering vero e proprio.

La composizione e il rendering

La scena e' stata composta con l'ausilio della libreria descriptor, in modo da generare un file poi interpretabile da xcrayt. Il fatto che e' una libreria c rende possibile l'utilizzo di tutte le funzionalita' di questo linguaggio, in modo particolare ho trovato utile il poter realizzare cicli per ripetere molte volte lo stesso modello, una operazione che sarebbe stata sicuramente dispendiosa in termini di tempo se fatta a mano.
Essenzialmente ho creato vari materiali, uno per ciascun colore della plastica, poi ho caricato i modelli dai file generati da xcsurf. Ho associato i materiali alle varie parti, e una texture da immagine alla testa. E' stata aggiunta inoltre una sorgente luminosa situata in alto a destra rispetto all'omino, e ho impostato i vari parametri di luce ambientale e colore di sfondo. Per mezzo delle gerarchie e' stato possibile assemblare una sola volta i mattoncini e poi ripeterli semplicemente con una copia translata della lista delle superfici che li compongono.
Per ulteriori dettagli vedere il file "lego.c" contenuto nell'archivio del progetto scaricabile da questo sito.

Resa 1
Resa 2
Resa 3
Resa 4

Download

Il seguente archivio compresso contiene tutti i file che compongono il progetto. Decomprimere il contenuto nella directory "models" di xcmodel, verra' creata una sottodirectory "LEGO" con tutti i file.

Scarica: lego.zip