Indice:

1. Obiettivo 2. Progettazione personaggio 3. Progettazione altri oggetti 4. Descrizione scena 5. Imamgini di resa

6. Animazione

7. Download

8. Problemi e bug
Grafica (C.d.S. Informatica)
2007/08
Relazione del Progetto di Grafica assegnato il 26/05/2008
Modellazione, resa realistica e animazione 3D
Sonic World
di Giuseppe De Marco


Immagine


1. Obiettivo

L'obiettivo del progetto è quello di realizzare, usando il pacchetto XCModel, una scena 3D fotorealistica in cui sia presente un personaggio tratto da un film d'animazione. Successivamente è prevista la realizzazione di una piccola animazione.

In questa relazione sarà descritta la realizzazione del personaggio 3D, degli oggetti della scena e infine dell'animazione.

Strumenti utilizzati

Tutti gli strumenti utilizzati sono parte del pacchetto "XCModel 4.0" che è così composto:

2. Progettazione personaggio

Il personaggio che si è scelto di realizzare è Sonic, la mascotte della softwarehouse nipponica SEGA e rivale storico di Mario, mascotte della Nintendo.
Sonic è stato anche protagonista di una serie animata di qualche anno fa e il suo modello 3D appare nei videogame per le console di ultima generazione e penultima generazione.

Il personaggio è composto da 45 superfici:

Tutte le superfici

Testa

La testa è stata la parte più difficile da realizzare, non tanto per la realizzazione in se, ma più che altro per la ricerca di un metodo che ne permettesse la modellazione.

Prima di tutto ho realizzato la seguente curva profilo con XCCurv:

Curva 2D profilo della testa

Successivamente ho importato la curva in XCSurf e l'ho modificata spostando alcuni control point sull'asse Y rendendo così la curva 3D.

Curva 2D profilo della testa

Poi ho creato una copia della curva, l'ho riflessa sull'asse X scalandola di -1 e l'ho traslata in modo da farle coincidere in un control point.

Curve 3D profilo della testa 1

Utilizzando la funzione "Inbetween" di XCSurf ho poi creato cinque curve inserite tra le due precedenti, che ho poi modificato traslando alcuni control point più indietro sull'asse Y e più su sull'asse Z.

Curve 3D profilo della testa 2

Infine tramite la tecnica dello Skinning ho generato la superficie alla quale ho poi ho poi spostato alcuni control point fino ad ottenere la forma desiderata.

Testa

Per chiudere i lati della testa ho generato due curve a partire dalle prime due create, che ho poi rimpicciolito (evidenziate in rosso in figura).

Curve 3D profilo della testa 3

Ho quindi creato la superficie tramite Skinning tra la curva grande e la curva corrispondente più piccola. Ho poi traslato alcuni control point per simulare l'arcata sopraccigliare.

Testa completa

Occhi

Ho generato gli occhi a partire da una curva 2D creata con XCCurv che ho poi importato in XCSurf.

Curva 2D degli occhi

Ho poi copiato la curva e la ho traslata più in basso. Infine ho generato una terza curva tramite Inbetween delle prime due.

Curve 3D degli occhi

Ho generato la superficie tramite Skinning.

Occhi

Infine ho creato le pupille a partire da due sfere presenti tra le superfici "Usual" di XCCurv che ho poi scalato in modo opportuno.

Pupille


Occhi e pupille

Orecchio

Anche l'orecchio è stato realizato tramite la tecnica dello Skinning.
A partire da una curva profilo ho generato una curva molto piccola che ho poi traslato in profondità. Successivamente ho creato altre curve con Inbetween.

curve 3D dell'orecchio

Ho poi generato la superficie.

Pupille

Infine ho creato la parte interna dell'orecchio a partire dalla curva più grande che ho ridotto e copiato in modo da creare due curve come mostrato in figura.

curve 3D della parte interna dell'orecchio

Ecco il risultato finale dell'orecchio.

Orecchio completo

Muso e naso

Il muso non è altro che una sfera opportunamente scalata.

Muso

Anche il naso è una sfera alla quale però oltre a scalarla ho anche traslato il control point di un'estremità per creare la forma appuntita caratteristica del naso di Sonic.

Naso


Muso e naso

Faccia al completo

Ecco come risulta la faccia dopo che tutte le superfici sono state assemblate:

Faccia

Busto, collo e pancia

Il busto e il collo sono un'unica superficie progettata con la tecnica di Skinning tra sei curve circolari chiuse.

Curve 3D del busto

Le due curve piccole in alto e in basso fanno si che la superficie sia chiusa.

Busto

La pancia è stata ottenuta tramite la funzione "Trim" applicata al busto prima descritto, in modo da estrarne la parte frontale, la pancia appunto.

Pancia

Braccio Destro

Per progettare il braccio destro ho usato la tecnica Skinning tra le seguenti curve circolari chiuse.

Curve 3D del braccio destro

In questo caso non ho chiuso la superficie perchè le parti aperte verranno poi coperte dal busto e dalla mano.
Il risultato è il seguente.

Braccio destro

Braccio Sinistro

Progettare il braccio sinistro è stato più complicato perchè volevo che fosse piegato. Per realizzarlo ho usato la tecnica "Tubular" che crea una superficie applicanto una curva profilo seguendo una direzione data da curva traccia. Come curva profilo ho utilizzato la stessa curva circolare chiusa del braccio destro e come curva traccia ho disegnato una curva che seguisse la curva del braccio che volevo realizzare.

Curve 3D del braccio destro

Infine dopo aver creato la superficie ho modellato i control point ruotandoli e traslandoli sia dalla modalità "Numeric",che interattivamente da "Interactive".
Il risultato è il seguente.

Braccio destro

Mani e dita

Ogniuna della mani è composta da sei superfici: il palmo e le cinque dita.
Per il palmo ho usato lo Skinning tra una serie curve chiuse. Una volta ottenuta la superficie base ho eseguito alcune operazioni di scala sugli assi fino ad ottenere l'effetto desiderato.

Palmo

Le dita sono di tre tipi: dito chiuso, dito aperto e dito pollice che si differenza dalle altre dita in quanto ha una falange in meno.
Sia quello aperto, che quello chiuso sono stati realizzati con Skinning posizionando in modo apportuno una serie di curve circolari chiuse, come si può notare nella figura seguente.

Dita

Per quanto riguarda le due dita pollici, le ho realizzate prendendo come base le altre dita alle quali ho ruotato, traslato e scalato interattivamente alcuni control point fino ad ottenere l'effetto desiderato.
Il pollice sinistro deriva dal dito chiuso, mentre quello destro deriva dal dito aperto.

Entrambi i pollici

Le mani una volta assemblate risultano essere le segnenti:

Entrambe le mani

Gambe

Le gambe sono state realizzate con Skinning di due curve circolari chiuse. Come per le braccia, anche in questo caso non è stato necessario chiudere le estremità in quanto verrano poi nascoste dal piede e dal busto.

Gamba

Calzini

I calzini collegano la gamba alla scarpa, sono stati realizzati con Skinning tra sette curve circolari chiuse:

Calzino

Scarpe (piedi)

Le scarpe sono composte dalla scarpa vera e propria e da una cinghia posta al centro.
La scarpa è stata modellata con Skinning di una serie di curve chiuse:

Scarpa

Per realizzare la cinghia ho riscontrato alcuni problemi. La mia idea iniziale era quella di trimmare la la scarpa allo stesso modo della pancia, ma ciò non è stato possibile in quanto non c'era modo di estrarre solo la parte che mi interessava, perciò ho dovuto realizzare le cinghie a mano creando uan superficie con Skinning tra due linee curve alla quale ho poi modellato i control point fino a farla aderire alla superficie della scarpa.

Laccio Scarpa e laccio

Aculei e coda

Sonic ha quattro coppie di aculei di cui tre sulla testa e una sulla schena e la coda che non è altro che un aculeo di dimensioni ridotte. Per realizzarli ho creato prima un aculeo base dritto tramite Skinning di una curva circolare chiusa e un punto, ottenuto scalando la curva precedente:

Aculeo base dritto

Poi per ogni aculeo ho traslato i control point di quello base dopo eventuali "Refinement" in modo da ottenere una sorta di inclinazione:

Un aculeo

Ecco come risultano gli aculei nel loro insieme attaccati al busto e alla testa:

Aculeo testa e busto

3. Progettazione altri oggetti

Per popolare la scena ho creato i seguenti oggetti:

Piani per il paesaggio

Per simulare il paesaggio esterno ho creato cinque piani disposti in modo da formare un cubo ai quali poi ho applicato delle texture denominate "Skybox", cioè una serie di texture derivanti da una singola immagine che si adattano alle faccie di un cubo. I piani sono dei semplici piani del menù Usual di XCSurf.

I cinque piani

Come si può notare dalla figura precedenti il piano sottostante del cubo ha alcuni control point traslati verso il basso. Questo mi ha permesso di simulare un canyon. Tuttavia nella scena non ho usato questo piano, ma due oggetti derivanti da un trim di questo. Ho infatti diviso l'ggetto i due parti: il piano bucato e il canyon, in modo da poter applicare due diverse texture:

Piano bucato e il canyon

Infine ho inserito un ulteriore piano per simulare una laghetto.

Piano che rappresenta l'acqua

Arco della Morte

Uno degli oggetti tipici che possiamo trovare nel mondo di Sonic è senz'altro l'Arco della Morte.
Per realizzarlo ho usato la tecnica Tubular usando un rettangolo come curva profilo e una linea curva incrociata come traccia. Successivamente ho poi modificato i control point per ottimizzare la superficie ottenuta.

Arco della morte

Cartello

Il cartello è composto da quattro superfici: il bastone, che è un semplice cilindro scalato opportunamente e la parte superiore che è un cubo schiacciato e trimmato in tre parti (le due facce e il contorno che le unisce) in modo da poter applicare tre texture diverse.

Cartello

Smeraldo del Chaos

Per realizzare lo smeraldo ho prima creato una curva chiusa ottagonale con XCCurv che ho poi importato in XCSurf. Successivamente fatto tre copie della curva scalandole e traslandole nel modo opportuno fino ad ottenere la forma desiderata. Infine ho creato la superficie utilizzando la tecnica "Extruding" in modo da creare una superficie spigolosa e non smussata.

Smeraldo del Chaos

Albero

L'albero è formato dal tronco e dalle foglie. Il tronco non è altro che un cilindro scalato, mentre le foglie sono state ottenute con Skinning tra una serie di curve:

Foglia

Ho traslato alcuni control point del tronco per ottenere una forma leggermente curva ed ho sistemato le foglie ruotandole e traslandole.

Albero

Anelli

L'ultimo oggetto progettato sono gli anelli. Ce ne sono di due tipi: anello piccolo e anello gigante.
Entrambi derivano dalla superficie Torus presente nel menù Usual di XCCurv alla quale ho poi modificato il raggio per ottenere i due tipi di anelli diversi:

Anello piccolo e anello gigante

4. Descrizione scena

Come scenza ho deciso di relizzare l'ambientazione tipica in cui in genere sonic è inserito: un paesaggio verdeggiante con acqua e gli elementi caratteristici del mondo di sonic.

Paesaggio

La scena è ambientata all'aperto. Come detto in precedenza il paesaggio è stato realizzato texturizzando un cubo senza una faccia formato da cinque piani con una serie di texture Skybox.
La faccia sottostante è bucata ed in corrispondenza del buco ho inserito una supericie che simuli un canyon. Sia il buco che il canyon sono stati ottenuti per trimming del piano che inizialmente era una sola superficie. Grazie alla divisione di suddetto piano in due parti ho potuto facilemnte texturizzare con due diverse texture il terreno e il canyon:

Cubo che rappresenta il paesaggio

Il piano sottostante è stato posto più in alto perchè sulle altre texture l'erba occupava metà della faccia, in questo modo invece l'lerba risulta essere più bassa e quindi è possibile vedere il cielo anche posizionando la telecamera vicino al terreno. Inoltre per evitare che si noti il cambio di texture tra due facce consecutive del cubo le ho leggermente avvicinato tra loro e scalate.

Poi ho provveduto a inserire un piano sopra il canyon in modo che simulasse un piccolo lago:

Cubo che rappresenta il paesaggio con l'acqua

Per realizzare l'acqua ho impostato un attibuto poco trasparente e con indice di riflessione alto in modo che potesse riflettere il cielo e l'ambiente circostante e contemporaneamente lasciasse intravedere il fondo.

Arco della Morte

L'arco è stato semplicemente texturizzato con una "Domain Texture" di pietra in modo che sembri di pietra.

