Progetto di Grafica

-         Parte di modellazione e resa

-         Modellazione di una lampada su un tavolino

 

 

 

 

 

 

 

A cura di Caputo Carlo

matricola 0000125632

caputo@cs.unibo.it


Sommario

 

Obiettivi 3

Contenuto della cartella del progetto e convenzioni utilizzate. 3

La scelta dell’oggetto. 4

Le fasi del lavoro. 4

Fase 1: Modellazione della Lampada. 5

Blocco superiore. 6

Lampada. 8

Blocco inferiore. 9

Maniglie. 11

La valvola del gas. 13

La Lampada finale. 14

Fase 2: Modellazione del tavolino. 15

Blocco superiore. 16

Cavalletti 20

Sostegni dei cavalletti 21

Sostegni della lastra superiore. 22

Sostegni della lastra inferiore. 23

Lastre. 24

Ventose. 25

Bulloni 26

Risultato Finale. 27

Fase 3: Resa. 28

La resa della lampada. 28

La resa del tavolino. 29

Pavimento. 30

Luci 31

Descriptor Library. 31

Osservazioni e Conclusioni 33

Download 33

 


Obiettivi

Obiettivo di questo paper è quello di spiegare i passi effettuati e le scelte fatte per modellare un oggetto 3D, costituito da più superfici NURBS,  avente una complessità di forma apprezzabile.

Tale paper può essere utilizzato per la valutazione del progetto, nonché come tutorial per chi fosse interessato ad utilizzare il sistema XCModel per modellare oggetti.

Contenuto della cartella del progetto e convenzioni utilizzate

All’interno della cartella “Caputo – Progetto2”, come da specifiche, è possibile trovare 4 cartelle: “curves2d”, “curves3d”, “modello” e “relazione”.

In questa sezione verrà spiegato cosa contengono e le convenzioni utilizzate sulla denominazione dei file.

1)      curves2d: contiene due sottocartelle, “Lampada” e “Tavolino”. In ognuna di queste è possibile trovare le curve di base attraverso le quali sono state costruite le superfici 3D per la parte di modellazione. Sono tutti file “.db”

2)      curves3d: questa cartella è stata inserita solo per seguire le specifiche, ma risulta vuota. Infatti, nella realizzazione degli oggetti che compongono il progetto finale, non sono state salvate le curve 3D, in quanto, nella maggior parte dei casi, inutilizzate, e quando questo è stato necessario, si trattava solo di trasformazioni affini nello spazio delle curve 2D, per cui non è stato ritenuto necessario conservare copia di questi file.

3)      modello: questa cartella contiene tutte le superfici utilizzate per la scena, automaticamente create da XCRayt. Inoltre, siccome sono state realizzate 2 rese della scena, una diurna e l’altra notturna, contiene 2 file .md, 2 file .vw e 2 file .arg, rispettivamente chiamate “LampadasuTavolino_day.<md | vw | arg>” e “LampadasuTavolino_night.<md | vw | arg>”. E’ inoltre presente una cartella “textures”, che contiene le textures utilizzate, ed una quindicina di immagini di esempio della scena prodotta, denominate rispettivamente “LampadasuTavolino_dayX.hr” e “LampadasuTavolino_nightX.hr”, dove la X è un numero progressivo utilizzato per distinguere le immagini.

4)      relazione: contiene questo documento. Ne sono state realizzate 2 versioni: una in formato html, contenuta nella sottocartella “HTML”, e una in PDF, contenuta nella omonima sottocartella.

 

Per tutti i file contenuti nella cartella principale, si tratti di curve piuttosto che di superfici, sono state utilizzate delle convenzioni sulla denominazione. In particolare, ogni file è stato denominato seguendo il formato xx_<blocco>.db, dove:

1)      xx è un numero progressivo utilizzato per facilitare il caricamento dei vari blocchi in XCSurf, poiché rispecchia l’ordine dei blocchi contenuto nei disegni preliminari (si veda la sezione “le fasi del lavoro” per maggiori chiarimenti);

2)      <blocco> è un nome significativo del blocco realizzato. Nel caso della lampada, è possibile trovare nomi come “bloccosuperioreyy” o “bloccoinferioreyy”; indicano, rispettivamente, che l’oggetto in questione è una parte del blocco superiore o inferiore della lampada, a cui è stato giustapposto un contatore per differenziarli, seguendo, anche in questo caso, la nomenclatura contenuta nel disegno preliminare. In altri casi, come le maniglie della lampada o come il piano che sorregge la lastra di vetro del tavolino, si possono trovare nomi come “manigliaL”, “manigliaR”, “pianoLastraUpLeftRearFace”: il significato è piuttosto intuitivo: nei primi due casi si tratta rispettivamente della maniglia sinistra e destra della lampada, mentre nel terzo della faccia posteriore (rispetto alla camera frontale) che chiude la superficie del piano della lastra che si trova in alto a sinistra, e così via.

 

La scelta dell’oggetto

Fin da subito, nel pensare all’oggetto da realizzare, la scelta è ricaduta sul soprammobile: per questo motivo, ho iniziato a cercare tra i “ruderi” a casa, nel tentativo di trovare un oggetto semplice ed allo stesso tempo accattivante.

Il risultato di tale ricerca è stata una vecchia lampada ad olio, caratterizzata da una struttura molto semplice (come si vedrà più avanti, la maggior parte delle sue componenti sono state ottenute per rotazione di curve di grado 2), ma di una complessità di forma che ho ritenuto sufficientemente complessa per i fini che mi ero riproposto: modellare un oggetto carino e caratteristico.

Ovviamente, i sembrava piuttosto superficiale modellare la lampada e lasciarla “sospesa nell’aria”, per cui, successivamente alla modellazione di quest’ultima, ho ritenuto opportuno modellare anche un tavolino, sul quale poggiarla.

