Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Animazione di mesh statiche tramite bones
Forum - C/C++ - Animazione di mesh statiche tramite bones

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
genni_96 (Normal User)
Pro


Messaggi: 108
Iscritto: 04/06/2010

Segnala al moderatore
Postato alle 22:49
Lunedì, 22/08/2011
Buon salve a tutti...
Avrei un'altra domanda da porre a chi è più esperto di me. Sto creando qualcosina con le OpenGl, ed avrei voglia di inserire delle animazioni. Ho scritto un loader per file .obj e relativi .mtl , creo i miei modelli con 3ds Max, li esporto in obj, li carico nel mio programma/gioco e ci faccio quello che voglio. Fin qui tutto bene, ma se volessi animarli??
Ho provato ad esportare un file per ogni frame, ma diventa troppo pesante, soprattutto con modelli abbastanza grandi, quindi l'unico modo per animarli e caricare oltre al modello anche una struttura di bones che descriva come deve essere animato l'oggetto. Ho provato a cercare su google, ma non ho trovato niente di soddisfacente, quindi mi affido a voi.
Avrei bisogno di qualche spunto su quale formato usare per salvare le bones da 3dsMax, come caricarle e come applicarle ai modelli statici (obj) che ho gia caricato. Naturalmente non vi chiedo di scrivermi il codice, altrimenti mi perderò la parte più divertente :), ma almeno consigliatemi da dove partire perchè non ne ho idea.
Ah, dimenticavo grazie in anticipo... :k:

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 23:54
Lunedì, 22/08/2011
il formato OBJ è vetusto e supporta soltanto l'animazione per keyframe. Al massimo puoi applicare un'interpolazione lineare tra due frame successivi per evitare di esportare troppo materiale, ma il rendimento fa generalmente schifo.

Per gestire animazioni scheletali devi usare un formato diverso, come quello di Half Life, che tra l'altro esporta in formato testuale quindi facilmente comprensibile e parsabile.

Sostanzialmente hai una matrice 4x4 per ogni bone, e ciascun triangolo fa riferimento ad un certo numero di bones (solitamente fino a 4) con i relativi pesi.

Per renderizzarlo puoi usare lo skinning in software oppure caricare bone (matrici) e vertici (con relativi pesi) direttamente sulla scheda video, visto che è da anni ormai che supportano lo skinning in hardware tramite vertex shaders.

Ultima modifica effettuata da TheKaneB il 22/08/2011 alle 23:55
PM Quote
Avatar
genni_96 (Normal User)
Pro


Messaggi: 108
Iscritto: 04/06/2010

Segnala al moderatore
Postato alle 6:58
Martedì, 23/08/2011
Vedo che sei esperto in ogni campo...
Comunque facendo una ricerca ho trovato questo
http://tfc.duke.free.fr/coding/mdl-specs-en.html
Pero stando a quanto dice la, l'animazione va fatta comunque frame_by_frame o con interpolazione.

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 9:28
Martedì, 23/08/2011
Primo, ti ho detto Half Life, non Quake :-D

Half Life usa una versione molto migliorata dell'idTech 2, che include proprio le animazioni scheletali. Le hanno implementate principalmente per le espressioni facciali (è stato uno dei primi giochi ad avere questa feature), ma si adatta a tutti i tipi di animazione di corpi organici e meccanici.

Secondo, la differenza è sostanziale:

Invece di avere N frame costituiti da 20.000 vertici (3 x 1), avrai N frame costituiti da 10-12 bones / matrici (4x4), risparmiando una quantità notevole di spazio ma anche di ampiezza di banda in memoria (perchè ci mette meno a caricare poche matrici piuttosto che un'intera mesh per frame).

Inoltre puoi scomporti le matrici in quaternioni e fare interpolazione su di essi. In questo modo puoi interpolare correttamente non solo le traslazioni e la scala, ma anche le rotazioni e le torsioni. Quindi un'animazione di un braccio che si apre può essere descritta da soli due frames, interpolati linearmente (o tramite un'altra funzione di interpolazione), che descrivono l'inizio e la fine dell'angolo "spazzato" dal bone relativo al braccio.

Con gli OBJ, invece, dal momento che puoi interpolare soltanto le traslazioni, tutti i movimenti rotatori non sono interpolabili correttamente, quindi ti servirebbero un numero considerevole di frames.

Un'altra cosa comoda è che usando le animazioni scheletali puoi anche creare animazioni procedurali tramite Inverse Kinematics. Questa però è una tecnica più complessa che coinvolge più che altro la simulazione della fisica che la grafica vera e propria.

PS: Non è che sono esperto in tutto... è che sviluppo videogiochi per lavoro :-D

Ultima modifica effettuata da TheKaneB il 23/08/2011 alle 9:40
PM Quote
Avatar
genni_96 (Normal User)
Pro


Messaggi: 108
Iscritto: 04/06/2010

Segnala al moderatore
Postato alle 14:17
Martedì, 23/08/2011
Sembra che sia adatto per quello che devo fare, un'ultima cosa, potresti consigliarmi qualche guida/libro/qualcosa da cui partire visto che so poco sull'argomento.
Ma i modelli di Half Life non erano mdl??

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 14:40
Martedì, 23/08/2011
l'estensione del file è sempre .mdl, ma contiene più cose rispetto al formato .mdl originale di Quake, tra cui anche lo scheletro...

Guarda qui... è un formato intermedio che viene poi esportato in MDL (variante Half Life), ma puoi anche usarlo come formato finale nel tuo programma, tanto non credo che ti serva un formato particolarmente ottimizzato, visto che si tratta solo di esperimenti.
http://developer.valvesoftware.com/wiki/Studiomdl
http://developer.valvesoftware.com/wiki/Studio_Model_Data

Di libri ce ne sono tonnellate, non saprei cosa consigliarti prima... appena torno a casa controllo un po' tra i miei libri e ti faccio un elenco :-D

Ultima modifica effettuata da TheKaneB il 23/08/2011 alle 14:46
PM Quote
Avatar
genni_96 (Normal User)
Pro


Messaggi: 108
Iscritto: 04/06/2010

Segnala al moderatore
Postato alle 14:44
Martedì, 23/08/2011
Grazie dell'aiuto:k:
Aspetterò che mi consigli qualche libro

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 14:47
Martedì, 23/08/2011
sorry avevo sbagliato link prima (ho linkato il tool di conversione, invece del formato vero e proprio)... aggiunto il link corretto :-)

PM Quote
Avatar
genni_96 (Normal User)
Pro


Messaggi: 108
Iscritto: 04/06/2010

Segnala al moderatore
Postato alle 15:01
Martedì, 23/08/2011
Non fa niente, tanto ho bisogno di esportare da Max

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo