Nozioni di base sulla fusione di animazioni


23

Supponiamo che io abbia un quadro con personaggi che possono correre e camminare e, ovviamente, stare fermi.

Ho ragione nel pensare che la fusione di animazioni è il processo di transizione graduale tra queste generando animazioni dinamiche in fase di esecuzione?

In tal caso, qual è la teoria di base su come funziona e come la implementerei?


1
Credo che sia solo un'interpolazione lineare tra ciascuna delle ossa dall'ultimo fotogramma di un'animazione al primo fotogramma dell'altra.
data

O interpolazione lineare con smoothstep, se si desidera una media ponderata (:
Gustavo Maciel,

@ Gustavo-Gtoknu puoi spiegare di più su quello che hai appena detto?
SirYakalot,

fai un'interpolazione lineare in alfa di entrambi i fotogrammi da fondere, sull'inverso dell'altro. entrambi in funzione del tempo. È possibile attenuare o utilizzare una media ponderata nell'interpolazione per ottenere un effetto diverso.
Gustavo Maciel,

Risposte:


18

La fusione dell'animazione del personaggio è più generale e può essere utilizzata per:

  • Calcolo delle transizioni fluide tra 2 clip;
  • Creazione di animazioni completamente nuove da quelle esistenti (potenzialmente più di 2 contemporaneamente);
  • Raggiungere comportamenti simili a IK;
  • eccetera.

L'idea di base è che per due scheletri identici con clip di animazione diverse, per ciascuna rotazione articolare, si calcolano i valori intermedi. Le clip di animazione sono rappresentate con rotazioni. Quindi l'interpolazione lineare non è quella che dovresti usare se vuoi risultati accurati (anche se stai usando gli angoli di Eulero). Puoi usare slerp per esempio ma esistono soluzioni più complesse.

Questo è un problema complesso con soluzioni complesse. Fondamentalmente, se hai due animazioni clip A e B:

  • Se A e B sono completamente diversi (salto di fusione e nuoto), allora è probabile che tu abbia risultati strani / divertenti;
  • Se A e B sono simili (due clip di animazione ambulanti), è necessario prima sincronizzarli per fonderli quando, ad esempio, entrambi i piedi sinistro sono a terra.
  • eccetera.

Se sei interessato, ti suggerisco di iniziare leggendo questo articolo in modo da poter capire meglio quali sono le difficoltà: http://graphics.cs.wisc.edu/Papers/2003/KG03/regCurves.pdf

Non è il più aggiornato, ma è facile da leggere.

Spero che aiuti. I migliori saluti.


5

Prima di tutto, suppongo che tu stia parlando di animazione scheletrica (specialmente grafica 3D) poiché la fusione di animazioni si applica praticamente solo all'animazione scheletrica. Se stai parlando di animazioni basate su sprite 2D (che non hai specificato nella domanda), puoi dimenticarti della fusione di animazioni.

Con quello fuori mano ...

Ho ragione nel pensare che la fusione di animazioni è il processo di transizione graduale tra queste generando animazioni dinamiche in fase di esecuzione?

Questo è praticamente il significato del termine, sì. Quella frase "generare animazioni dinamiche" è tuttavia un po 'fuorviante; che ricorda l'animazione procedurale e non è esattamente quello che stai facendo.

La "fusione di animazioni" si verifica quando si passa da una clip all'altra utilizzando un po 'di entrambe le animazioni con la ponderazione di una clip che sale mentre la ponderazione dell'altra clip scende. Funziona meglio con l'animazione scheletrica, in modo che la rotazione di ciascuna articolazione sia impostata su un punto medio tra l'animazione di quell'articolazione in due diverse clip di animazione, con la ponderazione di ciascuna clip che cambia nel tempo. Cioè, calcoleresti la rotazione di ogni giunto in qualcosa del tipo:

rotCombined = weightA*rotA + weightB*rotB

Ora, mentre la fusione di animazioni funziona meglio con l'animazione scheletrica, puoi anche farlo con l'animazione dei vertici (ad es. MD2). Questa è più una nota storica perché pochi motori di gioco moderni usano l'animazione dei vertici, ma è possibile impostare le posizioni dei vertici allo stesso modo, come una ponderazione tra la posizione del vertice in due diverse animazioni. Ciò potrebbe comportare interpolazioni dall'aspetto strano (ad es. Parti della mesh che collassano o si rovesciano verso l'interno) se le due animazioni fossero troppo diverse, mentre l'animazione scheletrica assicura che le varie parti della mesh rimangano intere.


Quando dici che non puoi farlo con la grafica 2D, intendi l'animazione basata sullo sprite? Sto cercando di scoprire come fondere alcune animazioni 2D create in mecanim in base alla posizione e alla rotazione delle singole parti del corpo, ma non vedo perché non sia possibile solo perché sono 2D.
mallardz,

Perché non c'è modo di generare nuovi frame in un'animazione sprite. Nell'animazione 3D, le singole immagini non vengono generate in anticipo.
jhocking

Capisco, ma l'animazione 2D non deve essere basata esclusivamente sulla modifica dell'intero sprite. Potresti comporre un oggetto da più sprite e animarne la rotazione e la posizione, ecc. Stavo cercando di scoprire come fare quando ho letto la tua risposta, e la tua prima riga mi ha reso triste :(! Ma per fortuna si scopre che è molto facile da fare in Unity e immagino non sia più difficile della fusione 3D per coloro che
accendono

1
ah sì, intendevo un'animazione basata su sprite, modificherò la mia risposta
prendendo in giro il
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.