Le fasi del lavoro

La modellazione, soprattutto in ambito didattico, è di per sé un’attività che richiede molta creatività: ricercare le curve idonee per modellare un oggetto, significa trovare le poligonali corrette che possano produrre tali curve. E questa è una caratteristica che, oltre alla conoscenza di strumenti di modellazione, richiede anche una notevole esperienza nel settore.

Per chi esperienza ne ha poca, esistono due modi per cercare di ottenere dei risultati accettabili:

1)      procedere “per tentativi”: continuando a spostare control points, e modificandone i pesi, prima o poi si dovrebbe riuscire a trovare la curva corretta o comunque la più  simile.

2)      procedere in maniera analitica: l’esattezza della curva reale dipende strettamente da quanto precise siano le misurazioni “dal vero”. Misurare esattamente le dimensioni di tutte le componenti di un oggetto (in seguito “blocchi”), riproponendoli in un ambiente di lavoro, aiuta molto a trovare le poligonali che generano curve verosimili.

Nel mio caso, vista anche la facile reperibilità dell’oggetto, la scelta è ricaduta sul metodo analitico: a fronte di un carico di lavoro iniziale maggiore, alla fine si è rivelata una scelta di cui non sono pentito, perché la realizzazione di ogni curva si è rivelata essere molto semplice, banale in molti casi: avere le coordinate dei control point di un certo blocco, e le rispettive misurazioni “dal vero” aiuta molto nella realizzazione del blocco successivo, e aiuta a mantenere una visione di insieme del progetto finale.

Per questo motivo, le fasi del mio lavoro sono state:

1)      Riproduzione dell’oggetto dal vero su carta millimetrata, attraverso misurazioni, immagini digitali ecc.

2)      Suddivisione dell’oggetto riprodotto in “blocchi”

3)      Modellazione delle curve generatrici di ogni blocco

4)      Modellazione delle superfici in base alle curve generatrici

5)      Resa: acquisizione di texture, tonalità dei colori e caratteristiche dei materiali, ipotesi su posizione e intensità di luce attraverso l’osservazione dal vero e immagini digitali.


Fase 1: Modellazione della Lampada

La fase di lavoro preliminare è stata quella dell’acquisizione delle informazioni necessarie alla modellazione attraverso misurazioni precise dell’oggetto dal vero da realizzare.

Ecco che quindi questo lavoro ha portato alla realizzazione del disegno illustrato in figura 1.

 

Figura 1: Il disegno preliminare della lampada

 

A questo punto si è proceduto alla suddivisione dell’oggetto in blocchi, e quindi l’inizio del lavoro vero e proprio, utilizzando il tool XCCurv.


 

 Blocco superiore

 

Figura 2: Il blocco superiore

 

Per un maggiore semplicità di modellazione, il blocco superiore è stato suddiviso in 8 sottoblocchi, come si vede anche dai numeri cerchiati in figura.

 

Fin da subito è risultato evidente come un po’ tutta la lampada andasse realizzata utilizzando superfici ottenute per rivoluzione: per questo motivo, sono state create opportune curve profilo che, sovrapposte le une alle altre, hanno originato il profilo del blocco superiore.

 

In tabella 1 sono riportate tutte queste curve, con il loro nome, ed una vista d’insieme della curva profilo risultante.

 

01_cupola

02_bloccoSuperiore01

03_bloccosuperiore02_03

04_bloccosuperiore03

05_bloccosuperiore04

06_bloccosuperiore04_05

07_bloccosuperiore05

08_bloccosuperiore06

Vista d’insieme

Tabella 1: uno sguardo d'insieme sulle curve realizzate per il blocco superiore

 

A queste curve, prese singolarmente, è stata applicata una rivoluzione per ottenere le superfici che generano il blocco superiore.

La scelta di mantenere i blocchetti separati, e di non fare una unica curva profilo è stata fatta per garantire al meglio la massima corrispondenza tra il risultato in XCModel e l’oggetto originale, cosa che si rendeva necessaria soprattutto quando si andavano a modellare le curve che descrivono archi di circonferenza.

In tabella 2 sono riportate le superfici ottenute per rivoluzione delle curve sopra viste, ed il blocco superiore risultante.

 

01_cupola

02_bloccoSuperiore01

03_bloccosuperiore02_03

04_bloccosuperiore03

05_bloccosuperiore04

06_bloccosuperiore04_05

07_bloccosuperiore05

08_bloccosuperiore06

Vista d’insieme

Tabella 2: un sguardo d'insieme sulle superfici realizzate per il blocco superiore

 


Lampada

 

Figura 3: Immagine della lampada

 

Anche la lampada centrale è una di quelle superfici ottenute per rivoluzione, e la curva profilo è molto semplice da immaginare. Nella tabella qui sotto è riportata la curva profilo realizzata in XCCurv e la relativa superficie ottenuta per rivoluzione.

 

09_lampada07

Superficie generata

Tabella 2: La curva profilo e la superficie ottenuta per modellare la lampada


 

Blocco inferiore

 

Figura 4: il blocco inferiore della lampada

Anche questo blocco, in linea con quanto detto sopra, si compone di più parti, da ognuna delle quali è stata applicata una rivoluzione per ottenere le superfici che lo realizzano.

Nella tabella sottostante sono riportate, come per la tabella 1, le curve utilizzate.

 

10_bloccoinferiore08

11_bloccoinferiore09

12_bloccoinferiore10

13_bloccoinferiore11

14_bloccoinferiore12

15_bloccoinferiore13

16_bloccoinferiore14

Vista d’insieme

Tabella 3: uno sguardo d'insieme sulle curve realizzate per il blocco inferiore

 


Da queste figure sono state ottenute le seguenti superfici:

 

10_bloccoinferiore08

11_bloccoinferiore09

12_bloccoinferiore10

