Progetto di Grafica: Modellazione e resa realistica con XCModel
Obiettivo e testo del progetto
Utilizzando i pacchetti XCCurv, XCSurf e XCRayt di XCmodel 4.0, realizzare un'esperienza di
modellazione e resa realistica. tenendo presente che un algoritmo di ray-tracing produce delle rese super-realistiche,
tipicamente di interni, si chiede di individuare un dipinto dalle caratteristiche opportune(e preferibilmente di autore noto)
per essere progettato in modellazione 3D.
Si realizzino i singoli modelli degli oggetti presenti nel dipinto facendo uso degli strumenti introdotti nel corso e a disposizione in XCSsurf;
si proceda, nella fase di modellazione, al loro assemblaggio e posizionamento.
Si realizzi poi lo scene-graph della scena mediante la libreria descriptor e script in C e si producano alcune immagini fotorealistiche;
in particolare si chiede una immagine in cui il punto di vista sia lo stesso rappresentato nel dipinto e altre
da differenti punti di vista dell'intera scena che dei suoi particolari.
Il dipinto che ho scelto di modellare in grafica 3d è un famoso quadro di
Renè Magritte dal titolo
"La condizione umana 2".
Le ragioni della mia scelta sono da ricondursi alle caratteristiche favorevoli alla modellazione
ma anche al particolare feeling che trovo con quest'opera.
La scena rappresenta un ambiente chiuso con luci non troppo forti provenienti sia dall'esterno che dall'interno della stanza.
La scena mostra pochi oggetti composti da molteplici superfici sufficientemente complesse.
Un goal che mi prefiggo è di ottenere la maggior somiglianza di materiali colori e luci al
fine di ottenere una scena quanto più somigliante all'originale.
cliccare nelle immagini per ingrandirle.
Progettazione e passi di svolgimento
Il problema è stato analizzato e svolto seguendo questi passi:
- 1. Individuazione degli oggetti da realizzare.
- 2. Suddivisione in sottocomponenti.
- 3. Scelta di modalità e tecniche per la realizzazione.
- 4. Creazione delle curve profilo attraverso XCCurv.
- 5. Realizzazione dei sottocmponenti , scalatura, rotazione e traslazione.
- 6. Intergazione dell'intera scena in XCSurf.
- 7. Test di correttezza e coerenza delle superfici.
- 8. Realizzazione script in C per lo scene-graph e utilizzo XCrayt.
- 9. Posizionamento e trasformazioni relative agli oggetti dello scene-graph
- 10.Creazione dei materiali e textures e loro applicazione.
- 11.Creazione delle luci e loro posizionamento.
- 12.Raytracing della scena e dei suoi particolari.
Modellazione degli oggetti
La scena da realizzare contiene alcune superfici curve di media difficoltà nella realizzazione.
Per tali superfici si è scelto prima di creare le curve relative al loro profilo attraverso XCCurv per poi caricarle in XCSurf ed applicare il pù delle volte la tecnica di
estrusione e di
skinning. Per creare il chiodo è stata invece ustata un
superficie di rotazione
Ia scena del dipinto e' composta anche da molte superfici piane. Per le superfici piane
la difficoltà e risieduta nella loro scalatura e nel posizionamento.
Le tre immagini precedenti si riferiscono alla progettazione di una delle due basi del
piedistallo. Attraverso
XCCurv
ho creato il profilo della base (per approssimazione di forma) e la linea di base che chiude il profilo.
Successivamente, attraverso
XCSurf ho caricato due profili e due linee di base.
Dopo aver distanziato le coppie di curve costanti sull'asse z, ho provveduto a fare l'estrusione su tutti e 4
i lati ottenendo 4 superfici che rappresentano la figura chiusa della base.
Per la modellazione dei "buchi" del piedistallo ho sentito molto la mancanza di uno strumento come XCBool. Ho risolto il problema creando le
curve relative ad un quadrato e ed un cerchio. Il cerchio l'ho creato come join di 4 archi a tre punti. In seguito attraverso
XCSurf ho caricato 2 cerchi e un quadrato scalandolo in dimensioni maggiori rispetto ai cerchi. Dopo aver distanziato correttamente le tre curve ho applicato l'estrusione ottenendo l'oggetto in nella figura sopra.
i "buchi" sono poi stati posizionati nel sostegno centrale. Tale sostegno è un
parallelepipedo trimmato della sua faccia frontale.
Il corretto posizionamento dei buchi è stato ottenuto attraverso gli spostamentoi
"cp to cp" e
"cp2 to cp2".
Per la realizzazione della parete con l'arcata ho utilizzato una tecnica molto simile a quella per la creazione della base del piedistallo.
Stesso discorso per la creazione del sostegno superiore di cui possiamo vedere le immagini qui sotto.
Il sostegno superiore è modellato da una curva di 3° grado con 19
Control Points.
I'eccessivo numero di
CP è dovuto ad un ulteriore un ciclo di
refine effettuato tramite
XCCurv,
per ottenere una curva più accurata.
Nelle immagini sottostanti viene visualizzata la creazione del
chiodo e del suo posizionamento nel sostegno superiore.
Per il chiodo ho creato una curva di
1° grado che rappresenta il suo profilo. Successivamente ho generato
la
superfice di rotazione che modella un chiodo, il risultato è pregevole nella sua semplicità e velocità.
Nelle immagini sottostanti viene visualizzata la sfera, la stanza e il piedistallo completo.
Ho creato la sfera nera con la superfice sferica di default di
XCSurf.
Le pareti della stanza sono state create trimmando semplicemente
due lati di un cubo e posizionando il tutto.
Il piedistallo completo è il risultato di tutte le corrette trasformazioni ai tutti i suoi numerosi componenti.
La costruzione dello
scene-graph è stata leggermente complicata. Ho riscontrato alcune difficoltà nello scegliere la giusta scalatura e posizionamento degli oggetti per rendere il tutto quanto più somigliante alla scena del dipinto.
Ho utilizzato ampiamente le tecniche di
texture mapping messe a disposizione dalla libreria
descriptor. Pavimenti, pareti e sfondo sono ricoperti da
texture estrapolate dall'immagine originale del dipinto. Il resto dei materiali è il risultato della valutazione dei colori dall'immagine originale a cui son seguiti numerosi tentativi di resa.
Il più grosso problema è stata la
scelta delle luci al fine di ottenere gli effetti di ombreggiatura presenti nel dipinto.
Questo task è stato risolto solo in parte con un risultato abbastanza soddisfacente.
Gli oggetti posizionati nella scena hanno grandezze maggiori dell'unità. Al fine di applicare le texure sulle superfci ho dovuto effetturare le trasformazioni opportune per posizionare l'oggetto all'interno dello
spazio delle texture. Tale operazione ha richiesto numerose prove soprattutto per la texturizzazione dello sfondo e della tela. Queste due texture hanno richiesto un allinemento e una scalatura meticolosa per ottenere l'effetto desiderato.
Nella resa ho utilizzato ,due luci puntiformi e una warn light. Il posizionamento delle luci è stato finalizzato all'ottenimento dell'effetto visibile nel dipinto e non alla realisticità fisica delle possibili luci presenti in un simile ambiente. Alla fine del lavoro non sono riuscito ad ottenere le stesse ombre del dipinto in quanto oltre all'oggettiva difficoltà nella scelta del posizionamento si è aggiunto il poco realismo delle luci disegnate dall'autore.
La prima delle due foto sottostanti è la versione con stanza chiusa e luci posizionate in modo realistico (script magritte.c). Nella seconda immagine le luci sono posizionate in modo meno realistico ma l'effetto finale si avvicina di più al dipinto originale (script magritteVer2.c). La seconda immagine è stata ottenuta in uno spazio aperto (togliendo le pareti della stanza). L'ultima fase del proogetto è stata quella di ottenere le immagnini di resa. Ho impostato il
raytracer al fine di ottenere immangini di alta qualità ma con
Ray-depth-level a 1, ottenendo le illustrazioni presenti in queste pagine.
Considerazioni finali e problemi riscontrati
A mio avviso
XCmodel pur essendo uno strumento accademico e volto alla didattica risulta essere preciso e adeguato agli scopi del progetto.
Alcuni dei problemi riscontrati nell'utilizzo di
XCmodel:
- Eccessiva difficoltà nello spostare manualmente singoli cp nella posizione desiderata. (XCSurf)
- Gestione dei file macchinosa e migliorabile.(XCModel)
- Poco intuitivo posizionamento degli oggetti nello spazio delle texture.(XCRayt)
Alla luce dei risultati ottenuti posso considerarmi soddisfatto della resa ottenuta. La scena rappresenta in maniera abbastanza aderente il dipinto.
Si tratta di una resa super-realistica, in un certo momento ho sentito la necessità di un filtro che aggiungesse "rumore" in alcuni punti dell'immagine.
Tale filtro permetterebbe di realizzare un'effetto di "tela dipinta a mano",ovviamente mi rendo conto che ciò esula dagli obiettivi di
XCmodel.