Conceptos básicos de mezcla de animación

23

Digamos que tengo un marco con personajes que pueden correr y caminar y, por supuesto, quedarse quieto.

¿Estoy en lo cierto al pensar que la combinación de animaciones es el proceso de una transición suave entre estas al generar animaciones dinámicas en tiempo de ejecución?

Si es así, ¿cuál es la teoría básica de cómo funciona esto y cómo la implementaría?

Sir Yakalot
fuente
1
Creo que es solo una interpolación lineal entre cada uno de los huesos desde el último fotograma de una animación hasta el primer fotograma de la otra.
anónimamente el
O interpolación lineal con paso suave, si desea un promedio ponderado (:
Gustavo Maciel
@ Gustavo-Gtoknu, ¿puedes explicar más sobre lo que acabas de decir?
SirYakalot
haces una interpolación lineal en alfa de ambos cuadros para mezclar, en el inverso del otro. ambos en función del tiempo. Puede suavizar o usar un promedio ponderado en la interpolación para tener un efecto diferente.
Gustavo Maciel

Respuestas:

18

La combinación de animación de personajes es más general y se puede usar para:

  • Cálculo de transiciones suaves entre 2 clips;
  • Crear animaciones completamente nuevas a partir de las existentes (potencialmente más de 2 al mismo tiempo);
  • Lograr comportamientos similares a IK;
  • etc.

La idea básica es que para dos esqueletos idénticos con diferentes clips de animación, para cada rotación conjunta, se calculan valores intermedios. Los clips de animación se representan con rotaciones. Entonces, la interpolación lineal no es lo que debe usar si desea resultados precisos (incluso si usa ángulos de Euler). Puede usar slerp, por ejemplo, pero existen soluciones más complejas.

Este es un problema complejo con soluciones complejas. Básicamente, si tienes dos animaciones clips A y B:

  • Si A y B son completamente diferentes (combinación de salto y natación), entonces es probable que tenga resultados extraños / divertidos;
  • Si A y B son similares (dos clips de animación para caminar), entonces, primero debe sincronizarlos para mezclarlos cuando ambos pies izquierdos están en el suelo, por ejemplo.
  • etc.

Si está interesado, le sugiero que comience leyendo este artículo para que pueda comprender mejor cuáles son las dificultades: http://graphics.cs.wisc.edu/Papers/2003/KG03/regCurves.pdf

No es el más actualizado, pero es fácil de leer.

Espero que esto ayude. Atentamente.

Korchkidu
fuente
5

En primer lugar, supongo que está hablando de animación esquelética (especialmente gráficos en 3D), ya que la combinación de animación solo se aplica a la animación esquelética. Si está hablando de animaciones 2D basadas en sprites (no especificó en su pregunta), puede olvidarse de la combinación de animaciones.

Con eso fuera del camino ...

¿Estoy en lo cierto al pensar que la combinación de animaciones es el proceso de una transición suave entre estas al generar animaciones dinámicas en tiempo de ejecución?

Eso es más o menos lo que significa el término, sí. Sin embargo, esa frase "generar animaciones dinámicas" es un poco engañosa; eso trae a la mente la animación de procedimientos y eso no es exactamente lo que estás haciendo.

La "combinación de animaciones" es cuando haces la transición entre dos clips de animación usando un poco de ambas animaciones con la ponderación de un clip subiendo mientras la ponderación del otro clip baja. Esto funciona mejor con la animación esquelética, de modo que la rotación de cada articulación se establece en un punto medio entre la animación de esa articulación en dos clips de animación diferentes, y la ponderación de cada clip cambia con el tiempo. Es decir, calcularía la rotación de cada articulación de la siguiente manera:

rotCombined = weightA*rotA + weightB*rotB

Ahora, si bien la combinación de animación funciona mejor con la animación esquelética, también puede hacerlo con la animación de vértices (por ejemplo, MD2). Esto es más una nota histórica porque pocos motores de juegos modernos usan animación de vértices, pero puedes establecer las posiciones de vértices de la misma manera, como una ponderación entre la posición de vértice en dos animaciones diferentes. Esto podría dar lugar a algunas interpolaciones de aspecto extraño (por ejemplo, partes de la malla que colapsan o se vuelven del revés) si las dos animaciones eran demasiado diferentes, mientras que la animación esquelética asegura que las diversas partes de la malla permanezcan completas.

jhocking
fuente
Cuando dices que no puedes hacer esto con gráficos 2D, ¿te refieres a la animación basada en sprites? Estoy tratando de descubrir cómo combinar algunas animaciones 2D creadas en mecanim en función de la posición y rotación de partes individuales del cuerpo, pero no veo por qué no es posible solo porque son 2D.
mallardz
Porque no hay forma de generar nuevos cuadros en una animación de sprites. En la animación 3D, las imágenes individuales no se generan antes de tiempo.
jhocking
Lo entiendo, pero la animación 2D no tiene que basarse únicamente en cambiar todo el sprite. Podrías componer un objeto a partir de múltiples sprites y animar su rotación y posición, etc. Estaba tratando de averiguar cómo hacer esto cuando leí tu respuesta, y tu primera línea me entristeció :(! Pero afortunadamente resulta que es muy fácil de hacer en la Unidad y me imagino que no más difícil que la mezcla 3D para los que rodar sus propios motores.
mallardz
1
ah sí, me refería a la animación basada en
sprites