13_bloccoinferiore11

14_bloccoinferiore12

15_bloccoinferiore13

16_bloccoinferiore14

Vista d’insieme

Tabella 4: uno sguardo d'insieme sulle superfici realizzate per il blocco inferiore

 

Un discorso a parte va fatto per la base del blocco inferiore, ovvero la faccia sottostante. Per questa superficie, è stato realizzato un cerchio pieno, a partire da due semicirconferenze simmetriche, alle quali è stata poi applicata una estrusione.

Sebbene fosse possibile ottenere lo stesso cerchio per rivoluzione di un segmento con una estremità centrata nell’origine, e lungo il raggio del cerchio finale, tale metodo è stato evitato per non avere in seguito problemi di parametrizzazione.

In particolare, è stato costruito un quarto di circonferenza con la tecnica dei 3 punti, della quale, essendo un quarto di un ipotetico cerchio centrato nell’origine,  è stata fatta una copia, fatta poi ruotare di -90 gradi, e poi unita con la prima, in modo da ottenere la semicirconferenza.

A questo punto è stata fatta una copia di quest’ultima, e, in XCSurf, è stata fatta ruotare intorno all’asse Z per ottenerne la simmetrica.

Infine è stata applicata l’estrusione tra le due semicirconferenze, ottenendo la superficie desiderata.

La tabella qui sotto schematizza il procedimento eseguito.

 

Costruzione del quarto di cerchio

attraverso il metodo dei tre punti

(XCCurv)

Duplicazione della curva, e

rotazione di una di queste di -90

gradi, infine join tra le due curve

(XCCurv)

Duplicazione della

semicirconferenza e rotazione

della seconda di 180° intorno a Z

(XCSurf)

Estrusione delle due

semicirconferenze per ottenere il

cerchio pieno (XCSurf)

Tabella 5 : Procedimento eseguito per ottenere un cerchio pieno

Maniglie

 

Corpo delle maniglie

 

 

A differenza di quanto visto fin ora, le maniglie non sono state costruite per rivoluzione.

La loro struttura dava più l’idea di un rombo che “scivolasse” lungo una certa traiettoria: ecco che quindi sono state utilizzate le tubular.

La costruzione di questa superficie, quindi, prevede due passi: il primo, la costruzione di una curva profilo, che nel nostro caso è un rombo, il secondo, l’individuazione della traiettoria, o, in altre parole, il “profilo” della maniglia della lampada.

Nella tabella qui sotto è riportato il procedimento utilizzato.

 

Costruzione di un rombo

Costruzione della curva traiettoria

Costruzione della tubulare attraverso

 le due curve

Tabella 6: Le maniglie sono state costruite attraverso una tubular che ha come curva profilo un rombo


Ornamenti delle maniglie

 

Alla maniglia, come si vede in figura, sono stati aggiunti degli ornamenti esterni, che ne completano la sezione:

 

Figura 5: La sezione della maniglia, vista in XCSurf

 

Per realizzarla, sono state costruite 2 curve, “OrnamentoFrontale” e “OrnamentoEsterno”, che sono stati posizionati all’estremità del rombo. Successivamente è stata fatta una copia di entrambe, che poi è stata ruotata di 180°. A questo punto, utilizzando la stessa curva traiettoria utilizzata per la maniglia,  sono state generate quattro nuove tubular. Bisogna osservare che il posizionamento degli ornamenti intorno al rombo va fato prima di generare la tubular, in quanto in questo modo le superfici finali saranno create in modo corretto (si pensi, ad esempio, all’ornamento interno: se questo venisse creato a partire da una curva profilo centrata nell’origine, descriverebbe una traiettoria più lunga di quanto necessario..), ed avranno la posizione giusta subito dopo la creazione. Nella tabella in basso è riportato il risultato di questa operazione:

 

Gli ornamenti applicati alla maniglia, in una vista 3D

La maniglia finale

Tabella 7: Gli ornamenti e la maniglia finale

La valvola del gas

 

Frontalmente la lampada presenta una piccola valvola che regola la quantità di gas emesso (e quindi la quantità di luce emessa dalla lampada).

Questa valvola è stata costruita a partire da una curva profilo, fatta ruotare in modo da ottenere una superficie per rivoluzione, alla quale è stato applicato un cerchio pieno per costruirne la faccia.

Il cerchio pieno è stato costruito in maniera equivalente a quello visto per la base della lampada, per cui in questa sede non verrà riproposto il procedimento utilizzato.

Per quanto riguarda la curva profilo, invece, la tabella sottostante ne riporta il procedimento, fino alla costruzione della superficie finale.

 

La curva profilo (XCCurv)

La superficie ottenuta per

rivoluzione (XCSurf)

La faccia della valvola (XCSurf)

La valvola completa (XCSurf)

Tabella 8: il procedimento per costruire la valvola


La Lampada finale

 

Mettendo insieme tutti i pezzi, è stata finalmente ottenuta la lampada.

Ecco il risultato del mio lavoro, visto nelle quattro visuali “canoniche”:

 

Vista Frontale

Vista Laterale

Vista dall’alto

Vista prospettica

Tabella 9: La lampada vista dalle quattro visuali canoniche

 


Fase 2: Modellazione del tavolino

 

A differenza della lampada, il tavolino presenta molte meno superfici curve, pertanto non è stato fatto uno scrupoloso lavoro preliminare di disegno su carta millimetrata, ma semplicemente si sono prese le misure, e realizzato uno schema su carta che potesse guidare la realizzazione dell’oggetto.

Nella figura in basso è possibile osservare lo schema descritto:

 

Figura 6: il tavolino secondo lo schema realizzato

 

 

Come visto per la lampada, a questo punto si è provveduto alla “scomposizione” dell’oggetto in blocchi, che sono stati realizzati separatamente. Vediamo quali:


 

