L'obiettivo del progetto è modellare la geometria di un oggetto con complessità di forma apprezzabile e inserirlo in una scena 3d utilizzando i pacchetti xccurv e xcsurf del sistema xcmodel. Dopo aver modellato la scena si richiede di realizzare lo sene-graph e, sfruttando la libreria descriptor ed il pacchetto xcrayt, di produrre immagini di buona qualità.
L'oggetto scelto per la resa è un modellino in metallo, ricavato solamente
limando una barretta di ferro, d'aereo militare del 1953. Questo oggetto ha
permesso di cimentarsi nella creazione dicurve di grado 3, come i cerchi della
fusoliera , la sagoma delle ali e la sagoma del timone di direzione e profondità,
mentre sono presenti curve di grado 1 per la costruzione del portamappa e della
stanza. Inoltre la scena ha permesso di cimentarsi nell'utilizzo delle funzioni
per la creazione delle superfici di skinning, estrusione, rivoluzione, tubolar
e swinging.
Il modellino è composto da 10 superfici (12 se contiamo anche il piedistallo,
visto che l'originale comprende anche quello).
La prima cosa fatta è stata creare le curve 2D del modellino grazie al pacchetto xccurv, quindi queste curve sono state opportunamente posizionate nello spazio 3D grazie ad xcsurf e per ultimo (sempre grazie ad xcsurf) si sono ottenute le superfici desiderate. Ma vediamo pezzo per pezzo come le superfici sono state ottenute.
Tutte le immagini della sezione progettazione sono cliccabili per ottenere un ingrandimento.
La prima parte d'aereo ad essere modellata è stata la carlinga, la quale è suddivisibile in 4 superfici, che sono : coda, fusoliera, posto guida, muso.
La coda è stata ottenuta utilizzando due cerchi di grado 3, 9 punti di controllo, partizione nodale uniforme 14 nodi, opportunamente distanziati ed ingrandendo uno dei due. Quindi si è provveduto ad una estrusione.
Dall'immagine si può osservare che il cerchio più piccolo è stato allineato al capo superiore del cerchio più grande. Questo per fare in modo che la parte superiore della carlinga sia diritta, mentre la parte inferiore (naturalmente considerando tutti i pezzi della carlinga) fornisca un effetto "pancia". Questo allineamento nella parte alta vale per tutte le superfici componenti la carlinga. Altra cosa che è possibile notare è una rotazione di 180° della superficie attorno all'asse Z (effettuata per esclusive questioni di comodità personale nello sviluppo dell'aereo).
Successivamente è stata creata la parte centrale della carlinga, che ho chiamato fusoliera (anche se i due termini carlinga e fusoliera sono intercambiabili), continuando ad utilizzare 5 curve a cerchio, 9 punti, partizione nodale uniforme 14 nodi, allineati allo stesso modo della coda, ma cambiando oppurtunamente la pendenza rispetto a quest'ultima. Infatti la pendenza della coda è superiore a quella della fusoliera. La procedura adottata per cambiare la pendenza è stata la seguente: si è presa la curva cerchio più grande formante la superficie "coda", quindi tale curva è stata ingrandita di un 10% e distanziata opportunamente dalla sua curva sorella. Quindi si è presa questa curva maggiorata, la si è duplicata, quindi maggiorata ancora di un 10% e distanziata opportunamente dall'altra. Il processo si è ripetuto sino alla 5a curva. Un aumento del 10% delle dimensioni ad ogni curva, ha permesso cosi alla fusoliera di crescere in dimensioni in maniera graduale e più armoniosa rispetto alla superficie della coda. La superficie quindi è stata ottenuta per estrusione delle curve sezione.
Il passo successivo, il più semplice, nella costruzione dell'aereo è stato il posto guida. Tale superficie è stata ottenuta utilizzando le stesse curve utilizzate nelle due superfici precedenti. Inoltre non c'è stato bisogno di ottenere nessuna crescita di dimensioni da parte della carlinga all'altezza del posto guida, quindi si è provveduto semplicemnte a prendere la curva sezione più grande che componeva la superficie fusoliera, quindi la si è duplicata ed opportunamente distanziata, senza alcun bisogno di ricorrere allo scale. La superficie quindi è stata ottenuta per estrusione delle curve sezione.
L'ultimo step nella fase di costruzione della carlinga è la costruzione del muso. Utilizzando 3 curve cerchio e una curva denominata "punto", 2 punti di controllo, partizione nodale uniforme, 4 nodi, si è potuto ottenere grazie allo skinning il muso dell'aereo. Per la realizzazione di questa superficie si è presa prima di tutto una curva sezione della superficie posto guida, quindi tale curva è stata duplicata e traslata opportunamente dalla curva sorella. Giunti a questo punto si è provveduto a creare una copia più piccola della curva precedentemente duplicata, ottenendo così quello che in figura appare come il cerchio più piccolo tra i tre raffigurati. Per ultimo quindi si è provveduto a posizionare il punto che è stato di grande utilità, in particolare nella fase di skinning.
Terminata la carlinga ho modellato le ali utilizzando 2 curve denominate ala, 24 control points, partizione nodale uniforme, 28 nodi e 2 curve punto. Una delle due curve ala è stata ruotata di 3° attorno all'asse x, quindi la si è fatta combaciare perfettamente da un lato con l'altra curva ala e mantenendola staccata dal lato opposto, cosi com'è visibile nella figura della fase di progettazione. Quindi sono state aggiunte due curve "punto" poste, la prima lievemente più in basso della curva ala che non è stata ruotata, la seconda posta all'altezza massima raggiunta dalla curva ala ruotata. Per ottenere l'altra ala si è provveduto ad una serie di rotazioni di 180° attorno all'asse x e traslazioni in direzioni opposte (a quelli effettuati per la prima ala), di tutte le curve interessate alla costruzione della ala numero 1. Posizionate opportunamente le curve si è quindi provveduto allo skinning per ottenere la superficie.
La realizzazione del modellino è quindi passata attraverso la modellazione dell'abitacolo e della giunzione della carlinga con i timoni. La superficie è costituita da 18 curve di cui, 2 curve punto, 13 curve denominate abitacolo (9 contro points, partizione nodale uniforme, 13 nodi) e 3 curve denominate giunzione timone (11 control point, partizione nodale uniforme, 15 nodi). La funzione scelta per la realizzazione della superficie è lo skinning. Come si può notare dall'immagine di progettazione, la modellazione di questa superficie è stato un meticoloso lavoro di traslazione( sul piano xy) e scaling delle varie curve. Ingrandendo la figura di progettazione, si noterà che le due curve più a destra sono inclinate rispetto alle altre: questo per dare una forma più aereodinamica all'abitacolo.
La parte più complessa nella realizzazione della superficie è stata la scelta della forma per la curva giunzione timone. Molte curve sono state provate al suo posto, ma tutte, una volta realizzata la superficie con lo skinning, creavano superfici che si contorcevano su loro stesse nel raccordo, con la curva abitacolo.
Giunto a questo punto ho realizzato l'ala che funge da timone di direzione. Utilizzando due curve di grado 3, 11 control points, partizione nodale unifrome, 15 nodi, e una curva "punto" è stato possibile attraverso lo skinning ottenere il timone di direzione. Una delle due curve di grado 3 (quella più piccola) è stata traslata sull'asse z, come visibile dall'immagine di progettazione, quindi si è poszionato il punto sopra le altre due curve.
L'ultima parte del modellino sono i timoni di profondità. Sono state usate 2 curve di grado 3, 16 control points, partizione nodale uniforme, 20 nodi. Come visibile dalla figura di progettazione le du curve sono state distanziate opportunamente e da qui ho fatto l'estrusione delle curve sezione, ottennendo il profilo verticale dei timoni. Quindi ho creato sia la faccia superiore, che quella inferiore del timone, posizionando un "punto" al centro della curva profilo e operando uno skinning tra tale punto e la curva profilo del timone. Il profilo, e le due facce superiore ed inferiore dei due timoni di profondità sono state opportunamente posizionate, cosi da ottenere le superfici come si può vedere nella curva rappresentante le superfici.
La fase successiva è stata la modellazione del piedistallo. Per modellare l'asta ho usato una curva cerchio a 9 punti, opportunamente ridimensionata, posta perpendicolarmente ad una curva di grado 3, 14 control points, partizione nodale uniforme, 18 nodi, ho potuto costruire una superficie tubolare.
La modellazione del piedistallo si è quindi conclusa con la realizzazione della base, costituita da due curve di grado 1, 4 control points, partizione nodale uniforme, 6 nodi. Le due curve sono state opportunamente traslate sull'asse z e, attraverso lo skinning, si è ottenuta la superficie.
Il tavolo è un oggetto costituito da 7 superfici, tutte ottenute partendo dalla curva cerchio a 9 punti di controllo. Le superfici che lo compongono sono lo spessore, la parte superiore e quelle inferiore della superficie d'appoggio e le quattro gambe.
Lo spessore del tavolo è stato ottenuto per estrusione di due curve sezione come possibile vedere dall'immagine di progettazione, mentre le superfici d'appoggio sono state ottenute per skinning con una curva "punto".
Le gambe del tavolo sono state modellate grazie all'estrusione di due curve sezione cerchio.
E' stato possibile ottenere il bicchiere grazie alla rivoluzione di una curva di grado 3, 8 control points, partzionamento nodale uniforme, 12 nodi, intorno all'asse z.
Il lampadario è stato ottenuto per rivoluzione della curva sezione, di grado 3, 5 control points, partizione nodale uniforme, 9 nodi, attorno all'asse z.
Il portamappa è costituito da tre superfici: una cornice, una parte posteriore ed il vetro.
La cornice è stato ottenuto per estrusione di due curve di grado 1, 9 control points, partizione nodale uniforme, 11 nodi.
Raggruppo la descrizione della realizzazione della parte posteriore del portamappa e del vetro in un'unica descrizione, in quanto costruite nello stesso modo. Le due superfici sono state ottenute per swinging dove la curva proiezione è quella utilizzata per la cornice, mentre la curva traiettoria è una semplicissima linea.
Per la camera ho utilizzato una superficie creata in un mio precedente progetto di grafica. La camera è suddivisibile in 3 parti: le pareti, il pavimento ed il soffitto. Le pareti sono state ottenute per estrusione della curva sezione di grado 1, 9 punti di controllo, partizione nodale uniforme, 11 nodi, mentre soffitto e pavimento per skinning utilizzando la stessa curva usata per le pareti. Faccio notare che purtroppo non ho a disposizione le curve 2d e 3d per la camera ma solo le superfici. Il procedimento usato per ottenerla è stato sescritto ricordando la modalità utilizzata.
La scena è composta dai seguenti oggetti:
Per la resa della scena sono stati realizzati i seguenti attributi:
Oltre a questi attributi sono state utilizzate le seguenti funzioni, atte ad illuminare e texture la scena:
Per quanto riguarda la create_point_light sono state fatte numerose prove per ottenere l'effetto d'illuminazione migliore, soprattutto nel soffitto, che risulta essere scarsamente illuminato, fornendo un effetto poco reale. Ma per questo si veda la sezione problemi e bug .
Inoltre sono attivi l'antialiasing, e lo shadow effect.
Il Ray Depth Level è stato settato pari a 3.
Scarica qui il file.tgz contenente, curve 2d, curve 3d, superfici, script, texture, scene-graph e relazione.
Questo è un file tgz, scompattabile con il comando tar -xvzf Zapparoli_Airplane.tgz.
L'unica cosa richiesta è far girare i file di xcmodel, specialmente gli obj,
come utente root in quanto tutti i pathname dei file obj iniziano con "
/root/ " in quanto ho sviluppato questo progetto sul mio pc di
casa come utente root.
Come anticipato nella sezione Immagini di resa , ho avuto alcuni problemi con la simulazione della luce prodotta da una lampadina e posta all'interno del lampadario da me creato. Infatti il soffitto così allo status quo delle cose risulta essere scarsamente illuminato. Il fatto è che diverse prove sono state fatte modificando l'intensità della luce, la trasparenza del vetro del lampadario, modificando opportunamente il parametro attraverso il quale si regola la diminuzione della luce con la distanza, ma i risultati sono stati negativi in tutti i casi. In questo momento non ho sufficienti dati per dire che questo sia un bug, anche perchè questo problema potrebbe derivare benissimo da una mancanza mia nel progetto.Ho inoltre fatto prove con il punto luce posto anche alll'esterno del lampadario, quindi ponendo la luce più in basso rispetto ad ora, ma gran parte del soffitto è scarsamente illuminato.Per documentare quanto ho spiegato, aggiungo due foto che mostrano una veduta generale allo status quo della camera e una con la traparenza del vetro maggiorata e l'intensità della luce raddoppiata.