Forma común de animar 'movimiento' para animaciones de ciclo de caminata

13

Acabo de publicar esto en los foros de artistas de Blender antes de darme cuenta de que probablemente obtendría una mejor respuesta de una audiencia más específica para el desarrollo del juego, así que ¡disculpas por la publicación cruzada! Es por las razones correctas :)

Soy un programador que intenta animar a un personaje que camina para un proyecto de juego, usando Ogre. Hice un ciclo de caminata muy simple en Blender y lo exporté a Ogre, y funciona muy bien. Bien, quiero decir que funciona, pero hay un terrible deslizamiento del pie. Esto se debe a que acabo de animar la caminata en el lugar (en el origen) en Blender y, por supuesto, no sé a qué "velocidad de la caminata" corresponde, así que cuando muevo al personaje en el juego, el movimiento no No necesariamente coincide con el movimiento de los pies en la animación.

Entonces mi pregunta es: ¿cuál es el enfoque normal para este tipo de cosas? En el trabajo usamos Maya, y los animadores animan un nodo especial 'moveTrans' que representa la "posición" del personaje (o hacen que el exportador lo genere a partir del movimiento del nodo raíz), entonces el juego puede leer esto para saber qué tan rápido la animación mueve al personaje. Entonces, en el archivo Maya, el personaje caminará hacia adelante durante un ciclo y este nodo adicional los seguirá con sus pies. No he visto nada como esto en tierra de código abierto, y ciertamente no hay ninguna disposición para eso en el script Ogre Exporter. ¿Qué hacen normalmente ustedes para esto?

Ben Hymers
fuente
1
Aquí hay una discusión con algunas explicaciones fantásticas del concepto: blog.wolfire.com/2011/08/…
Ben Hymers

Respuestas:

10

Hay dos formas de hacerlo: movimiento de raíz o "en código".

Con el movimiento raíz, básicamente tienes exactamente lo que estás sugiriendo con el nodo "moveTrans". Utiliza el movimiento de ese objeto para determinar qué tan rápido reproducir los ciclos de caminata. Es posible que pueda realizar una búsqueda inversa para darse cuenta de que si desea estar en la posición X, en qué marco debe estar. Pero la verdadera ventaja del movimiento raíz es que para obtener animaciones realmente realistas, debe tener en cuenta el hecho de que el movimiento no es un verdadero camino lineal. Las personas reales se mueven a una velocidad variable con el tiempo, o tal vez se mueven un poco hacia la izquierda o hacia la derecha, o lo que sea.

Mixamo hizo un buen ejemplo con el control de movimiento de raíz usando Unity. Hay un video de esto aquí: http://vimeo.com/12052874

Ahora el movimiento raíz tiene sus inconvenientes. Puede ser complicado con cosas como tratar de hacer que la animación "caminar" funcione en las escaleras (idealmente, tendría un animador separado para subir escaleras / escaleras y hacer todo el movimiento para eso también en la animación). Tampoco estoy realmente seguro de cómo IK realmente juega con él, si es que lo hace.

Ahora hacerlo "en código" es mucho más fácil desde el punto de vista de la programación. Lo que sugiero hacer es primero asegurarse de que todas sus unidades sean consistentes. Por ejemplo, 1 unidad en Maya y tu juego es de 1 metro. Luego, haces que tus artistas animen a un personaje a caminar (completo con movimiento hacia adelante). Úselo para calcular la velocidad de la animación y exporte la animación sin la velocidad de avance. Use eso para descubrir qué tan rápido reproducir la animación. Entonces, si la animación de caminar a una velocidad de 1x es de 5 m / s, y desea que el reproductor corra a 7 m / s, simplemente reproduzca a 7/5 = 1.4x de velocidad. Si su modelo se escala hacia arriba o hacia abajo, multiplique la velocidad de reproducción de la animación por el inverso de la escala. Un tipo de media altura tendrá que caminar el doble de rápido para moverse al mismo ritmo que un tipo de escala 1x.

Tétrada
fuente
No había visto la computadora Root Motion de Mixamo, ni la escuché llamar así, así que gracias por el enlace y la explicación. Básicamente, es como pensé, animarlo explícitamente o autogenerarlo, y en tiempo de compilación o en tiempo de ejecución. Creo que tendré que codificar esto yo mismo en el script del exportador. Una cosa de la que ahora estoy muy confundido es el movimiento que cambia en el transcurso de un ciclo: ¿cómo podría manejarlo desde el juego? "Moverse a 5 m / s" ahora significa algo más ... ¡Y los cambios de dirección serán una pesadilla para la IA! ¿Quizás es mejor usar el movimiento de envejecimiento?
Ben Hymers
Se quedaron sin personajes; Esperaré un poco antes de marcar esto como aceptado para obtener más opiniones. ¡Gracias por tu respuesta!
Ben Hymers
Para el movimiento raíz no controlas la velocidad del jugador directamente. En realidad, solo tiene control sobre la reproducción de la velocidad de animación y luego deja que la animación controle directamente el valor z hacia adelante. El ejemplo de 5 m / s que di fue para la forma tradicional de resolver el deslizamiento del pie, que consiste en tratar de igualar la velocidad de reproducción con la rapidez con la que se mueve y asumiendo una velocidad constante.
Tetrad
Como programador de juegos, eso suena como una pesadilla completa :) ¿Poner a los animadores en control de algo tan importante como la velocidad de movimiento de cualquier cosa animada? ¡No, gracias! Prefiero extraer la información para poder invertirla y establecer la velocidad de reproducción de la animación en función de la velocidad de movimiento, en lugar de al revés. Es por eso que el movimiento no lineal me confunde muchísimo, y tal vez esa sea una buena razón para hacerlo al revés.
Ben Hymers
Gah, maldiga a Stack Exchange por ingresar el comentario al intentar comenzar una nueva línea ... Estaba a punto de decir, incluso si dejas que la animación dirija el movimiento, seguirá siendo un problema, por ejemplo, para los personajes de AI. ¿Qué pasa si están tratando de llegar a un punto pero su animación de movimiento se tambalea de lado a lado (por ejemplo, es una animación de tambaleo borracho)? ¿Cómo pueden saber en qué dirección mirar?
Ben Hymers