Blocco superiore

 

Si tratta della parte superiore dei cavalletti del tavolo. Ve ne sono due, simmetrici, a destra e sinistra. A questi sono agganciati due sostegni che sorreggono la lastra di vetro.

 

 

 

Per realizzare questo blocco, è stato necessario modellare quattro superfici. La prima, il corpo vero e proprio, la seconda e la terza, le facce che chiudono tridimensionalmente la prima superficie, e la quarta, un ornamento dorato che segue il profilo del blocco, longitudinalmente.

 

Corpo del blocco

 

Osservando tale oggetto, ci si rende conto che, in pratica, si tratta di un rettangolo arrotondato, che viene fatto “viaggiare”, in orizzontale, fino a disegnare la superficie, per cui potrebbe venire in mente di realizzarlo come tubular.

In realtà ci sono alcuni dettagli che non rendono possibile questo approccio.

Non sarebbe un problema il fatto che tale rettangolo arrotondato sia inclinato di un certo angolo, poiché le tubular conservano l’inclinazione della curva profilo di partenza, ma le due facce del blocco, quella anteriore e quella posteriore, differiscono in dimensioni.

In particolare, la faccia posteriore è più grande di quella anteriore, benché inclinata dello stesso angolo.

Per questo motivo, a fronte del procedimento sopra accennato, si è preferito ottenere la superficie per estrusione di due curve profilo, inclinate lungo X dello stesso angolo, ma di cui una è la versione scalata dell’altra.

In  particolare, questi sono i passi fatti per la realizzazione della superficie:

1)      Costruzione in XCCurv, di un rettangolo arrotondato.

2)      Duplicazione del rettangolo ottenuto e operazione di scala, in altezza, sul secondo

3)      Inclinazione di entrambi i rettangoli

4)      Traslazione del secondo rettangolo nel verso della sua “faccia”

5)      Estrusione dei due rettangoli

E’ da osservare che l’operazione di scala, se fatta rispetto al baricentro del rettangolo, ne aumenta le dimensioni in altezza, ovvero sia verso l’alto che verso il basso. Trovandosi i due rettangoli alla stessa altezza, occorrerà effettuare, sul rettangolo scalato, una traslazione verso l’alto di metà della differenza di altezza dei due rettangoli.

La tabella in basso illustra il procedimento seguito:

 

01_pianoLastraUp

duplicazione e scala della seconda curva

lungo Z

Traslazione della seconda curva

lungo Z

Inclinazione di entrambe le curve intorno a Y

Traslazione della seconda curva lungo X

Estrusione delle sue curve a formare

la superficie

Tabella 10: procedimento utilizzato per la costruzione del corpo del blocco superiore del tavolino

 

Facce del blocco superiore

 

Per chiudere la superficie appena realizzata, si sono rese necessarie due facce, da applicare alle due estremità del blocco.

Il procedimento utilizzato per realizzarle ha molto a che vedere con quello già visto per la realizzazione di un cerchio pieno: anzitutto si crea una curva che corrisponde alla metà del perimetro della superficie desiderata; a questo punto la si duplica, e la si ruota di 180° intorno a Z, per ottenerne la simmetrica.

Infine, la superficie si ottiene per estrusione delle due curve.

Ottenuta la prima faccia, si applicano le trasformazioni 2) 3) 4) e 5) viste per la costruzione del corpo del blocco per ottenere la faccia posteriore.

La tabella sottostante illustra il procedimento eseguito.

 

02_pianoLastraUpFace

Duplicazione e rotazione di 180°

intorno a Z

Estrusione delle due curve

Duplicazione e scala

della superficie

Traslazione lungo Z

della superficie copiata

Inclinazione delle due superfici dello stesso

 angolo visto per il corpo

Traslazione in profondità della superficie copiata

Tabella 11: procedimento utilizzato per costruire le facce del blocco superiore

 

Ornamenti del blocco superiore

 

Come accennato precedentemente, il blocco superiore presenta un ornamento dorato.

Questo ornamento è ottenibile attraverso una tubular che abbia come curva profilo un semicerchio e come curva traiettoria il perimetro longitudinale del corpo del blocco.

La tabella in basso illustra il procedimento eseguito per ottenere l’ornamento.

 

03_pianoLastraUpOrnamento_Base

04_pianoLastraUpOrnamento_Traiettoria

04_13_pianoLastraUpOrnamento

Tabella 12: Gli ornamenti vengono realizzati attraverso una tubular che ha come curva profilo un semicerchio e come curva traiettoria il profilo del blocco superiore

 


 

Risultato

Una volta assemblati tutti i “pezzi”, questo è il risultato per il blocco superiore.

 

Figura 7: Il blocco superiore, nella sua totalità

 

Duplicando il blocco superiore, e traslandone una copia lungo le Y positive, si sono ottenuti i due blocchi superiori del tavolino.


 

Cavalletti

 

 

Come si vede in figura, il tavolino è sorretto da 4 cavalletti, due a sinistra e due a destra, uguali e disposti in maniera simmetrica rispetto all’asse Y. Vediamo come sono stati realizzati. La superficie del cavalletto è composta da due “sottosuperfici”: la prima, è il cavalletto vero e proprio, ottenuto, come per il blocco superiore, dall’estrusione di due rettangoli arrotondati di cui il secondo altri non è che una copia scalata del primo, e dalla faccia in basso, che ne chiude la superficie (la faccia in alto è stata omessa, in quanto non visibile). Il procedimento che ha consentito di realizzare la faccia è del tutto analogo a quello visto nel paragrafo precedente a proposito della faccia del blocco superiore, tanto più che il rettangolo utilizzato come curva è una copia opportunamente scalata del rettangolo arrotondato visto in quella sede, per cui ometteremo tale procedimento. Anche per quanto riguarda la costruzione del corpo del cavalletto o passi sono molto simili, cambiano solo i valori di scala applicati e la disposizione dei rettangoli arrotondati nello spazio, che saranno invece orientati orizzontalmente, e quello in alto è leggermente spostato rispetto alla verticale di quello in basso. In Particolare, i passi fatti sono:

1)      Operazione di scala del rettangolo arrotondato visto prima

2)      Rotazione intorno all’asse X per orientarlo verso il basso

3)      Duplicazione e scala, per ottenerne l’estremo inferiore

4)      Traslazione lungo -Z e Y per posizionarlo in basso

5)      Estrusione dei due rettangoli

La tabella sottostante illustra il rettangolo iniziale ed il risultato finale:

 

05_cavallettiUpside

06_cavallettiDownSide

Risultato

Tabella 13: Le curve di partenza ed il risultato ottenuto nella realizzazione del cavalletto del tavolino

 Sostegni dei cavalletti

 

 

Completiamo la parte relativa alla struttura portante del tavolino descrivendo i sostegni dei cavalletti, ovvero dei rinforzi, posti tra il cavalletto anteriore e quello posteriore, sia destro che sinistro, del tavolino.

Il procedimento è un po’ sulla falsa riga dei due appena visti: la forma di base, seppure scalata, è sempre la stessa, come uguale è la tecnica di realizzare la superficie, ovvero per estrusione.

Quello che cambia sono la posizione dei due rettangoli arrotondati, la loro dimensione, che tra l’altro in questo caso è uguale per entrambi, e la loro inclinazione:  infatti i due rettangoli sono sempre inclinati, ma questa volta in maniera simmetrica. Questo per seguire l’andamento dei cavalletti.

Questi sono i passi fatti per realizzare i sostegni:

1)      Scala del rettangolo arrotondato e duplicazione dello stesso

2)      Inclinazione del primo di un angolo positivo, mentre il secondo viene inclinato di un’angolo negativo, in modo che i vertici superiori dei due rettangoli siano convergenti

3)      Traslazione del secondo rettangolo nel verso definito dalla normale alla sua superficie

4)      Estrusione dei due rettangoli

Ecco il risultato di questo procedimento:

 

Figura 8: il sostegno dei cavalletti

 

 

Sostegni della lastra superiore

 

 

La lastra di vetro superiore è poggiata su due sostegni, entrambi dorati, che altro non sono che dei semplici cilindri.

Benché in fase di progetto si sia preferito realizzati manualmente, questo per poter agire in maniera più precisa sulle loro dimensioni, è comunque possibile utilizzarli tramite le forme predefinite di XCSurf.

Nella tabella in basso sono illustrati il cerchio generatore ed il sostegno ottenuto:

 

09_sostegnoLastraUp

Risultato

Tabella 14: composizione del sostegno della lastra superiore

Sostegni della lastra inferiore

 

 

A differenza dei sostegni della lastra superiore, questi non sono esattamente dei cilindri, ma hanno una base ellittica. Nonostante ciò, non cambia il procedimento fatto per ottenerli: si tratta sempre di disporre due copie di una ellisse ad una certa distanza, ed ottenere la superficie desiderata per estrusione delle due curve.

La tabella in basso illustra l’ellisse di base ed il risultato ottenuto:

 

10_sostegnoLastraDown

Risultato

Tabella 15: la curva generatrice ed il risultato del sostegno della lastra inferiore


Lastre

 

 

Le lastre di vetro sono sostanzialmente dei piani, che tuttavia presentano una sezione sfaccettata, come si vedrà meglio dalle figure in basso.

Anche in questo caso la superficie è stata ottenuta per estrusione di due curve profilo, distanziate tra di loro in maniera opportuna.

In basso è illustrata la curva profilo, un dettaglio di essa che evidenzia la sfaccettatura delle lastre, e la superficie finale.

 

11_lastraUp

11_lastraUp (particolare)

Risultato

Tabella 16: La curva profilo della lastra (sinistra), un suo particolare che ne mostra la sfaccettatura (centro) e la superficie generata (destra)


Ventose

 

Sotto ogni lastra di vetro vi sono quattro ventose.

Questo oggetto è stato realizzato per rivoluzione di una curva profilo che ne evidenziasse la struttura “a scala”, come lo era l’originale.

Una volta ottenuta la superficie, è stata applicata un’operazione di scala, lungo Z, per darne un effetto “schiacciato”.

 

12_ventosa

Risultato

Tabella 17: la ventosa (a destra) é stata realizzata per rivoluzione di una curva profilo (a sinistra)


Bulloni

 

Come ultimo oggetto modellato per il tavolino, è stato realizzato un bullone, replicato poi quattro volte per disporlo in concomitanza ai sostegni delle lastre.

Tale oggetto ha una struttura piuttosto semplice: si tratta sostanzialmente di un esagono, e tale forma è stata utilizzata sia per realizzare la superficie “sezione”, ovvero lo spessore dell’oggetto, che per realizzarne la facciata.

In particolare, la sezione è stata ottenuta per estrusione di un esagono intero con una sua copia traslata lungo la normale alla faccia, mentre la facciata è stata realizzata per estrusione di due “semiesagoni” simmetrici.

Nella tabella in basso sono riportate le curve utilizzate e le superfici ottenute.

 

14_bulloniProfilo

33-40_bullone

13_bulloniFace

41-48_bulloneFace

Risultato

Tabella 18: le curve profilo ed il bullone finale


Risultato Finale

 

Ecco il risultato della modellazione del tavolino, nelle quattro visuali “canoniche”:

 

Visuale anteriore

Visuale laterale

Visuale dall’alto

Visuale prospettica

Tabella 19: il tavolino nelle quattro visuali canoniche


Fase 3: Resa

 

La fase di resa è quella che, nel progetto, lascia più spazio alla creatività.

