Grafica (C.d.S. Matematica)
Relazione del Progetto di Grafica
Modellazione e Resa realistica di un Maggiolino Volkswagen
di Marco Soldini


immagine copertina maggiolino


Obiettivo



L'obiettivo che mi sono posto con questo progetto è stato quello di realizzare la modellazione e la resa realistica del mitico Maggiolino Volkswagen. L'obiettivo iniziale in realtà era quello di realizzare Herbie, il "maggiolino matto", ma ho avuto delle difficoltà nell'applicazione delle texture che caratterizzano Herbie. Queste texture infatti andavano applicate a ritagli di parti composte da due o tre superfici e non ad una singola superficie. Inoltre non era possibile utilizzare tecniche di trimming dato che le superfici necessarie non si adattavano alla geometria delle superfici realizzate. Così le opzioni possibili erano 3:
  1. buttare via almeno la metà delle superfici realizzate e rifarle dal principio.
  2. creare nuove superfici ed adattare con estenuanti traslazioni punto per punto, i punti di controllo alle superfici già esistenti.
  3. cambiare leggermente gli obiettivi di partenza.
Ho così accantonato l'idea di realizzare Herbie e mi sono cimentato nella realizzazione di un maggiolino un po' più comune. Alcune idee nate per il primo progetto sono state comunque mantenute, come si potrà vedere nell'animazione realizzata.
Il modello è stato costruito con il pacchetto XCmodel_4.2bf. In particolare ho utilizzato i pacchetti XCcurv ed XCsurf per realizzare il modello 3D dell'auto e i pacchetti XCrayt, XCview e la libreria descriptor per la resa e l'animazione. Per modellare l'auto ho utilizzato un modellino Volkswagen Maggiolino 1200 De Luxe Export(1961) in scala 1:24 nella foto sottostante.


Nella resa realistica l'idea era quella di realizzare qualcosa che assomigliasse ai seguenti maggiolini. Per quanto riguarda il colore mi sono ispirato al maggiolino della foto di sinistra.



Progettazione Maggiolino


Nella modellazione geometrica ho trovato notevoli difficoltà a mantenere la sinuosità del maggiolino. Le superfici sono tutte tondeggianti e raccordarle tra di loro spesso è stato complicato. Le tecniche maggiormente usate sono state lo skinning e l'extruding, anche se quest'ultima è stata utilizzata solo per modellare superfici spigolose. Si è fatto anche uso massiccio di superfici tubolar e dello swinging per modellare le appendici metalliche e gli oggetti dell'abitacolo. In fase di modellazione il maggiolino è stato suddiviso in quattro tronconi:
  1. Parte anteriore
  2. Corpo centrale
  3. Parte posteriore
  4. Abitacolo




Parte Anteriore


Parte Anteriore - Cofano
La parte anteriore del maggiolino è stato una delle parti più complesse da realizzare, soprattutto per il rilievo presente sul cofano della macchina. E' stato ottenuto componendo più superfici. Le figure riportate qui sotto mostrano le superfici che compongono la parte laterale e la base del cofano e sono state ottenute utilizzando l'extruding. A queste sono poi sono state appoggiate altre superfici per realizzare il rilievo sul cofano.


Le curve che definiscono il rilievo sinistro sono quattro e sono state utilizzate per effettuare lo skinning. Poi sono state scalate per -1 rispetto allo 0 sull'asse delle x in maniera da creare le curve che definiscono il rilievo destro. Il maggiolino è infatti simmetrico ispetto al piano yz. Componendo queste 4 superfici si incomincia ad intravedere la forma della parte anteriore del maggiolino

>



Parte Anteriore - Parafango anteriore
Il parafango anteriore è un'altra superficie ottenuta per skinning di quattro curve 3d. Sono partito dalla curva che definiva in precedenza la parte laterale del cofano e con delle traslazioni di singoli punti di controllo l'ho fatta diventare la prima delle quattro curve per lo skinning. Successivamente con traslazioni di punti di controllo e scalature baricentriche ho ottenuto le altre tre curve.


