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.
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.
|
![]() 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 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. |
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.
![]() Le superfici che compongono il corpo. |
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 viste in xcsurf. |
![]() La rete di control point delle gambe. Da questa immagine si distinguono chiaramente le varie superfici che le compongono. |
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.
![]() Le "sezioni" 2D per realizzare il braccio. |
![]() Il braccio dopo il processo di extruding e alcuni ritocchi. |
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 in xcsurf |
![]() La griglia di control point della mano, in cui si puo' notare come alcuni di essi siano stati spostati in modo da sovrapporsi. |
![]() La scena prima del rendering vero e proprio. |
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.
![]() |
![]() |
![]() |
![]() |
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