Mentre infatti fin ora si era trattato di cercare di riprodurre fedelmente la forma degli oggetti modellati, nella fase di resa lo sforzo è quello di creare un ambiente realistico, non per forza uguale a quello osservabile da vero.

Ad esempio, la lampada, dal vero, risultava piuttosto “datata”, sporca, senza vernice in molti punti.

Grazie alle tecniche di resa è stato possibile, diciamo così, “restaurarla” virtualmente, dandole un effetto lucido che la rende percettivamente “nuova”. Un altro esempio è il vetro della lastra del tavolino: nel suo aspetto “dal vero” non era altro che un corpo del tutto trasparente, in cui solo la polvere, o la sua sezione azzurrina, poteva indicare all’osservatore che non si trattasse di “aria”: nella fase di resa si può giocare con gli indici di rifrazione, in modo da creare interessanti effetti che visivamente, almeno per quanto riguarda chi ha realizzato la scena, risultano più accattivanti. Un ultimo esempio (ma ce ne sono molti) può riguardare il corpo centrale della lampada, quello che, in altre parole, contiene la “fiamma”, o la “lampadina”: dal vero questa non è altro che un pezzo di plastica color bianco sabbia molto opaca, che poco dà l’idea della sua funzione; in XCModel è stato possibile giocare con la sua trasparenza, dandole un effetto, seppur “iperreale” onestamente più interessante.

 

In questa sezione vedremo, senza scendere troppo nei dettagli, quali idee hanno governato la resa della scena, quali scelte progettuali e i motivi di queste scelte. Segue una carrellata di immagini di esempio, in cui la scena viene mostrata da varie angolazioni e con varie inquadrature dei particolari, in modo da dare un’idea più concreta del lavoro svolto.

La resa della lampada

 

La lampada è composta da varie parti, di cui una consiste nella parte strutturale, una valvola del gas, una cupola e dal blocco centrale contenente la lampadina (o la fiamma).

 

Parte strutturale

 

La parte strutturale è fatta in un materiale molto simile al rame, piuttosto scuro, ma lucida (almeno, la si è ipotizzata tale, se presa “nuova”). Il suo colore è sul rossastro/marrone, con un valore piuttosto alto di diffuse reflection, ed uno medio di specular reflection. Questo le ha conferito il grado di lucidità desiderata. Per rendere il tutto un po’ più realistico è stata utilizzata una domain texture, alla quale è stato tuttavia associato un valore di ambient piuttosto basso, per mantenere l’effetto ottenuto dalle caratteristiche sopra citate.

La figura in basso illustra la domain texture utilizzata per la struttura della lampada:

 

Figura 9: la domain texture utilizzata per la parte strutturale della lampada


Le parti in plastica

 

Nella lampada, ciò che non è in rame, è in plastica: è per questo motivo che rientrano in questa sezione sia la cupola in alto, che il blocco centrale e la valvola.

Le caratteristiche di questo materiale, come citato nella parte introduttiva di questa sezione, sono una via di mezzo tra la plastica ed il vetro: in realtà, per come è stato poi realizzato l’oggetto, la si direbbe più essere un “”vetro offuscato” che una “plastica trasparente”.

Infatti, sebbene il colore sia molto simile a quello sabbia, ha un valore di riflessione ambiente e speculare piuttosto basso, mentre alto è quello diffuso. Inoltre ha un discreto valore di trasparenza: questo per permettere un migliore effetto con la luce interna.

Una annotazione è da fare per quanto riguarda la valvola: alla sua “facciata” è stata applicata una bump texture, per darne un effetto decorativo.

In figura qui sotto è riportata la bump texture applicata alla valvola:

 

Figura 10: la bump texture applicata alla valvola

 

La resa del tavolino

 

Il tavolino, a differenza della lampada, presenta quattro tipi di materiali: quello per la struttura, il vetro,  l’oro e la plastica, utilizzata per le ventose.

 

La struttura

 

La struttura del tavolino è in ferro, al quale è stata applicata una vernice marrone. Il materiale risultante quindi dovrà avere un colorito che dà sul marrone scuro, ma deve anche essere piuttosto lucido. Per questo motivo avrà un basso livello di riflessione ambiente, uno medio per quella speculare, ma il massimo valore di riflessione diffusa.

Per quanto riguarda l’indice di rifrazione, è stato utilizzato un “preset”, ovvero quello della calcite, che meglio si prestava alla resa finale.

Questo materiale è totalmente opaco, per cui non è stato dato alcun valore di trasparenza.

 

Vetro

 

L’obbiettivo nella resa del vetro era quello di ottenere una tipologia di materiale che avesse certamente un aspetto trasparente, ma che risaltasse le caratteristiche del vetro preso “dal vero”.

Per questo motivo, gli si è dato un colore azzurrino, preso osservando la sua sezione; sono stati utilizzati alti valori di trasparenza, valori medi di riflessione ambiente e diffusa, mentre molto basso l’indice di riflessione speculare.

Per quanto riguarda l’indice di rifrazione, nonostante la presenta di preset idonei, è stato preferito darne un valore solo un po’ più alto di quello dell’aria, in quanto, sostanzialmente, si tratta di una lastra piana e poco spessa.

 

Le parti in oro

 

Nel progetto le parti in oro sono state utilizzate per gli ornamenti della struttura e per i sostegni della lastra.

La caratteristica di questo materiale, oltre al suo colore sul giallo, è quello di avere una elevata lucidità e luminescenza, per cui sono stati attribuiti valori alti di riflessione speculare e diffusa, medi per quella ambiente. L’indice di rifrazione è molto elevato.

 

Plastica per le ventose

 