Ecco il risultato dello skinning.


Infine il cofano e il parafango assemblati.




Parte Anteriore - Il racordo cofano-vetro
Questa superficie è stata creata in modo che fosse visibile la feritoia dell'attaccatura del cofano. Partendo da una curva 2d che delineasse il giusto profilo si sono create due curve su cui è stato fatto uso di extruding.



Parte Anteriore - I fanali anteriori Il fanale anteriore si compone di quattro parti: la parte di carrozzeria, la decorazione argentata, lo specchio parabolico e la gemma. Le curve basilari sono due: una curva traiettoria e una curva traccia con la quale per swinging è stata creata la gemma. Come curva traiettoria, non è stata realizzata una circonferenza esatta con l'utilizzo di NURBS per scelta. Dall'osservazione diretta, il fanale non sembrava avere forma circolare. Per ottenere poi lo specchio parabolico è stata copiata la gemma e sono state effettuate delle scalature baricentriche per avere la stessa superficie della gemma da con orientazione opposta.


Utilizzando poi la curva traiettoria opportunamente scalata e inclinata sono state generate due curve che vanno a formare per extruding la parte di fanale inglobato nella carrozzeria. Ancora con opportune sacalature è stata generata un'altra curva che per extruding insieme alla precedente ha generato la decorazione ad anello..


Nella figura di sinistra fanale assemblato. In questa immagine rimane nascosto lo specchio parabolico, ma questa superficie avrà un ruolo fondamentale in fase di resa nel rendere realistico il fanale. L'altro fanale è stato ottenuto scalando rispetto al piano yz e a fianco il tutto è stato assemblato.


Parte Anteriore - Paraurti Anteriore
Il paraurti è composto da quattro pezzi: la barra pricipale, la tubolare e due sostegni ad L che raccordano il paraurti alla carrozzeria. Le prime due superfici sono delle tubolari, mentre le altre due sono state ottenute mediante extruding.
Nella figura sottostante ci si riferisce alla barra principale. Vengono mostrate le curve 2d traiettoria e profilo, le stesse curve posizionate nello spazio 3d e due rappresentazioni della superficie ottenuta.


Nella figura successiva vengono invece mostrati i passi che hanno portato alla costruzione della tubolare.



E ora i passi che hanno portato alla costruzione del sostegno. Come al solito questo è stato poi dupliato e scalato per -1 rispetto al piano yz


Ecco il paraurti assemblato e l'aggiunta di questo alle parti fin ora mostrate.





Corpo Centrale


La carrozzeria del corpo centrale è quella che più di tutte si è evoluta dalla prma versione. Il tetto è composto da due superfici, il telaio esterno ottenuto per trimming dell'extruding di 4 curve e il tetto centrale ottenuto per skinning di 5 curve. Il tetto centrale è stato poi ripetutamente trimmato per ottenere altre parti del magggiolino.
Vediamo nelle seguenti figure, le curve piane di partenza, le 4 curve dell'extruding, le 5 curve dello skinning e tutte le curve insieme.


Passiamo ora a vedere le operazioni di trimming per ricavare il telaio esterno. Viene mostrata la superfice estrusa completa, quindi il rattangolo di dominio trimmato, la superficie risultato del trimming ed in ultimo la superficie ottenuta per skinning.


D'ora in poi tutte le successive operazioni hanno riguardato il tetto. Nelle prossime immagini viene mostrata una successione di superfici via via evolute. Si parte trimmando il finestrino anteriore, quindi quello posteriore, poi si va a lavorare sulla parte che sarà il cruscotto e andrà a far parte dell'abitacolo. Nell'ultima figura tutto quello fatto viene assemblato.

> > >

Ahimè il maggiolino è un auto molto tondeggiante e praticamente non possiede spigoli vivi. Pertanto ho dovuto lavorare ancora per creare dei raccordi tra quanto prodotto e le superfici che darranno a tutti gli effetti delle forme simili ai finestrini dell'originale. Ho creato delle curve che ho adattato punto per punto alla griglia di controllo del tetto (le griglie erano abbastanza fitte da ottenere effettivamente un buon raccordo) e quindi ho estruso tali curve.


