Grafica (C.d.S. Informatica Specialistica)
2005/06
Relazione di Samuele Bartolucci del Progetto di Grafica assegnato il 30/05/2006
Modellazione e Resa realistica del quadro
"Elective Affinities" di Magritte
Scopo del Progetto
Lo scopo che si proponeva questo progetto era la modellazione e la resa di una scena tratta da un quadro tramite i pacchetti forniti programma di modellazione Xcmodel 4.0 (Xccurv, Xcsurf, Xmovie, Xcrayt).
Il ritratto da me modellato è del pittore Renè Magritte: Elective Affinities.
Descrizone Scena
Nel quadro viene rappresentato un uovo rinchiuso in una gabbia per uccelli.
La scelta di questo dipinto è dovuta principalmente al fatto che nel quadro
non erano presenti forme particolarmente complesse come volti o persone, oltretutto
l'algoritmo che viene utilizzato dal pacchetto Xcrayt è particolarmente adatto a rendere scene di interni.
La scena realizzata è composta da cinque 'oggetti principali' composti di 154 singoli oggetti:
- Una struttura in legno che regge la gabbia.
Questa struttura è composta da 21 oggetti suddivisi rispettivamente in 4 parti logiche.
-- L'appoggio della gabbia, composto da 6 oggetti: il piedistallo, i 3 cubi su cui appoggiano
le le colonne e i 2 ovali che connettono i cubi
-- Le due colonne della gabbia, composte da 6 oggetti l'una: 1 sfera , 2 oggetti che compongono il pomello su cui sta la sfera, 1 cubo, 1 colonna, 1 cilindo con cui termina la colonna.
-- L'arco della gabbia, composto da 3 oggetti: 2 cubi, 1 arco tangente ai cubi.
- Una gabbia.
Questa struttura è composta da 122 oggetti suddivisi rispettivamente in 6 macro parti composte in tutto da 12 parti logiche. I ferri portanti verticali e della cupola, i ferri verticali della gabbia e della cupola, il pavimento e gli agganci della gabbia.
-- I ferri portanti della gabbia: composti da 4 listelli e da 8 cilindri.
-- I ferri portanti della cupola: composti da 4 cilindri ricurvi.
-- I ferri verticali della gabbia: composti da 13 cilindri per la faccia frontale e quella di dietro, mentre le facce destra e sinistra sono composte da 12 cilindri.
-- I ferri della cupola, composti da 13 cilindri ricurvi per la faccia frontale e quella di dietro, mentre le facce destra e sinistra sono composte da 12 cilindri ricurvi. Tutti questi ferri terminano coincidendo con quelli verticali della gabbia.
-- Gli aggangi della gabbia: composti da 3 cilindri.
-- Il pavimento della gabbia: composti da 2 piani e da una piramide tronca.
- Un uovo.
Questo è un oggetto singolo.
- Una cornice.
Questa struttura è assente nel ritratto originale, è stata aggiunta per dare un tocco personale e per mettere a confronto il quadro da me modellato con quello reale. La cornice è composta da 6 oggetti: 4 listelli e 2 piani.
- Sei pareti.
Queste pareti sono state create per dare un'ambiente (scena) all'oggetto modellato. Sono composte da 6 piani.
La scena è illuminata da una sola fonte di luce di tipo puntiforme di colore bianco.
Realizzazione degli oggetti della scena
La la realizzazione degli oggetti che compongono la scena è avvenuta in tre fasi.
La prima è stata la realizzazione delle curve NURBS realizzate inizialmente mediante il tool XCcurv
e successivamente tramite Xcsurf. Queste curve rappresentano i profili o alcuni dei profili delle superfici da realizzare. La seconda fase è consistita nel creare le superfici a partire dalle curve precedentemente costruite. Per far questo si è utilizzato il pacchetto Xcsurf. La terza e ultima fase è consistita invece nel modellare a mano le superfici ottenute tramite Xcurv per ottenere le forme desiderate.
Vediamo ora le tecniche utilizzate per creare i modelli sopra elencati:
- Superfici create tramite rivoluzione: questi modelli sono stati realizzati utilizzando la funzione Revolution del tool XCsurf. Si parte da una curva di un profilo precedentemente creata e la si fa 'ruotare' attorno all' asse Z per ottenere una superfice.
Realizzare superfici di questo genere è molto semplice, la difficolta risulta tutta concentrata nell'ottenere un buon profilo dell'oggetto che si vuole creare partendo da una curva di massima e poi perfezionandola manualmente (come nel caso delle colonne).
Fanno parte di questa categoria: tutti gli oggetti delle colonne (fatta eccezione per le 2 sfere), gli ovali sottostanti la gabbia, il piedistallo della struttura in legno e l'uovo.
(1)