In ultimo, è stata realizzata una plastica trasparente per le ventose. Il suo colore di base è bianco, ma si è giocato sull’effetto trasparenza, che lo inibisce. Per il resto, sono stati abbattuti i valori di riflessione ambiente e speculare, mentre quello diffuso è al massimo. L’indice di rifrazione è più alto di quello dell’aria, per darne consistenza.

 

Pavimento

 

Completa la scena un pavimento, ottenuto attraverso un piano, dalle caratteristiche riconducibili a quelle di una moquette, per cui piuttosto lucido, dalla elevata riflessione diffusa, mentre dalla bassa riflessione ambiente e speculare.

Al pavimento è stata applicata una domain texture, per darne le caratteristiche, appunto, di “moquette”.

La texture applicata è riportata nella figura in basso:

 

Figura 11: la texture applicata per la resa del pavimento


Luci

 

Per la realizzazione della scena, sono state effettuate due ambientazioni: una diurna e una in notturna.

Per quanto riguarda la resa diurna, è stata utilizzata la tecnica del “three point lighting”, molto valida in genere per dare risalto ad un oggetto.

Tale tecnica consiste nel posizionare tre luci, preferibilmente spot (ma vanno bene anche delle point lights), intorno all’oggetto.

In particolare, la luce principale, chiamata “key light”, viene posizionata in alto di un angolo che va dai 15 ai 45 gradi in alto rispetto all’altezza del soggetto, e di un altro angolo, sempre che varia dai 15 ai 45 gradi, a seconda delle situazioni, lateralmente rispetto alla direzione di vista della camera.

Successivamente è stata inserita una seconda luce, chiamata “fill light”, che viene posizionata, anche se in maniera non del tutto simmetrica, dall’altro lato rispetto alla direzione di vista della camera: in altre parole, se la key è stata posizionata (come in questo progetto), in alto a sinistra rispetto alla direzione di vista della camera, la fill andrà in alto a destra, con dei valori angolari che si discostano leggermente da quelli della key light.

La fill light serve per “riempire” le zone d’ombra create dalla key.

Infine vi è una terza luce, la “back light”, che viene posizionata in alto, dietro l’oggetto: il suo scopo è quello di dare risalto ai contorni del soggetto, per cui spesso viene chiamata anche “rim light”.

La parte più macchinosa di questa parte del progetto è consistita nel “calbrare” le luci in modo che ne venisse una immagine “correttamente esposta”, per dirla in termini fotografici. Per far questo si è agito sui valori di intensità e di range delle varie luci utilizzate.

Infine, per dare l’effetto di “lampada accesa” è stata inserita una luce all’interno della lampada.

Per quanto riguarda la resa in notturna, sono state eliminate tutte le luci utilizzate per il three point lighting, mentre è stata lasciata solo quella interna alla lampada: il risultato, a mio parere, è molto suggestivo.

Descriptor Library

 

All’interno della cartella “modello” è possibile trovare un script, con il quale è possibile ottenere lo scene graph.

Coerentemente con quanto fatto, lo script permette di realizzare lo scene graph del progetto in entrambe le riprese (diurna o notturna).

Una volta creato il Makefile con l’utilityxmkmf”, si crea l’eseguibile con il seguente comando:

 

make LamnpadasuTavolino

 

che genera l’eseguibile “LampadasuTavolino”. Per eseguire il programma, bisogna avviarlo con una opzione:

            -d: per ottenere lo scene graph in modalità diurna

            -n: per ottenerlo in modalità notturna.


Galleria delle Immagini di resa

 

Quella che segue è una serie di immagini di esempio della resa ottenuta in XCRayt:

 

Day01

Day02

Day03

Day04

Day05

Day06

Day07

Day08

Figura 12: Una galleria delle immagini in presa diurna

 

Night01

Night02

Night03

Night04

Night05

Night06

Night07

Night08

Figura 13: Una galleria delle immagini in presa notturna

 


Osservazioni e Conclusioni

 

Ad essere sincero, la parte di questo progetto che ha richiesto il tempo maggiore è stata quella relativa alla modellazione, forse a causa anche del lavoro preventivo di “raccolta di informazioni” effettuato.

La cosa che più mi ha spinto a procedere in questo modo è stato il voler imitare, per quanto le mie risorse lo consentissero, il processo di modellazione fatto a livello industriale.

Com’è noto, infatti, la realizzazione di modelli nella computer graphics passa anzitutto da designer, o, a seconda del settore, veri e propri artisti, che disegnano, e poi modellano su creta, i loro oggetti.

Poi il lavoro passa ad esperti che acquisiscono il modello attraverso opportuni scanner 3D, digitalizzandolo. E’ a questo punto che si interviene di fino per modellare la superficie finale.

La scrupolosa raccolta di misure, come dopo la conversione di queste misure da uno spazio che definirei “reale” ad uno “spazio XCmodel”, è stata la parte di realizzazione del progetto che ha portato via più tempo in assoluto.

Una scelta di cui, come accennavo in precedenza, alla fine non mi sono pentito: una volta acquisiti i dati, è stato un passo triviale ottenere le curve prima, e le superfici poi, in XCModel.

Non solo: le informazioni sulle misure dell’oggetto da modellare davano anche l’esatta posizione nello spazio dei blocchi realizzati, e questo è stato un notevole vantaggio, perché mi ha esonerato, seppur parzialmente, di accingermi in seguito ad effettuare improbabili trasformazioni ad oggetto già modellato.

Il modello nasceva, pezzo per pezzo, nella sua posizione finale, senza bisogno di ulteriori modifiche.

Questo significa che, una volta terminato di lavorare in XCSurf, è bastato semplicemente caricare il file obj con XCRayt, e concentrarsi esclusivamente sugli aspetti di resa.

Per il resto, il lavoro ha richiesto dei tempi piuttosto brevi, ed è proceduto in maniera sostanzialmente agevole.

