Modo comune di animazione del "movimento" per le animazioni del ciclo a piedi


13

Ho appena pubblicato questo nei forum degli artisti di Blender prima di rendermi conto che probabilmente avrei ottenuto una risposta migliore da un pubblico più specifico per lo sviluppo del gioco, quindi mi scuso per il cross-post! È per le giuste ragioni :)

Sono un programmatore che cerca di animare un personaggio che cammina per un progetto di gioco, usando Ogre. Ho fatto un ciclo di camminate molto semplice in Blender ed esportato in Ogre, e suona bene. Bene, intendo dire che funziona, ma c'è un terribile scivolamento del piede. Questo perché ho appena animato la camminata sul posto (all'origine) in Blender, e ovviamente non so a quale "velocità di camminata" corrisponda, quindi quando muovo il personaggio in gioco il movimento non fa necessariamente coincidere con il movimento dei piedi nell'animazione.

Quindi la mia domanda è: qual è l'approccio normale per questo tipo di cose? Al lavoro usiamo Maya, e gli animatori animano uno speciale nodo 'moveTrans' che rappresenta la "posizione" del personaggio (o chiedono all'esportatore di generarlo per loro dal movimento del nodo principale), quindi il gioco può leggere questo per sapere con che velocità l'animazione muove il personaggio. Quindi nel file Maya, il personaggio camminerà in avanti per un ciclo e questo nodo aggiuntivo li seguirà con i piedi. Non ho mai visto nulla di simile in terra open-source, e certamente non è previsto per questo nella sceneggiatura di Ogre Exporter. Cosa fai normalmente per questo?


1
Ecco una discussione con alcune fantastiche spiegazioni del concetto: blog.wolfire.com/2011/08/…
Ben Hymers

Risposte:


10

Esistono due modi per farlo: il movimento di root o "nel codice".

Con root motion hai praticamente esattamente quello che stai suggerendo con il nodo "moveTrans". Si utilizza il movimento di quell'oggetto per determinare la velocità di riproduzione dei cicli di camminata. Potresti essere in grado di fare una sorta di ricerca inversa per capire che se vuoi essere nella posizione X in quale frame devi trovarti. Ma il vero vantaggio del movimento di root è che per ottenere animazioni veramente realistiche è necessario tenere conto del fatto che il movimento non è un vero percorso lineare. Le persone vere si muovono a una velocità variabile nel tempo, o forse stanno mescolando un po 'a destra e sinistra, o altro.

Mixamo ha fatto un buon esempio con il controllo del movimento di root usando Unity. C'è un video qui: http://vimeo.com/12052874

Ora il movimento di root ha i suoi svantaggi. Può essere complicato con cose come cercare di far funzionare l'animazione "walk" sulle scale (idealmente avresti un'animazione di scale / scale separata e fare tutto il movimento anche nell'animazione). Inoltre, non sono sicuro di come IK ci faccia davvero, se non del tutto.

Ora farlo "nel codice" è molto più semplice dal punto di vista della programmazione. Quello che suggerisco di fare è innanzitutto assicurarsi che tutte le tue unità siano coerenti. Ad esempio, 1 unità in Maya e il tuo gioco è di 1 metro. Quindi fai in modo che i tuoi artisti animino un personaggio che cammina (completo di movimento in avanti). Usalo per capire la velocità dell'animazione ed esportare l'animazione senza la velocità di avanzamento. Usalo per capire quanto velocemente riprodurre l'animazione. Pertanto, se l'animazione della camminata a una velocità pari a 1x è 5 m / s e si desidera far funzionare il lettore a 7 m / s, è sufficiente riprodurre a una velocità 7/5 = 1,4x. Se il modello viene ingrandito o ridotto, moltiplicare la velocità di riproduzione dell'animazione per l'inverso della scala. Un tizio di mezza altezza dovrà camminare due volte più veloce per muoversi alla stessa velocità di un ragazzo in scala 1x.


Non avevo visto il Root Motion Computer di Mixamo, né l'ho sentito chiamare così, quindi grazie per il link e la spiegazione! Quindi in pratica è come pensavo, animarlo esplicitamente o generarlo automaticamente, sia in fase di compilazione che in fase di esecuzione. Immagino che dovrò codificarlo da solo nello script dell'esportatore. Una cosa di cui sono ora molto confuso è il movimento che cambia nel corso di un ciclo: come mai lo guideresti dal gameplay? "Sposta a 5 m / s" ora significa qualcos'altro ... E i cambi di direzione saranno un incubo per l'IA! Forse è meglio usare il movimento agerage?
Ben Hymers,

È uscito dai personaggi; Aspetterò un po 'prima di contrassegnarlo come accettato per ottenere qualche opinione in più. Grazie per la tua risposta!
Ben Hymers,

Per il root motion non controlli direttamente la velocità del giocatore. In realtà hai solo il controllo della riproduzione della frequenza di animazione e poi lasci che l'animazione abbia il controllo diretto del valore z in avanti. L'esempio di 5 m / s che ho dato è stato per il modo tradizionale di risolvere lo scivolamento del piede, che è quello di provare ad abbinare la velocità di riproduzione con la velocità con cui ti stai muovendo e assumendo una velocità costante.
Tetrad,

Come programmatore di gameplay, sembra un vero incubo :) Mettere gli animatori in controllo di qualcosa di importante quanto la velocità di movimento di qualcosa di animato? No grazie! Preferisco di gran lunga estrarre le informazioni in modo da poterle invertire e impostare la velocità di riproduzione dell'animazione in base alla velocità di movimento, piuttosto che viceversa. Ecco perché il movimento non lineare mi confonde l'inferno, e forse questa è una buona ragione per farlo al contrario.
Ben Hymers,

Gah, maledici Stack Exchange per aver inserito il commento sul tentativo di iniziare una nuova riga ... Stavo per dire che, anche se lasci che l'animazione faccia muovere il movimento, sarà comunque un problema, ad esempio per i personaggi AI. E se stanno cercando di arrivare a un certo punto ma la loro animazione in movimento oscilla da un lato all'altro (diciamo, è un'animazione barcollante ubriaca)? Come possono sapere quale direzione affrontare?
Ben Hymers,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.