Poi ho provveduto a inserire un piano sopra il canyon in modo che simulasse un piccolo lago:

Arco della Morte texturizzato

Cartello

Per il cartello ho usato tre texture diverse: una marmo per il bastone e il contorno che unisce le facce e due foto una per ciascuna faccia, in modo da poter visualizzare le due fotografie facendolo ruotare durante l'animazione:

Cartello con faccia di Sonic rivolta in avanti Cartello con faccia di Eggman rivolta in avanti

Smeraldi del Chaos

Ho inserito sette smeraldi ognuno di un colore diverso. Come attributi ho impostato una leggerissima trasparenza un fattore di riflessione medio e l'opportuno indice di rifrazione.

Smeraldi del chaos colorati

Alberi

Gli alberi sono stati colorati con due texture, una legno per il tronco e una verde con macchie nere per le foglie. Ne ho inseriti dieci sparsi per la scena.

Alberi texturizzati

Anelli

Per colorare gli anelli ho usato un attibuto nopn trasparente che riflettesse quello che c'è intorno e con il coefficiente di rifrazione dell'oro. Ho posizionato quasi tutti gli anelli intorno all'arco e alcuni vicino all'anello gigante. Gli anelli fluttuano nell'aria.

Anelli intorno all'arco della Morte Anello gigante e altri anelli

Sonic

Sonic ha diversi colori: la pelle blu è stata realizzata con una texture, per la pelle beige invece non ho applicato texture. L'attributo usato per le pupille è leggermente riflettente per riprodurre la riflessione che normalmente le pupille presentano. Anche il rosso delle scarpe ha un piccolissimo valore di riflessione.

Sonic colorato

5. Imamgini di resa

Ecco alcune immagini della scena:

Immagine di resa 1 Immagine di resa 2 Immagine di resa 3 Immagine di resa 4 Immagine di resa 5 Immagine di resa 6 Immagine di resa 7 Immagine di resa 8 Immagine di resa 9 Immagine di resa 10 Immagine di resa 11 Immagine di resa 12

6. Animazione

L'animazione è composta da 199 frame. Nella prima fase è inquadrato l'arco della morte con gli anelli intorno, successivamente la telecamera allontana lo zoom inquadrando la scena da lontano, poi punta su sonic che, quando il cartello dietro di lui si ferma sulla sua foto, ruota la mano sinistra. Alla fine scendono dal cielo gli smeraldi del chaos. Durante tutto l'arco dell'animazione gli anelli ruotano.
Per creare l'animazione ho scritto un ciclo che ad ogni iterazione: setta la telecamera nel modo opportuno, ruota gli anelli e il cartello e, a cirva metà dell'animazione, ruota la mano di sonic.
La lista degli oggetti della scena viene ricreata volta per volta in quando gli smeraldo compaiono solo alla fine e non c'è la possibilità di cancellarli.
Per implementare il movimento della telecamera ho scritto una funzione che permette di creare file .vw. Inoltre ho scritto una funziona che crea il file .ani con i riferimenti per i file .vw creati.
Ecco il gif dell'animazione:

Gif dell'animazione

7. Download

Scarica files...

8. Problemi e bug

Ho riscontrato i seguenti problemi:

XCSurf

Termina inaspettatamente.
Le copie delle superfici Usual ancora non salvate non tengono conto delle modifiche che si sono effettuate.
Se si utilizza Inbetween per creare curve non sempre è possibile utilizzare le curve create per creare nuove superfici a meno che non le si salva.
I nomi assegnati alle curve e alle superfici non vengono salvati e quindi sono validi solo per la sessione di lavoro corrente.
Lo zoom effettuato su un oggetto viene annullato nel momento in cui si esegue una qualsiasi operazione.
Non è possibile modificare più di una superficie per volta, sarebbe utile poter effettuare operazioni su un loro insieme.
Non è possibile effettuare più di un "Undo".
Sarebbe comodo poter salvare una superficie già salvata senza dover specificarne nuovamente il nome ed il percorso.
Sarebbe anche comodo poter salvare l'intero insieme delle superfici con un solo comando anzichè una per una.

XCRayt

Termina inaspettatamente.
In fase di progettazione dello script non è possibile eliminare oggetti da una lista.
Non è prevista una funzione per modificare la telecamera direttamente da script.
Si possono utilizzare come texture solo immagini in formato .hr.