Una volta ottenuta questa forma tondeggiante per i telai, i finestrini non sono stati un problema, dato che essendo superfici che sarrebero dovute essere collocate leggermente all'interno del telaio, non ho avuto necessità di raccordarle. > > >

Corpo Centrale - Portiere e fiancate
Il telaio principale di ogni portiera e di ogni fiancata posteriore è composto da un'unica superficie ottenuta per skinning di rispettivamente cinque e sei curve. Le curve sono dapprima state modellate in xcvurve e quindi rielaborate in xcsurf. In queste due superfici prodotte risiede un po' il tallone di achille di tutto il progetto. Ho avuto notevoli difficoltà nel gestire lo skinning di curve profilo con tanti curvamenti bruschi. Quando si utilizzza lo skinning e l'extruding è infatti necessario che i punti delle varie curve che si vanno ad elaborare siano abbastanza allineati. Ma curve con tre punti di controllo ravvicinati creano problemi se le successive curve con cui si fa skinnig o extruding li hanno più diradati. Si notano delle imperfezioni proprio per il fatto che in delle zone i punti non sono sempre ben allineati. Inotre volendo modellare superfici con uno spessore e non piatte, alcune imperfezioni sono state amplificate.


Andiamo quindi a ragguppare tutto quello che è stato prodotto fino ad ora.



Parte Posteriore



Parte Posteriore - Vano Motore
Il vano motore è composto da quattro parti: due parti laterali, il portellone e il rilievo sul portellone. Nella prima delle due figure sottostanti, vengono visualizate tutte le curve necessarie a produrre per extruding le superfici laterali e le curve necessarie a produrre per skinning il portellone. Nella seconda vengono visualizzate le superfici prodotte.


Passiamo al rilievo sul portellone. Partendo da alcune delle curve utilizzate in precedenza, queste sono state rielaborate in xcsurf fino ad ottenere le curve nella figura di sinistra. Nella figura accanto la relativa superficie prodotta.


Un'altra visualizzazione della superficie prodotta ed assemblaggio con le precedenti.


Parte Posteriore - Parafango e Paraurti Posteriori
Per quanto riguarda parafango e paraurti posteriori, sono state utilizzate le stesse curve utilizzate per parafango e paraurti anteriore, salvo qualche modifica per adattarle in maniera idonea a questa parte di macchina. Pertanto mi limiterò a mostrare solamente le superfici prodotte e l'assemblaggio.




Ruota
La ruota è stata ottenuta per rivoluzione. E' composta di tre pezzi: pneumatico, cerchione e maschera copri bulloni. Ognuna delle tre superfici è stata generata dalle curve profilo 2d nella prima figura.



Ecco assemblate tutte le superfici illustrate. Il maggiolino inizia a prendere notevolmente forma.



Abitacolo

Per quanto riguarda l'abitacolo, dopo averlo nuovamente mostrato in un immagine a dimensioni maggiori, andrò ad esaminare sedili, volante e cabio.


Abitacolo - Il Sedile Anteriore
Il sedile anteriore è compostro da tre parti: sedile e due sostegni tubolari. Il sedile è stato realizzato per extruding delle curve profilo mostrate a destra e i sostegni sono formati da superfici tubolar. I profili sono stati realizzati con xccurve e sono mostrati nella figura di sinistra. In basso sono visualizzate le superfici assemblate.


Abitacolo - Il Volante
Il volante è composto di cinque pezzi: la tubolare circolare, la tubolare semicircolare, il perno centrale, la barra, e il tappo del perno. Nella figura sinistra sono mostrate tutte le curve posizionate in modo da generare le parti desiderate. La tubolare circolare è stata create per rivoluzione di una sezione circolare. La barra e il semicerchio sono delle tubolar di cui sono riportati i profili in figura. Infine il perno è stato ottenuto per rivoluzione e trimmando è stato ricavato il tappo.