E’ bastato poco per ambientarsi in XCCurv, capire a cosa servono gli strumenti a disposizione e dove trovarli, anche per la ragionevole suddivisione, secondo aree tematiche, del pannello principale.

Il mio lavoro ha sfruttato, per quanto detto prima, pesantemente la modalitàkeyb” di immissione dei dati, ed è forse per questo che poi la modalità “mouse”, soprattutto all’inizio, si è rivelata se non altro poco intuitiva (ci ho messo un po’ a capire come si potesse fare, ad esempio, join tra due curve…).

Un difetto della modalità keyb invece è quello di non poter editare liberamente il numero scritto: ovvero manca la possibilità di spostarsi con il cursore all’interno del box, per cambiare una singola cifra.

Il caso più evidente, e scomodo, di questo difetto lo si ha quando, volendo tracciare ad esempio un segmento centrato nell’origine, si procede scrivendo le coordinate del punto che si trova nel quadrante delle x e y positive, e poi, per poter scrivere quelle del simmetrico, non si può cambiare solo il segno, ma bisogna riscriverlo tutto.

Sarebbe molto comoda anche la possibilità di effettuare dei “copia e incolla” nei box, cosa che invece ancora non è possibile fare.

A proposito di usabilità, ci sarebbe anche da dire qualcosa sulla caratteristica, propria di XCModel, di far sparire il cursore dal box non appena il puntatore del mouse vi si sposta, come anche rispetto all’assenza della funzionalità del tasto tab, che da sempre ci ha abituato alla possibilità di poter navigare da un box all’altro senza uso del mouse…Insomma, fare un programma leggermente più conforme a quelli in uso, non farebbe male, ma ovviamente questi sono solo dettagli.

Anche XCSurf non è immune da osservazioni di questo tipo: la prima, in assoluto, quella dell’utilizzo di molte finestre: un approccio secondo me dispersivo, per chi non è abituato a lavorare con programmi simili, come GIMP, e oltretutto scomodo, che inevitabilmente riempie la barra delle applicazioni in basso, almeno su window manager come KDE, e trovare qualunque altra cosa, come un editor di testo piuttosto che GIMP stesso, ad esempio, diventa praticamente impossibile. Secondo me sarebbe una buona cosa centralizzare tutto in un'unica finestra: eviterebbe molta confusione, oltre al fastidioso caso in cui, per liberare un po’ di spazio sul desktop, a qualcuno venga la malsana idea, peraltro giustificabile, di  cliccare  sulla “X” di una finestra apparentemente inutile, come quella di un messaggio di avviso temporaneo,  per poi scoprire che tutto il lavoro fatto è andato perduto perché la “X” chiude tutto il programma…

Inoltre, a fronte di quella che può essere ritenuta una scelta implementativa, è stato riscontrato un bug: quando si sta editando una o più superfici, e si ha abilitata la finestra di “view surface”, bisogna stare molto attenti a chiudere tale finestra PRIMA di chiudere quella relativa all’editor: una chiusura in ordine diverso da quello previsto porta a comportamenti da parte del programma imprevedibili, che vanno dal “dimenticarsi” del pannello delle icone, lasciando visibile solo la finestra di render della superficie, al vero e proprio crash.

Un ultimo appunto su XCSurf: il pannello di rendering, soprattutto per quanto riguarda le curve o le superfici curve, non è fedele: in generale visualizza una curva “squadrata”, lasciando pensare a chi ci lavora di aver modellato una curva di grado troppo piccolo, sebbene in XCCurv tale curva fosse a posto, e inducendolo ad utilizzare il famigerato tasto “refinement” che, se da un lato mostra dei miglioramenti nella curva, crea problemi in futuro, quando questa verrà aperta con XCRayt.

E proprio questo difetto ci riconduce direttamente al tool successivo: infatti, la prima cosa con cui mi sono scontrato utilizzando il programma di rendering è stata proprio l’incompatibilità con alcune curve troppo raffinate, che ne provocano il crash, a volte definitivo, visto che anche il file .md ne risulta corrotto, in molti casi.

Il consiglio in questi casi è quello di caricare, una ad una, tutte le superfici, prima di iniziare a lavorare con i parametri di resa. Se questo approccio non garantisce l’immunità dai crash di XCRayt, almeno evita ore di lavoro perso.

Per il resto lavorare con XCRayt è risultato piuttosto agevole, tranne che per un comportamento le cui cause mi risultano ancora ignote: per qualche motivo, a volte la scena viene correttamente caricata, ma non appena si abilita il rendering, la finestra in cui verrà disegnata l’immagine si blocca, e senza motivo apparente, per cui risulta difficile capire cosa cambiare per poter procedere con il lavoro.

Ma questo è un problema solo iniziale: quando il programma parte e  la fase di resa viene terminata con successo, di norma lavorando sempre sullo stesso file e non aggiungendo altre superfici, il programma continua a funzionare correttamente fino alla fine.

Un ultimissimo appunto prima di concludere: La versione 3 di XCmodel risente molto della mancanza di XCBool, che avrebbe aiutato molto a realizzare, almeno nel mio caso, un oggetto più verosimile di quanto fatto: per quanto abbia provato ad utilizzare la versione 2 di questo tool, per qualche motivo i file prodotti non venivano caricati nella versione 3 di XCSurf, rendendo impossibile continuare a lavorare seguendo questo approccio: per questo motivo, parti della lampada che andavano “forate”, o modellate in maniera simile, semplicemente non sono state realizzate come andrebbe fatto.

In definitiva, XCModel è un buon tool didattico, perché ha il vantaggio di mostrare una diretta corrispondenza tra le cose viste a lezione ed il loro risvolto pratico, con la possibilità di agire di fino sui parametri delle curve, che in altri programmi non è possibile fare.

Risente tuttavia ancora di alcune lacune che, comunque si possono colmare con un lavoro non troppo impegnativo.