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?
Respuestas:
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.
fuente