Autore Topic: Muovere arto di un rigged model : real-time motion capture  (Letto 1578 volte)

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Muovere arto di un rigged model : real-time motion capture
« il: 12 Giugno 2014, 16:58:51 CEST »
0
Ciao,
devo far in maniera di importare in un applicazione android un modello rigged , e poi muoverlo in real time, una cosa del genere :
<a href="http://www.youtube.com/watch?v=NYT-nx533nM" target="_blank">http://www.youtube.com/watch?v=NYT-nx533nM</a>

I dati di posizione degli arti mi vengono forniti da una libreria già  creata, ora devo prendere i quaternioni e applicarli agli arti del mio modello rigged.

Il problema è che sto cercando quale linguaggio studiare adatto per far ciò :

inizialmente ho pensato ad unity3d , ma la libreria di ricezione della posizione è sviluppata in java per android, e non so se mi riuscirà facilmente passare i dati da android a unity e viceversa. DIciamo che ci sto provando :)

Più facile invece sarebbe l'uso di questo framework JPCT-AE : http://www.jpct.net/jpct-ae/index.html e ora stavo provando anche ad usare questo.

Avete qualche consiglio ?

Pensavo alle opengl-es, ma considerando che ho relativamente poco tempo per creare il progetto credo che sarebbe dura implementare tutto in OPEN-GL ES, o sbaglio ?
Le open-gl es sono in C ? quindi per usarle da android serve sfruttare l'ndk o sono scritte in java ?

Grazie dell'ascolto e scusate il disturbo :)
« Ultima modifica: 12 Giugno 2014, 17:03:13 CEST da aeroxr1 »

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Muovere arto di un rigged model : real-time motion capture
« Risposta #1 il: 12 Giugno 2014, 17:13:26 CEST »
0
Ciao, sto lavorando da veramente poco su opengl e android ma ti dico:

1- Opengles sono java, non hai bisogno di SDK
2- Unity mai provato, ma ci sarà un modo per comunicare con lib java o per fare il porting da java a unity
3- JPCT guardando al volo pare un'astrazione di opengl,quindi potrebbe semplificarti la vita, ma non lo conosco!

Facci sapere se e quando ci riesci, pare interessante la cosa!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Muovere arto di un rigged model : real-time motion capture
« Risposta #2 il: 12 Giugno 2014, 18:27:57 CEST »
0
Quel modello 3D è di Ogre3D, un game engine open source che permette di utilizzare i dati catturati dai sistemi di motion capture sui modelli 3D con un rig compatibile. Esiste un porting per Android, si programma in C++: http://www.ogre3d.org

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Re:Muovere arto di un rigged model : real-time motion capture
« Risposta #3 il: 12 Giugno 2014, 21:47:59 CEST »
0
Ciao, sto lavorando da veramente poco su opengl e android ma ti dico:

1- Opengles sono java, non hai bisogno di SDK
2- Unity mai provato, ma ci sarà un modo per comunicare con lib java o per fare il porting da java a unity
3- JPCT guardando al volo pare un'astrazione di opengl,quindi potrebbe semplificarti la vita, ma non lo conosco!

Facci sapere se e quando ci riesci, pare interessante la cosa!

Hai qualche guida o wiki da consigliarmi per le open gl es ? :)
Delle open gl es pure mi preoccupa che dovrò costruire tutto da zero ;)

Comunque appena farò un pò di passi avanti ve lo dirò :D

Quel modello 3D è di Ogre3D, un game engine open source che permette di utilizzare i dati catturati dai sistemi di motion capture sui modelli 3D con un rig compatibile. Esiste un porting per Android, si programma in C++: http://www.ogre3d.org

Inviato dal mio Nexus 5 utilizzando Tapatalk

Ha delle funzioni apposite per la gestione di dati catturati da motion capture ? Perchè se no credo che una volta che sono stati importati i dati dai sensori, dopo non è sufficiente che l'engine 3d gestisca i modelli rigged ?
Comunque usa un ndk modificato e vorrei evitarlo :D

 

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Muovere arto di un rigged model : real-time motion capture
« Risposta #4 il: 13 Giugno 2014, 01:45:41 CEST »
0
Non serve quotare tutto.

Ogre3D è un game engine e può utilizzare diverse librerie grafiche per la visualizzazione, come le OpenGL-ES sotto Android. Ha già il codice per la gestione dei modelli 3D con il rig, tra gli esempi ci sono dei programmi che fruttato questa capacità.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Muovere arto di un rigged model : real-time motion capture
« Risposta #5 il: 13 Giugno 2014, 09:43:36 CEST »
0
Hai qualche guida o wiki da consigliarmi per le open gl es ? :)
Delle open gl es pure mi preoccupa che dovrò costruire tutto da zero ;)
Qualunque strada tu prenda, anche sfruttare ogre o altro, ti ritroverai comunque ad usare OpenGL ES.
Il problema della gestione delle animazioni c'entra poco con OpenGL ES, visto che lo shader alla fine saranno si e no 20 righe di codice e probabilmente avrai una telecamera fissa.

Non usare OpenGL ES non serve a nulla visto che il 95% del lavoro in questo caso è codice java o c++... per il restante 5% scriversi un software renderer è impraticabile sia per prestazioni che per qualità.  :-)