Abitacolo - Il Cambio
Il cambio è stato generato per rivoluzione. Successivamente per dare inclinazione, i punti di controllo della leva sono stati ruotati rispetto all'attaccatura della leva stessa.


Altre Superfici


Poiché non è possibile mostrare tutte le superfici prodotte, visto l'elevato numero di pezzi, mostrerò alcune immagini che daranno modo di avere un'idea di tutti quei piccoli pezzi che una volta assemblati al resto della macchina passano un po' in secondo piano. L'immagine seguente raccoglie tutte le parti che sono le decorazioni metalliche del maggiolino.

Andiamo a mostrare ora qualche superficie più in particolare.

Altre Superfici - Lo Stemma Volkswagen
Lo stemma è composto da tre superfici, un dischetto di matallo e le due gambe della W simbolo della casa madre. Nell'immagine di sinistra mostro le curve piane ottenute con xccurve e a destra il risultato ottenuto. Il dischetto è ottenuto per rivoluzione di una curva profilo, mentre le due parti della W sono delle superfici tubolar.


Altre Superfici - Lo Specchietto
Lo specchietto è composto da quattro superfici: la tubolare di sostegno, la cornice esterna dello specchio, una sfera che raccorda queste due e il vetro riflettente. Per la cornice è stato utilizzato lo swinging di una curva profilo intorno alla traiettoria che da la forma dello specchio. Il tubino di raccordo è una tubolar e il vetro è una superficie piana ottenuta per extruding a partire dalla traccia già usata per lo swinging. Le curve piane prodotte in xccurve sono nella prima figura a sinistra, mentre nelle altre viene visualizzato il risultato ottenuto.


Altre Superfici - Le Griglie Anteriori
Come si potrà osservare nelle immagini di resa, sono state realizzati anche i bocchettoni di presa d'aria. Due anteriori, sotto i fanali e uno posteriore sotto il finestrino. Queste superfici sono state ottenute per iterazione, trimmando ogni volta un rettangolino di dominio ed andando ad ottenere una superficie con delle feritoie partendo da una superficie piena. Andiamo a mostrare quanto fatto per le griglie anteriori.
Come mostrato dalle figure in basso, sono state create due curve in xccurve che, una volta portate in xcsurf sono state estruse ottenendo una superficie piana.

Quindi è stato effettuato ripetutamente il trimming fino ad ottenere un dominio ritagliato come nella figura di sinistra. Nella figura di destra viene mostrato l'ottimo risultato ottenuto. In fase di resa, alla superficie originale è stato assegnato un attributo nero in modo da fungere da sfondo, mentre alla superficie trimmata è stato assegnato il colore della carrozzeria. Lo stesso procedimento è stato utilizzato per la griglia posteriore, ma con un numero di trimming molto maggiore.



Progettazione Oggetti Scena



Prima di mostrare le superfici della scena dettagliatamente mostrerò delle immagini della scena nel suo complesso.


Strada, marciapiedi ed erba sono stati ottenute per estrusione di curve create in xccurve. Il semaforo è stato importato dal database di xcmodel, è stato leggermente modificato e quindi adattato alle misure dalla mia scena.

La Ghigliottina


La ghiliottina è composta da cinque parti: due architravi, un tetto, una scatola ed una lama all'interno della scatola.
La Ghigliottina - Travi

Le travi sono delle superfici tubolar, il cui profilo zoommato è riportato nella prima figura e la cui traccia è riportata nella seconda.


Nella figura di destra viene mostrato il risultato ottenuto per le travi. Inoltre facendo l'extruding delle curve traccia delle travi e trimmando si ottiene il tetto.


La Ghigliottina - Lama
La lama è una superficie estremamente semplice ottenuta per extruding partendo dalla curva profilo 2d nella prima figura.


Andiamo a mostrare il tutto assemblato.





Le Panchine

Ognuna dele due panchine è composta da due sostegni di ferro e da cinque assi di legno opportunamente posizionati.

Le Panchine - I Sostegni di ferro
I sostegni sono stati ottenuti per extruding. Partendo dai profili della prima figura, le curve sono state posizionate in xcsurf come si vede nella seconda figura. Nella terza il viene visualizzzato il risultato.



Le Panchine - Le Assi Di Legno
Le assi delle panchine sono state ottenute per swinging. Nella figura di sinistra, curva profilo e curva traiettoria. A destra il risultato ottenuto.


Le assi sono state duplicate, ruotate e traslate e il risultato finale è il seguente.



Le Panchine - Le Pietre Del Sentiero
La curva di partenza è quella realizzata in xccurve nella prima figura. Per extruding è stata generata la superficie della seconda figura. Infine ruotando le pietre, è stato creata la serie di tre pietre generatrice del sentiero.

Mostro infine l'assemlaggio di tutte le superfici.




Il Cartello Stradale


Questo oggetto è composto dal palo, che è un cilindro e dal cartello, che è stato ottenuto per swinging. Nella prima figura vengono mostrate le curve traccia e profilo. Nella seconda il risultato dello swinging e nella terza l'assemblaggio delle superfici.



Descrizone Scena



La scena è stata realizzzata grazie al piccolo script C maggiolino.c che richiama funzioni della libreria descriptor. Fondamentalmente consiste in una strada di periferia. Abbiamo un tratto di strada con un incrocio al centro con tanto di segnaletica orizzontale. Su un lato c'è un marciapiedi di mattonelle ed erba, un cartello di pericolo e un semaforo. Sull'altro lato, un prato con due panchine e un sentiero di pietre che conduce alle striscie pedonali. Sull'incrocio c'è una struttura ad archi in legno con un tettuccio. Mostro un'immagine di resa con vista da lontano per dare un'idea della scena.



Tulla la scena è appoggiata su un piano. Sono presenti solo due luci, una distanta light quasi verticale (come si può notare dalle ombre prodotte) e una warn light posizionata nel baricentro della superficie che costituisce il vetro rosso del semaforo. Le immagini di resa prodotte sono tutte delle 400 x 400, fatta eccezione per poche di dimensione 600 x 600. In tutte le immagini di resa è stato utilizzato ray depth level = 5. Infatti avendo diverse superfici con forti caratteristiche riflettenti volevo fossero evidenziate alcune riflessioni a catena.

Texture Usate
Per l'asfalto, per l'erba e per l'erba-pavimento sono state scelte dalle texture ripetitive, in modo da non formare quadrettature. E' stata usata la funzione di projection texture con ripetitive flag. Essendo queste superfici piane, la direzione scelta è stata quella dell'asse z.



Per quanto riguarda il legno delle travi e delle panchine e la pietra, le texture usate sono le seguenti.

Anche in questo caso è stata utilizzata la funzione di projection texture. Nel caso delle panchine e delle travi, gli oggetti sono stati fatti ruotare in modo che la texture si adattasse in modo uniforme.
Infine mostro le texture che sono state utilizzate senza repetitive flag. Ovvero quelle che riguardano il cartello, la targa e la segnaletica orizzontale.


In questi casi per adattare le texture agli oggetti sono state necessarie solo operazioni di scalatura.

Immagini di Resa


Mostriamo qualche immagine degli oggetti della scena


La panchina vista dall'alto



Vista frontale della panchina. Si nota anche lo spessore delle pietre.



Vista sulle due panchine e sul sentierino di pietre.



Vista sull'incrocio. Il cartello di pericolo è ben visibile e il rosso del semaforo acceso...



Spostiamo l'attenziore sulla protagonista principale...


Il fianco destro del maggiolino



Il fianco sinistro del maggiolino



Parte anteriore del maggiolino



Parte posteriore del maggiolino



Il maggiolino dall'alto



Il maggiolino al semaforo. Vista da lontano e zoom



Zoom sul cofano



Zoom sul portellone posteriore



L'abitacolo del maggiolino



Lo stemma Volkswagen



Altro zoom sul cofano



