Ciao Orazio... mi fa piacere vederti così motivato... spero che col tempo manterrai la stessa motivazione! ho spiegato tanto a tanta gente e poi questi hanno mollato... mi raccomando: non farmi perdere tempo anche tu!
scherzo ovviamente... indipendentemente da tutto, se ti posso dire qualcosa di utile lo faccio più che volentieri...
premetto che anche io sono autodidatta, quindi so esattamente quello che provi... forse ho solo un po' di esperienza in più dato che sono più di trent'anni che macino codice ed ho vissuto in prima linea la storia di tutta l'informatica... detto questo vediamo di dire qualcosa di utile...
dalle domande che mi fai, prima di tutto devi avere ben chiara una cosa: il mondo 2D e il mondo 3D in comune hanno... niente...
non troverai nessun programma per modellare l'oggetto in 3D e disegnargli la grafica in 2D (in realtà esistono - ZBrush, 3DPaint, etc. - solo che costano un botto e non sono esattamente quello che intendi tu). Quindi per prima cosa ti servono ALMENO due programmi: uno per modellare in 3D, uno per creare le texture.
dico ALMENO 2 perchè generalmente se ne usano molti di più (uno specifico per gli shader, uno specifico per il rigging, uno per le animazioni, uno per le ambientazioni, uno per la riduzione dei poligoni, etc.)... ognuno specializzato nel suo campo... alcuni sono un po' più generici e cercano di coprire più campi (e lo fanno abbastanza bene, come Blender), altri sono meno generici ma più semplici da utilizzare (come Wings3D e Silo, che per me sono i modellatori migliori in assoluto... hanno una curva di apprendimento molto rapida e una volta che ci hai preso mano in poche ore di lavoro riesci a fare cose fantastiche!)
se il tuo scopo è quello di animare semplicemente oggetti 2D, le conoscenze che ti servono sono veramente di base... ogni sprite è semplicemente una texture applicata ad una superficie quadrata (pertanto costituita da 2 soli poligoni o da un quad), con illuminazione massima con sorgente all'infinito e perpendicolare alla scena (per essere visualizzata con i reali colori della texture). In questo caso le animazioni degli sprite sono dati semplicemente dal cambio della texture e l'unico software che ti serve è un buon programma di grafica (come ad esempio può essere The Gimp, senza andare a scomodare Photoshop)
se invece vuoi animare "oggetti" 3d (che in gergo si chiamano mesh), il discorso è mooooolto più vasto. intanto va detto che una qualsiasi mesh è un insieme di due o più poligni, congiunti tra loro, organizzati su piani diversi. ad esempio un cubo è una mesh costituita di 6 facce (12 o poligoni o 6 quad), dislocati su sei piani rispettivamente paralleli e perpendicolari tra di loro nelle 3 dimensioni. Un quad è un insieme di 2 poligoni che si trovano sullo stesso piano (in pratica il risultato è un quadrilatero).
un poligono è una superficie triangolare che ha una o due facce (quella rivolta verso di te che vedi e quella che non vedi alle sue spalle - verrebbe naturale dire che ha sempre due facce ma in realtà dipende da come imposti il motore 3d, nella sua proprietà chiamata Cull-mode... spesso viene rimossa la faccia opposta alla normale per evitare al processore calcoli inutili - se non la vedo perchè dovrei calcolarla? in realtà esistono casi in cui serve eccome), 3 lati (detti edge), 3 vertici (detti vertex), 1 normale (la "normale" è una linea immaginaria che parte dal centro del poligono e viaggia all'infinito verso il punto di osservazione e rappresenta la direzione della luce che colpirà il poligono).
il poligono è l'unità di misura della potenza di una scheda video accelerata 3D (o per meglio dire i milioni di poligoni al secondo). le cifre possono sembrare sbalorditive ma in realtà non lo sono... non lo sono mai... per rendere l'idea... diciamo che un processore video può elaborare 1 milione di poligoni al secondo. Se l'immagine fosse fissa non sarebbe male... ma noi vogliamo animare la scena... quindi siccome per l'occhio umano tutto quello che va al di sotto dei 25 fotogrammi (frame) al secondo "scatta", noi dobbiamo suddividere la nostra potenza per almeno 25... quindi il nostro milione di poligoni al secondo diventano 40000 poligoni per frame (che ti assicuro sono una inezia) da dividere ulteriormene per tutti gli oggetti della scena. se la nostra scena ha 100 oggetti ogni oggetto non potrà essere più grande di 400 poligoni, altrimenti la nostra animazione andrà a scatti. Fortunatamente per noi le schede video gestiscono diversi milioni di poligoni al secondo... sfortunatamente per noi sono sempre troppo pochi.
un modellatore (in gergo modeler 3d) è un programma che ti dà la possibilità di lavorare sui poligoni. La maggior parte dei modellatori lavora a partire da oggetti solidi (ad esempio wings3d ti da la possibilità di aggiungere un cubo, una sfera, un cilindro, etc.), consentendoti poi di tirare i vertici o di aggiungerne di nuovi sugli edge, pochi sono quelli che ti danno la possibilità di lavorare direttamente sui vertici e le superfici (come blender e silo) potendoli aggiungere nello spazio vuoto. I modellatori del secondo tipo ti danno una libertà maggiore ma ovviamente sono molto più complessi da utilizzare in quanto demandano a te aspetti come la chiusura del solido o la disposizione delle normali; mentre i modellatori del primo tipo sono un po' più rigidi ma sono più semplici da utilizzare e molti aspetti se li curano loro. Quelli del primo tipo diventano un incubo se gli fai importare una mesh esportata in maniera non corretta da un altro programma, ad esempio se si sono perse le informazioni sulle normali... rischi di dover gettar via tutto il lavoro svolto (ad esempio se esporti un obj da 3dstudio e lo carichi in blender o in wings3d non ti resta che piangere perchè 3dstudio esporta gli obj in un formato non standard al 100%).
pronta la mesh, iniziare lo skinning (da skin, pelle) ovvero devi applicargli sopra una (o più) texture. la texture è il "rivestimento" della mesh... immagina di voler rivestire un cuscino di una sedia. la texture è la stoffa con cui rivestirai il cuscino. mettiamo che la tua stoffa sia a quadrettoni ma che tu abbia una predilezione per i rombi... decidi di voler ruotare la stoffa per creare l'effetto rombo o di aggricciarla in alcuni punti per avere un effetto meno omogeneo... è tutto quello che puoi fare con le texture tramite la mappatura uv. l'UV mapping consiste nel comunicare al software che andrà ad applicare la texture come vogliamo applicarla. dato che X, Y, e Z sono già utilizzate per indicare gli assi 3d, le coordinate 2d delle texture utilizzano le lettere U e V per indicare le ascisse e le ordinate (ecco spiegato perchè si chiama UV mapping). la mappatura parte dall'unwrap (sviluppo) della mesh, ovvero si ottiene una versione della mesh aperta ed appiattita in 2d (come quando vuoi costruire un cubo con un unico pezzo di carta). a questo punto i poligoni della mesh vengono sovrapposti all'immagine della texture e si tirano i singoli vertici fino a farli combaciare con le zone della texture di interesse. terminata la mappatura, viene rieseguito il wrap (avvolgimento della mesh con la texture mediante la mappatura), e la mesh appare colorata. se in fase di mappatura un poligono viene rimpicciolito, ristretto o allargato, la porzione di immagine mappata su quel poligono subirà automaticamente la stessa sorte per adattarsi alla nuova dimensione (ed è per questo motivo che quando animi una mesh le immagini non se ne vanno per i fatti propri... perchè ogni poligono viene modificato e l'immagine gli va dietro).
oltre alle texture, lo skinning prevede anche la definizione degli shader. gli shader sono un'insieme di proprietà che influenzano in che modo la luce deve comportarsi con la superficie. ad esempio se un dato poligono è di plastica sarà meno riflettente di un poligono di metallo ma più riflettente di un poligono di stoffa... mentre un poligono di vetro lascerà passare un certo quantitativo di luce ed avrà una certa trasparenza.
l'insieme delle texture e degli shader prende il nome di materiale (material). un materiale possiede tutte le caratteristiche di visualizzazione di uno o più poligoni.
se si vuole animare una mesh, il passo successivo è quello di costruirgli uno scheletro. infatti le animazioni delle mesh vengono dette skeletal animations e seguono le regole della cinematica inversa. vediamo una cosa per volta... uno scheletro è costruito esattamente come il nostro: ci sono punti di giunzione (joint) ed ossa (bones). i joint sono i punti che collegano 2 o più bones e, al tempo stesso, li vincolano tra di loro (nello stesso modo in cui non puoi staccarti un dito dalla mano o ruotarlo all'indietro di 180 gradi). Wings3D si ferma alla modellazione e all'applicazione delle texture, mentre blender (ma anche 3dstudio, XSI, Zbrush, Poser, etc.), ad esempio, consente anche di definire gli shader e di definire, applicare ed animare uno scheletro. Definito lo scheletro, lo si può animare mediante la cinematica inversa (inverse kinematic - è un parolone che sta semplicemente ad indicare che metti le singole ossa nella posizione desiderata a determinati punti nel tempo ed il programma genera in automatico i passi intermedi in cui le ossa dovranno trovarsi istante per istante nell'animazione. es. voglio che in un secondo il mio omino alzi la gamba destra: al secondo 0 imposto la gamba giù, al secondo 1 imposto la gamba su... il programma genera tutti i passi intermedi per cui al secondo 0.5 - frame 12 - la gamba sarà a metà).
definito e animato lo scheletro occorre passare al rigging, operazione che consiste nell'associare i vertici della mesh ai singoli bones, in modo che l'animazione dello scheletro si ripercuota sulla mesh animandola. tutti i programmi che consentolo la definizione dello scheletro consentono anche il rig. nel corso degli anni il rigging si è evoluto mostruosamente arrivando a definire anche i livelli di potenza dei vertici (ovvero la distanza tra vertici appartenenti a bones diversi che incidono sul vertice in esame) riuscendo ad ottenere effetti come il rigonfiamento dei muscoli alla flessione di un arto.
come detto in precedenza, ci sono diverse cose che devi tenere in considerazione, una di queste è senz'altro il numero di poligoni. esistono dei software in giro che si occupano esclusivamente di ridurre il numero dei poligoni delle mesh, tentando quanto più possibile di mantenere inalterata la qualità (questo viene fatto interpolando poligoni contigui ricorsivamente fino ad ottenere il numero di poligoni richiesto). un ruolo fondamentale nella resa di una mesh con poligoni ridotti lo giocano le texture. spesso vengono disegnate texture grossolane, applicate a mesh con numero di poligoni immenso, proiettate luci sulle mesh, catturate le texture con i giochi di luce così creati e risalvate, ridotte le mesh a numero decente di poligoni e riapplicate le texture catturate con i giochi di luce... l'effetto è strabiliante (ma l'unico programma che conosco in grado di fare una cosa del genere è XSI della softimage. Considera che con XSI c'hanno fatto tutti i giochi di Assassin's creed).
altra cosa da tenere in considerazione è il lod (level of detail)... consiste nella possibilità di definire più mesh per lo stesso oggetto, con numero di poligoni sempre inferiore (appunto livello di dettaglio), da utilizzare a distanze diverse dal punto di osservazione... es. se sono vicino ad una mucca, è giusto che la veda ben definita, magari con 10000 poligoni... se mi sto allontanando dalla mucca magari mi bastano 1000 poligoni per vederla comunque bene... se sono lontano dalla mucca tale per cui essa mi appare sullo schermo delle dimensioni di 4 pixel per 3 a che mi servono 10000 poligoni? eppure il processore calcolerebbe (e calcola) 10000 poligoni anche in questo ultimo caso... quando magari di poligoni me ne bastano 2 con su disegnata l'icona di una mucca! è qui che entra in gioco il lod.
un altro ruolo fondamentale nella resa grafica lo gioca proprio il motore grafico. se esso è ingrado di effettuare in automatico lo smoothing della mesh è sicuramente da apprezzare. lo smoothing è un procedimento utilizzato prevalentemente nel rendering (rappresentazioni fotorealistiche statiche utilizzate come foto o frame per animazioni) delle scene e consiste nella possibilità di realizzare mesh non troppo definite (meno poligoni = + memoria, + velocità nel lavoro, - compilazioni), che verranno poi "smussate" dal motore grafico. un game engine con questa caratteristica è stato utilizzato dalla illusion soft (una software house che crea videogiochi a sfondo sessuale... ma non sono mai riuscito a capire molto perchè il sito è tutto in giapponese... però sono riuscito a carpire quale modeler utilizzano... si chiama metasequoia... ho anche provato ad utilizzarlo e non è male)... le loro mesh non sono molto definite ma la resa del motore fa la differenza (basta dare un occhio ad Artificial Girl 3).
tutte queste operazioni ti servono per animare un personaggio... ma per costruire una scena ti servono altri pezzi... ti servono le ambientazioni (i fondali e gli elementi decorativi) e le luci.
la realizzazione dei fondali e degli elementi decorativi segue le stesse indicazioni delle altre mesh se non per il fatto che le ambientazioni vanno create a risoluzione di poligoni veramente basse (per una casa può bastare anche poco più un cubo con le giuste texture). soprattutto per ambientazioni esterne, in cui il campo di vista può andare all'infinito (quindi avresti teoricamente infiniti poligoni da visualizzare), spesso si usa aggiungere l'effetto nebbia (fog) (in questo silent hill docet), previsto da qualsiasi motore 3d, che consente di non far elaborare tutti i poligoni che cadono oltre un certo piano posto perpendicolarmente al punto di vista e posto alla distanza desiderata. poco prima di tale piano la scena viene sfumata (da lì "effetto nebbia")
poi ci sono i trucchetti per simulare le condizioni atmosferiche, il passaggio tra giorno e notte, ... ma mi sa che ho già messo troppa carne al fuoco...
anche le luci meriterebbero un'altra trattazione a sè... io direi di iniziare da qui...
e poi ci sono tanti altri elementi come fisica, collisioni, audio, ... ma di questo già dovresti sapere qualcosa visto che un giochino l'hai già fatto... ed è pure carino...
ora non dirmi che ti è passata la voglia però, eh?
resto a disposizione per qualsiasi chiarimento tu voglia.