Citazione
Ha delle funzioni apposite per la gestione di dati catturati da motion capture ? Perchè se no credo che una volta che sono stati importati i dati dai sensori, dopo non è sufficiente che l'engine 3d gestisca i modelli rigged ?
Comunque usa un ndk modificato e vorrei evitarlo :D
Premetto che l'ultima volta che ho scritto un sistema di animazione scheletrico con vertex blending erano 4-5 anni fa.. per giunta in direct3d. Potrei dire delle stupidaggini colossali e nel frattempo magari è cambiato tutto.

Tu parti da un modello statico con una coppia vertex buffer e index buffer (o più coppie o un vertex buffer e N index buffers) messo come l'uomo di leonardo, che ha/hanno un riferimento a N ossa per ogni indice con un peso associato.

Hai poi una lista di ossa in un array e un albero di ossa che forma fisicamente lo scheletro.

L'engine che gestisce i modelli rigged fondamentalmente parte dal nodo base dell'albero (di solito il torso) e calcola la matrice su quel nodo (i quaternioni servono solo per i dati temporanei dell'animazione per evitare il gimbal lock ma poi passi subito alle matrici), poi passa al figlio e calcola la matrice associata ASSOLUTA (cioè lavora sfruttando la trasformazione del padre, come in un comune scene graph).

Una volta parsato l'albero tu invii allo shader l'array delle trasformazioni delle ossa, così che tu possa andare a ricostruire la matrice vertice per vertice coi pesi. Questo lo fai nel vertex shader ma sono pochissime righe.

Se parliamo della stessa cosa in questo scenario l'unico dato dinamico è l'array delle trasformazioni delle ossa. Quindi se tutto il resto è gestito da motore a te "basta" associare i dati in ingresso del motion capture alle trasformazioni delle ossa. Il punto è che questa associazione dipende da modello a modello, non c'è scritto da nessuna parte che l'osso numero 10 sia sempre il braccio destro, dipende da come è costruito il modello 3d.

Ricapitolando:
- i dati in ingresso debbono essere associati a ossa/nodi specifici, dipendenti dal modello 3d
- se usi un motore già fatto è altamente probabile che il calcolo delle matrici venga fatto parsando l'albero/scheletro qindi i dati devono essere relativi al singolo osso. questo ha senso perchè in un sistema scheletrico muovere il palmo della mano si porta dietro le dita così come muovere il torso (che non a caso è spesso il nodo base) si porta dietro tutto il resto del corpo.

Sempre che si usi ancora questo sistema.  :-P

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Re:Muovere arto di un rigged model : real-time motion capture
« Risposta #6 il: 13 Giugno 2014, 15:08:18 CEST »
0
@undead sono a lavoro e quindi la tua risposta la leggo meglio stase con calma :)  comunqur di motori 3d per android ho trovato questo jpct-ae , unity con l'unico problema che non riesco a farlo funzionare in una "porzione" di activity , ci sono dietro ora a verificare la fattibilità , ogre 3d ma utilizza ndk modificata e un po mi fa paura per il supporto futuro e attuale , e poi non ho trovato altro .


Inviato dal mio Galaxy Nexus utilizzando Tapatalk


Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Muovere arto di un rigged model : real-time motion capture
« Risposta #7 il: 13 Giugno 2014, 15:38:56 CEST »
0
Qua trovi una libreria java per animazioni che sembra supportare scheletri, vertex blending, animation blending. Funziona con jpct ed è incluso un esempio android coi sorgenti.

Pare che ci sia tutto quello che ti serve.

Bones - Skeletal and Pose animations for jPCT

 :-)

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Muovere arto di un rigged model : real-time motion capture
« Risposta #8 il: 13 Giugno 2014, 18:23:25 CEST »
0
Ciao,

Ogre3D esiste da una vita... e se è ancora usato significa che c'è una community corposa a supportarlo. Quindi non mi preoccuparei per il supporto di Ogre3D.
Non sto dicendo che sia la soluzione migliore... ma non farti problemi di supporto.

Undead, la mia conoscenza di animazioni e skinning è ancora più datata della tua... ma non credo che si siano inventato qualcosa di molto diverso nel frattempo :)

Aggiungo che non usare direttamente OpenGL, ma basarti su un infrastuttura esistente, credo invece che ti possa dare vantaggi (premetto che non so cosa userei).
E' vero che il codice per trasformare quaternioni in matrici, comporre le matrici gerarchicamente e trasformare i vertici non è particolarmente complicato, ma dobbiamo considerare tutta la parte di caricamento del modello (mesh, ossa, texture, texture mapping, ecc...) da mettere in strutture di dati adeguate, su disco ed in memoria... devi farti un exporter da blender o chi per esso... e caricarti la struttura in memoria...

Tutto questo è già stato fatto un milione di volte... insomma la ruota c'è già, basta attaccarla al mozzo. ;)
Sì, prima bisogna trovarla... la ruota...

Ciao.

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Re:Muovere arto di un rigged model : real-time motion capture
« Risposta #9 il: 20 Agosto 2014, 20:40:30 CEST »
0
Poi ho deciso di usare jpct-ae+bones :)
Ora sto cercando un modello 3d già provvisto di rigged da poter convertire in formato ogre . E' più facile a dirsi che a farsi -.-"