Realizzazione di una Lampada
Mediante il Sistema xcmodel

 

-->

 

Descrizione dell'oggetto modellato

L'oggetto che è stato preso in considerazione per la modellazione è una lampada da scrivania. Essa si compone di diverse parti che sono state create mediante superfici spline o NURBS trimmate. Successivamente, tali parti sono state posizionate nello spazio e vi sono state applicate delle texture. Si è supposto che la lampada stia sopra ad una scrivania; quindi è stata realizzata anche la scrivania limitatamente alla porzione utilizzata. Infine sono state realizzate delle immagini realistiche. Il modello è stato generato avendo sotto mano l'oggetto da modellare e apportandovi alcune piccole variazioni cromatiche e di forma.

Come unità di misura è stato preso il metro. Quindi un'unità del dominio parametrico corrisponde a 1000 millimetri. L'origine del sistema di riferimento spaziale della scena corrisponde al vertice inferiore destro della faccia posteriore del piano di appoggio della scrivania.

 

Link, immagini, download, ...

Questo tutorial mostra i passi che sono stati seguiti per realizzare il modello. Sono presenti numerose immagini raffiguranti la realizzazione del modello mediante il pacchetto software xcmodel. Da http://www.geocities.com/caucci/mng/report.ps.gz è possibile scaricare un documento che contiene delle informazioni più tecniche su come il modello è stato realizzato. Le immagini finali realizzate possono essere scaricate da: http://www.geocities.com/caucci/mng/samples75.tar.gz e da http://www.geocities.com/caucci/mng/samples100.tar.gz; le texture utilizzate sono state prelevate da http://www.grsites.com/textures/. Infine, all'URL http://www.geocities.com/caucci/mng/sources.tar.gz è possibile prelevare il modello realizzato sotto forma di file sorgenti. E' presente anche un file .c che permette di creare il file che descrive la scena e che dovrà essere caricato mediante xcrayt. Si consiglia di leggere il file README presente in tale archivio per ottenere informazioni su come utilizzare il modello prodotto.

 

Realizzazione del modello

La scena da realizzare, può essere suddivisa in diverse parti; essa è composta dalla scrivania, dalla base della lampada, dal portalampada e dal braccio che congiunge quest'ultime due parti. In seguito, verrà descritto in maniera dettagliata come ciascuna di queste parti sono state realizzate ed assemblate. Come verrà mostrato, spesso si è operato direttamente sui file .db per ottenere superfici perfettamente combacianti tra loro. A volte, il sistema è stato utilizzato interattivamente per poter visualizzare la forma della curva/superficie che doveva essere creata e per scegliere la partizione nodale estesa e, successivamente, i valori esatti dei punti di controllo sono stati impostati manualmente modificando il file .db.

 

Realizzazione della scrivania

La scrivania in questione, contiene oltre al piano d'appoggio, un ripiano superiore che viene utilizzato come libreria. La parti della scrivania non facenti parte della scena, non sono state modellate: ad esempio, non egrave; stata realizzata la parte inferiore che poggia sul pavimento.

Sono stati creati manualmente cinque file .db contenenti tutte le informazioni necessarie per rappresentare le superfici spline utilizzate. Il risultato finale è mostrato nella figura sottostante.

 

Realizzazione della scrivania

 

E' stato quindi creato un file .obj che le elenca. La realizzazione di tali superfici, non ha presentato alcuna difficoltà ed è stata utile per poter comprendere la struttura interna dei file dati.

 

Realizzazione della base

La base della lampada è costituita da una parte in plastica nella quale sono state ricavate delle cavità per potervi disporre un portapenne (con degli ``aculei'' per poter fissare penne e matite) e tre piccoli contenitori nei quali disporre puntine, graffette, ...

Il corpo della base è stato ottenuto per swinging: utilizzando xccurv sono state realizzate le curve traiettoria e profilo. In particolare, per la curva di profilo, si ha che il primo e l'ultimo segmento della poligonale di controllo sono paralleli all'asse X e quindi la tangente agli estremi della curva è anch`essa parallela all'asse X. Inoltre, il punto finale di tale curva ha ascissa non nulla. Per questi motivi, la superficie che si otterrà per swinging sarà una superficie aperta nella parte superiore ed, utilizzando una porzione di un piano ortogonale all'asse Z, può essere chiusa ottenendo un raccordo sufficientemente dolde. Le due curve sono state caricate come curve 2D in xcsurf ed è stata creata la superficie. Dopo aver raffinato la superficie due volte, si è proceduti ritagliando, per trimming, quattro superfici. Nelle cavità così ottenute verranno disposti il portapenne ed i tre contenitori. Il doppio raffinamento ha permesso di operare in maniera più precisa quando si doveva trimmare la superficie. La seguente figura mostra il risultato finale.

 

Realizzazione del corpo della base con i patch leggermente sollevati

 

Successivamente, tale superficie è stata chiusa mediante una superficie spline ottenuta per extruding. Tale superficie presenta una cavità cilindrica nella quale alloggiare il bottone e deve raccordarsi perfettamente con il bordo del corpo della base. Dal file .db contenente il corpo della base, è stata estratta la curva spline 3D del bordo (copiando l'ultima riga della matrice dei punti di controllo in un altro file e completandolo con la partizione nodale estesa ed il grado della curva). Sono state create tre curve circolari per poter realizzare la cavità per il bottone, la quale si raccorda con la parte superiore della base mediante uno smusso della larghezza di un millimetro ed inclinato di 45 gradi. Infine vi è un'altra curva, degenerante in un punto, che permette di chiudere la cavità la superficie finale ottenuta è la seguente:

 

Realizzazione della parte superiore del corpo della base

 

Il bottone è stato ottenuto per revolution partendo dalla curva spline 2D di profilo realizzata mediante xccurv. Tale curva è di terzo grado ed arrotondata nella parte superiore. Il diametro del bottone è di un millimetro inferiore al diametro della cavità nel quale deve essere alloggiato. In tal modo, il bottone è libero di ``ballare'' senza usursi lateralmente.

L'attacco per il braccio (costruito utilizzando due superfici spline) permette di fissare il braccio della lampada alla base. E' costituita da un'appendice con un buco e si raccorda perfettamente con la base della lampada.

L'appendice è stato ottenuto per extruding: si è partiti da cinque curve 3D (la prima coincidente con l'ultima) che sono state collegate tra loro. In particolare, la curva che delimita il bordo dell'appendice è costituita da un arco di circonferenza nella parte superiore e da tre segmenti nella parte inferiore che formano due angoli retti:

 

Realizzazione del bordo dell'appendice inferiore

 

Per ottenere questo risultato si è partiti da una curva NURBS di secondo grado rappresentante un cerchio delimitato da una poligonale di nove punti di controllo e si è agito su due pesi ``tirando'' la curva lungo particolari direzioni prendendo dei pesi molto grandi.

E' stata creata (sempre per extruding) un'altra superficie spline che raccorda l'appendice con la base. Per ottenere tale superficie, sono state create manualmente cinque curve 3D, la prima coincidente con l'ultima.

 

Raccordo ottenuto per extruding

 

Nella realizzazione del portapenne e dei contenitori, si è partiti dai patch ritagliati per trimming dal corpo della base, sono state quindi estratte le curve 3D di bordo del patch e sono state composte ottenendo un'unica curva. La curva così ottenuta è stata copiata piè volte e applicandovi delle trasformazioni sono state ottenute altre curve che hanno permesso di ottenere la superficie del contenitore per extruding.

Più precisamente, la prima curva utilizzata è la curva del bordo del patch. Essa rappresenta quindi l'intersezione tra il corpo della base ed il bordo laterale dei contenitore. Successivamente essa è stata copiata, scalata rispetto all'origine e traslata verso l'alto. Questa curva rappresenta il bordo superiore esterno del contenitore. Il bordo superiore interno è stato ottenuto scalando la curva del bordo superiore esterno rispetto al baricentro. Tale curva è stata quindi copiata e traslata verso il basso ottenendo la curva del bordo inferiore interno. Infine, scalando rispetto al baricentro una copia di quest'ultima curva, è stata ottenuta una curva degenerante in un punto, che permette di chiudere il bordo del contenitore. Questo procedimento è stato ripetuto altre tre volte utilizzando i patch opportuni per ottenere i tre contenitori ed il bordo del portapenne. La figura seguente mostra la superficie finale di uno dei tre contenitori.

 

Contenitore ottenuto per extruding

 

Infine è stato realizzato uno degli aculei per revolution che è stato copiato più volte. Tali parti sono state quindi disposte nel punto opportuno in modo che si appoggino perfettamente al fondo di uno dei contenitori:

 

Portapenne

 

Per realizzare i contenitori ed il portapenne, è stato necessario trimmare la base in quanto sia i contenitori che il portapenne, penetrano nella base e, senza le opportune cavitè, non avrebbero potuto essere profodi a sufficienza.

 

Realizzazione del braccio

Il braccio della lampada si compone di una parte superiore e di una inferiore; agli estremi di queste parti vi sono delle appendici con dei buchi che permettono di fissare le due parti tra loro e con le altre componenti della lampada mediante viti e bulloni. Le superfici realizzate sono state inserite in due file .obj; in uno sono state messe tutte le parti metalliche (viti e bulloni), nell'altro tutte le parti che compongono il braccio. In tal modo la gestione dei colori e delle texture per il braccio risulta essere semplificata in quanto si dovrà operare solo su due oggetti e non su tutte le superfici che in realtà lo compongono.

Le viti ed i bulloni sono stati ottenuti per extruding partendo da curve 2D rappresentanti un cerchio ed un esagono. Il file .db per l'esagono è stato ottenuto importando in xccurv un file .cpcreato manualmente. Il cerchio e l'esagono sono stati caricati in xcsurf, copiati, traslati e scalati ed, infine, utilizzati per ottenere per extruding una vite ed un bullone. La figura seguente mostra il procedimento utilizzato per ottenere una vite.

 

Realizzazione di una vite

 

Anche il braccio superiore è stato ottenuto per extruding. Il profilo di tale parte è costituito da due archi di circonferenza di uguale ampiezza collegati agli estremi da segmenti:

 

Profilo del braccio superiore. Il centro dei cerchi dai quali i due archi sono stati presi si trova nell'origine

 

Per realizzare tale curva, si è partiti da un file .db di un cerchio: il primo arco è stato modificato spostando il punto iniziale, quello centrale e quello finale. Il peso del punto centrale è stato modificato utilizzando un noto risultato e l'ampiezza dell'arco. Il secondo ed il quarto arco sono stati fatti degenerare in un segmento mettendo i punti di controllo centrali allineati con i rispettivi punti precedenti e successivi. Per il terzo arco si è operato in maniera analoga al primo; inoltre la concavitè è stata invertita avvicinando il punto centrale al centro della circonferenza. Questa curva è stata quindi importata due vuole in xcsurf come curva 2D traslando una di esse verso l'alto di 0.24 (che corrisponde ad una traslazione di 24 millimetri). Sono state create anche due curve degeneranti ciascuna in un punto, che permettono di chiudere la superficie. Tale punto è il punto intermedio del segmento che congiunge i punti intermedi dei due archi e, fortunatamente, tutti i segmenti che partono da esso e raggiungono i punti di controllo della curva di profilo del braccio non intersecano tale curva. Il risultato finale è:

 

Braccio superiore

 

Il braccio inferiore è stato realizzato in maniera analoga al braccio superiore. Le uniche cose che variano sono le dimensioni, i punti di controllo ed i pesi.

Le appendici sono state realizzate per extruding in maniera del tutto analoga all'appendice utilizzata per costruire la base della lampada.

 

Un'appendice dei bracci

 

 

Realizzazione della sommità

La sommità della lampada può essere suddivisa in diverse parti: la lampadina (costituita a sua volta dal tubo di vetro, dai filamenti e dai contatti laterali) ed il portalampada (costituito dal corpo, dallo smusso laterale, dalle appendici e dai contatti).

I contatti della lampadina sono stati ottenuti per revolution partendo da una curva di profilo di secondo grado. Successivamente la superficie ottenuta è stata copiata, ruotata e posizionata opportunamente. Bench&eacure; non vi sia nulla a protezione dei contatti, non c'è alcun pericolo di folgorarsi perché la lampada è alimentata con batterie a bassa tensione.

Anche il tubo in vetro della lampadina è stato ottenuto per revolution imponendo che gli smussi degli estremi abbiano sezione circolare. Per far ciò, si è intervenuto sul file .db spostando alcuni nodi e variando il peso di alcuni punti di controllo. Per realizzare il filamento, è stato creato un file .ip di punti 2D da interpolare scegliendo tali punti in maniera casuale (ma non troppo!). Essi sono stati interpolati con una funzione NURBS continua fino alla derivata seconda ed imponendo che la derivata agli estremi sia il vettore nullo. Ottenuta quindi la curva 2D, essa è stata importata in xcsurf e salvata come curva 3D; la curva finale è stata prodotta modificando l'ultimo file ottenuto specificando dei valori casuali per la terza componente. In tal modo è stato possibile creare una curva che possa dare l'idea dell'andamento del filamento in tungsteno di una lampadina: tale curva presenta irregolarità analoghe a quelle che si riscontrano in un sottile e fragile filamento di una lampadina. La curva così realizzata è sufficientemente ondulata e ricca di punti di controllo ed il suo andamento è stato scelto in maniera semplice specificando pochi punti. La superficie del filamento è stata infine ottenuta per extruding copiando per quattro volte la curva ottenuta e traslando tali copie nelle direzioni opportune.

 

Filamento della lampadina

 

Il corpo del portalampada è stato realizzato manualmente. Non era possibile creare tale superficie per extruding perché non si sarebbero ottenuti degli smussi arrotondati in entrambe le direzioni. Le curve 2D create avevano forme differenti, ad esempio la prima degenerava in un segmento mentre la seconda aveva la forma di un rettangolo arrotondato agli angoli. In tal caso, è stata posta particolare attenzione nella realizzazione di tali curve in quanto le curve dovevano essere ``compatibili'' tra loro: la partizione nodale estesa doveva essere la stessa e la parametrizzazione tale da evitare che la superficie si attorcigliasse su se stessa. Utilizzando queste accortezze è stato possibile ottenere la superficie finale mediante un semplice ``copia e incolla'' dei punti di controllo delle curve 2D.

 

Corpo del portalampada

 

E' stato inoltre creata una superficie che fa da smusso per la parte inferiore del portalampada; tale smusso ha lo spessore di un millimetro e fuoriesce lateralmente di altrettanto. Esso è stato creato nello stesso modo in cui è stato creato il corpo del portalampada. La figura sottostante mostra la sua sezione: tale curva è stata creata avendo in mente la forma della sezione dello smusso che si voleva realizzare ed è stata utilizzata solo per avere la partizione nodale estesa e per sapere quante curve 3D orizzontali dovevano essere create per ottenere la forma voluta.

 

Sezione dello smusso del portalampada

 

Le appendici utilizzate per fissare il portalampada al braccio superiore sono state create nello stesso modo in cui sono state create quelle per i bracci stessi.

Infine, vi sono i due contatti laterali. Per realizzarli si è partiti da una curva spline 2D di secondo grado rappresentante il profilo di tali contatti. Per revolution è stata quindi ottenuta una superficie a forma di ciotola. Successivamente i vertici sono stati ``tirati'' modificando manualmente il loro peso impostandolo ad un valore molto elevato. La parte spigolosa permette di fissare il contatto al portalampada, mentre la parte arrotondata permette di alloggiare la lampadina. Il risultato finale \`e mostrato nella seguente figura:

 

Superficie del contatto del portalampada

 

 

Realizzazione della scena

La scena finale è stata ottenuta disponendo opportunamente tutti i pezzi. Spesso il file originale non è stato alterato lavorando su una copia di esso (il nome di tali file termina con ``ok''). Sono stati creati numerosi file .obj contenenti tutte le parti logicamente correlate tra loro correlate: vi è, ad esempio, un file .obj per tutte le superfici del corpo della base. E' stato quindi scitto un file C che provvede a caricare tutti gli oggetti e superfici utilizzate, impostare gli opportuni colori/texture, luminosità e trasparenze ed a creare l'opportuna gerarchia la quale verrà poi salvata in un file .md. Il rendering delle immagini finali è stato ottenuto impostando i parametri in maniera tale da ottenere una qualità molto elevata. Tale processo è stato lanciato in background durante la notte su una macchina del laboratorio utilizzando il programma hrayt e specificando nella linea di comando i file descriventi la scena ed i parametri di rendering.

 

Note e osservazioni finali

Nel complesso, la realizzazione del modello è stata un'esperienza positiva. xcmodel si è rilevato uno strumento ben fatto ed assai utile per mettere in pratica tutte le principali proprietà delle curve e superfici NURBS. La scelta implementativa di memorizzare i file dati in formato ASCII è stata molto utile ed ha permesso di ottenere la precisione voluta facilmente e velocemente. Infine, le immagini finali ottenute sono molto belle e suggestive.

 

Alcuni esempi di immagini realizzate

 

Download modello

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

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