(2)

(3)

(4)
Fig. 1: Curva profilo per le superfici di rivoluzione
(1) Colonna, (2) Ovali, (3) Pomello colonna, (4) uovo.
(1)

(2)

(3)

(4)
Fig. 2: Superfici di rivoluzione.
(1) Colonna, (2) Ovali, (3) Pomello colonna, (4) uovo.
- Superfici per estrusione: la tecnica di extruding consiste nel realizzare una superficie fornendo una serie di curve che ne delineano la forma.
A livello del pacchetto Xcsurf realizzare una superficie per estrusione risulta molto semplice, basta indicare al programma quali curve devono concorrere a formare la superfice del nostro oggetto. Unica difficolta della tecnica e il fornire le curve nel giusto ordine. Un solo oggetto e stato creato tramite questa tecnica.
- Superfici tubolari: la tecnica tubular consiste nel realizzare prima una curva che rappresenti un 'percorso' (traccia) e poi nel realizzare un profilo che verra fatto scorrere lungo questo percorso creando un 'tubo' avente la sezione del profilo e la forma della curva. Va fatto notare che a dispetto di quanto sembri l'uso di questa tecnica tramite il pacchetto Xcsurf non è immediato come si crede. Si va in contro ad un paio di difficolta, primo la curva ed il profilo devono essere posizionate sui giusti piani per evitare di ottenere delle figure piatte, secondo l'oggetto ottenuto non sempre combacia perfettamente alla curva fornita.
In questo progetto i modelli realizzati mediante questa tecnica sono tutti i ferri 'cilindrici' della gabbia, gli agganci della gabbia e l'arco della struttura in legno.
Va fatto notare che essendo la gabbia quadrata i ferri della cupola (essendo tondeggiante) sono stati modellati tutti a mano uno a uno per farli combaciare con la forma della gabbia e con i ferri sottostanti. Anche l'arco in legno e stato modellato a mano per renderlo tangente ai cubi da cui parte.
(1)
(2) 
(3) 
Fig. 7: (1) Curva gancio della gabbia. (2) Curva arco del ponte. (3) Curve dei ferri della cupola.
(1) 
(2) 
(3) 
Fig. 8: (1) Gancio. (2) Arco del ponte. (3) Ferri della cupola.
- Superfici usaul: i restanti oggetti della scena come: sfere delle colonne, cubi della struttura in legno, rettangoli della gabbia e della cornice, le pareti della scena della gabbia e della cornice sono stati tutti modellati a mano partendo da superfici presenti in XCSurf, definite superfici usual (ovvero: cubi, sfere, piani, cilindi, ecc.).
Immagini di Resa
Download
Problemi, bug e suggerimenti
Nell'utilizzo dei pacchetti forniti con Xcmodel 4.0 per la realizzazione del progetto
ho riscontrato i seguenti bug/problemi ed ho pensato anche ai seguenti possibili miglioramenti:
- XCCurv: non sono stati riscontrati particolari problemi nell'uso del tool. Sarebbe comodo però avere la possibilita di selezionare più punti di controllo per poi poterli modificare tutti assieme, come avviene in XCsurf. Infine sarebbe comodo avere un metodo di movimento nella scena più pratico.
- XCSurf:
- Qualsiasi 'X' utilizzata per chiudere una finestra chiude tutto il programma
- il comando Copy fa crashare il programma;
- quando si preme sul pulsante Cancel dopo che si era deciso di aprire un oggetto, viene creato un oggetto vuoto o ne viene caricato lo stesso uno precedentemente usato;
- quando si carica un file .obj ogni volta si deve editare il file cancellando il path che precede l'oggetto (es: /xcmodel/sources/file.db va modificato in file.db)
- è difficile lavorare con oggetti molto complessi in quanto dopo una trentina circa di di file .db caricati Xcsurf crasha;
- se si esegue una translate cp to cp e si passa subito alla traslazione senza selezionare prima quale CP traslare Xcsurf crasha;
- il comando tubular a volte crea forme tubolari differenti da quelle della traccia data;
- il comando di swinging risulta difficile da utilizzare in quanto spesso si formano oggetti completamente differenti dal profilo e dalla curva selezionati;
-
- una volta Xcmodel crashando mi ha cancellato alcuni dei file che erano aperti;
- sarebbe comodo che al caricamento di un nuovo oggetto la prospettiva nella finestra 'control net' non cambi per evitare cosi di perdere riferimenti ad oggetti simmetrici costruiti per pezzi (esempio ferri davanti della gabbia o dietro);
- sarebbe comodo poter ripetere l'ultima operazione di modifica (es translate cp to cp) cliccando ad esempio il tasto destro del mouse o tramite un input da tastiera senza ogni volta dover riutilizzare il bottone translate (come nei programmi di CAD 2D);
- sarebbe comodo poter ripetere piu' di un solo UNDO alla volta;
- sarebbe comodo poter selezionare i punti attorno a cui ruotare l'oggetto in modo 'grafico' (ad esempio stile modifica dei CP) senza dover digirare le coordinate per ognuno dei due punti;
- sarebbe comodo poter salvare le descrizioni che vengono date agli oggetti senza perderle ogni volta che si chiudono e si ricaricano (in modo particolare aiuterebbe a dare i nomi giusti ai file quando si sta salvando una lista di .db ovvero un .obj);
- sarebbe comodo eliminare nella finestra 'control net' tutti i colori chiari tendenti al bianco come grigi chiari o rosa chiari in quanto spesso confondono su quale sia l'oggetto selezionato;
- sarebbe comodo poter selezionare piu' oggetto su cui eseguire la medesima operazione (stile Xcrayt) specie nel caso in cui uno debba fare modifiche ad un oggetto composto quali traslazioni, scalature o rotazioni;
- sarebbe comodo avere un menu nel quale decidere quale finestre aprire o chiudere in quanto spesso le piu utilizzate sono la 'control net' quella principale con la lista degli oggetti e quella per le modifiche numeriche, mentre le altre a volte impicciano;
- sarebbe molto comodo avere una 'memoria' nei menu, ovvero ad esempio quando si vuole salvare qualcosa oppure quando si vuole creare una superfice per estrusione senza dovere ogni volta scorrere tutto il menu per riselezionare un nuovo oggetto in fondo alla
lista;
- sarebbe comodo quando si sta creando o modificando un .obj poter dire ad xcsurf di risalvare automaticamente sui file precedenti;
- sarebbe comodo avere una operazione di traslazione assoluta;
- sarebbe comodo poter eseguire l'operazione di rivoluzione attorno ad un asse a scelta e non obbligatoriamente l'asse Z;
- XCrayt:
- se si esegue il Reload della scena senza averla salvata il programma crasha;
- quando si carica un file .obj ogni volta si deve editare il file cancellando il path che precede l'oggetto (es: /xcmodel/sources/file.db va modificato in file.db);
- gli errori del file descriptor a volte sono troppo generici come ad esempio quando dice che c'e' stato un errore in una read_nurbs senza specificare null'altro (riga, oggetto, etc.);
- sarebbe comodo non dover ogni volta salvare tutti i file uno a uno quando si ricarica una scena che fa uso degli stessi file, una soluzione potrebbe essere mettere i file in una cartella avente il nome della scena;
- sarebbe comodo poter eseguire le modifiche senza ogni volta dover salvare sul file originale;
- sarebbe molto comodo migliorare la navigazione all'interno della scena e permettere la navigazione senza dover per forza muovere la visuale della telecamera
- sarebbe comodo migliorare la modifica della posizione delle luci e della telecamera;
- sarebbe comodo un bottone stile 'fast rendering' che setti al minimo i dettagli in modo da avere una resa veloce senza dover attendere ogni volta minuti (o senza dover cancellare file o modificare e risettare le opzioni) per vedere l'effetto di una piccola mofica come spesso invece avviene ad esempio per i materiali o i color;i
XCModel in generale:
- Aiuterebbe a partire più velocemente una documentazione piu' approfondita e piu' dettagliata
- Sarebbe molto comodo non perdere il focus di un box di testo ogni qualvolta che vi si esce con il mouse
- Sarebbe comodo avere una documentazione che elenchi i problemi o i bug gia conosciuti per evitare di spendere i primi giorni a capire cosa 'non' fare
File descriptor:
- sarebbe utile poter impostare la posizione della telecamera e il punto di vista;