Il semaforo punitivo ha colpito...




Animazione - Un Semaforo Poco Permissivo


L'idea per l'animazione ha radici nella prima idea di progetto, ovvero Herbie il maggiolino tutto matto. Il progetto era stato fin dall'inizio pensato per far in modo che Herbie si dividesse a metà, come nel finale di uno dei film Walt Disney. Per cui in fase di progettazione si è sempre tenuto conto di tenere separate la parte anteriore del maggiolino e la parte posteriore e ogni qualvolta venivano costruite superfici uniche, queste venivano trimmate in modo da mantenere due tronconi separati. Come già spiegato, il progetto ha preso forma diversa, ma non ho voluto buttare via quanto già fatto. Così ho pensato ad una scena in cui viene presentato il primo prototipo di semaforo punitivo: un semaforo poco compassionevole, che punisce i pirati della strada che passano con il rosso tagliandogli la macchina a metà....

L'animazione è stata prodotta sviluppando un picolo codice in linguaggio C, maggiolino_anim.c che richiama le funzioni della libreria descriptor. L'animanzione è composta da 175 frame di cui 87 generati da un'unica visuale tramite lo script. Io poi ho creato un file .ani che richiamava 175 frame sfruttando gli stessi 87 file .md due volte, una utilizzando un file .vw ed uno .arg e quindi utilizzando un altro file .vw ed un altro file .arg. Sostanzialmente la stessa scena è stata inquadrata da due visuali diverse ed il tutto è stato unito in un'unica animazione. Nella prima metà si osserva il maggiolino da una visuale che permette di vedere tutti gli oggetti della scena, comprsi cartello di pericolo e semaforo. Nella seconda metà si ha una sorta di replay che permette di vedere l'impatto della lama da posizione ravvicinata.

La particolarità del codice è che ho creato tre liste di oggetti: maggiolino, maggiolino_ant e maggiolino_post, che raggruppano la maggior parte dei pezzi rispettivamente del maggiolino completo, della parte anteriore del maggiolino e della parte posteriore del maggiolino. Sono state escluse dalle liste le parti che dovevano essere ruotate, come pneumatici, cerchioni e copri bulloni. Quindi sono state create due scene: In questo modo fino al frame 67 ho utilizzato la scene1. Dal frame 68 fino alla fine ho utilizzato la scene2 e ho fatto muovere le due parti del maggiolino indipendentemente. Uno dei vantaggi di usare queste liste è che il codice è venuto molto compatto e sono riuscito a gestire tutto con poche linee di programma. Tutti i frame sono di dimensione 300 x 300 ed è stato imposstato ray depth = 5.

Problemi e bug


xccurve
Il programma funziona bene e non va mai in crash. L'unica problematica comune anche a xcsurf, xcrayt e xc view è la seguente: quando si clicca su load, se precedentemente era già aperta la finestra di caricamento, il programma si blocca. Ovvero muovendo le finestrine di caricamento tenendo premuto il tasto sinistro del mouse, tutta la finestra principale di xccurve/xcsurf/xcrayt/xcview si dipinge di grigio. Inoltre non è più possibile chiudere il programma e le schermate grigie rimangono fino a riavvio del computer.

Segnalo alcune scomodità:

xcsurf
Xcsurf da tantissimi problemi. Va in crash in continuazione e la cosa peggiore è che non si riesce a capire perchè o facendo cosa. Va in crash del tutto inaspettatamente. Mi sembra di aver notato una certa frequenza di crash nei seguenti casi: In ogni caso i crash sembrano collegati all'utilizzo del menu di modifica interattivo e quando succede compare da shell la seguente schermata:
"X Error of failed request: BadWindow (invalid Window parameter)
Major opcode of failed request: 12 (X_ConfigureWindow)
Resource id in failed request: 0x18b4e548
Serial number of failed request: 55765
Current serial number in output stream: 55765"


Ci sono problematiche anche nei seguenti casi:
xcrayt
Il programma è stabile e non da problemi. Segnalo alcune scomodità:


Torna su