Cacharreando MakeHuman+Mixamo+Unity


Una tarea que tenía pendiente desde hace años era probar Mixamo, un sitio que algunos colegas insistían en recomendarme. Si no lo conoces, Mixamo (pertenece a Adobe) tiene un montón de animaciones gratis que puedes agregar a tus modelos con solo subirlos y hacer un retargeting. No es de lejos la opción óptima, pero si estás en un apuro, que es mi caso, puedes tirar de MakeHuman para crear personajes y Mixamo para animarlos.
¿Por qué no es la más óptima, y ni siquiera la mejor opción? Pues porque los modelos que genera MakeHuman tienen una cantidad de polígonos terrible. Se puede usar una topología para reducirlos, pero aún así son muchos y la calidad cae al nivel de principios de siglo. Es como si le machacaran la cara al personaje con una mandarria. La mejor opción siempre será tener un artista propio.
Volviendo al tema, aprovechando que ya tengo conexión abierta sin nadie que me vigile (salvo la vigilancia habitual que no puede quejarse si uso un VPN), me di a la tarea de ponerme al día en el tema. Primer intento, generar un modelo con MakeHuman y su esqueleto con rig facial. No lo intenten en casa, Mixamo no reconoció el esqueleto. Volví a la carga al día siguiente, esta vez con dos esqueletos diferentes. Mixamo esta vez sí reconoció el esqueleto Game Engine de MH. ¡Al fin! Eso ya es algo. Con gran facilidad encontré y apliqué algunas animaciones, que me llevé a casa para más experimentos diabólicos. Cada animación era un FBX aparte, y Mixamo incluso tiene la cortesía de generar un archivo FBX optimizado específicamente para Unity.
Supuse que podría compartir las animaciones entre varios modelos diferentes siempre y cuando usasen el mismo esqueleto. Pero como dijo Melendi: con la realidad te vas a dar de bruces, y hete aquí que no es posible a menos que actives el rig Humanoid para todos los modelos. Y eso me estropea el código que ensambla personajes a partir de mallas separadas.
En fin, que si usas la opción Humanoid en Mecanim, no deberías tener problemas para usar una única animación en varios personajes, con el ahorro de espacio que conlleva. En el foro de Unity alguien tuvo la amabilidad de decirme que en algún momento será posible hacer lo mismo con la variante Generic, pero no se sabe cuándo.
De la misma respuesta del foro saqué una posible solución: importar en Blender las animaciones y aplicarlas al modelo. Luego de pensar un poco y hacer más experimentos diabólicos, encontré que era posible importar el FBX de Mixamo y exportar la animación cono una Mocap. Esta captura de movimiento se puede importar en un modelo y hacer un retargeting de forma sencilla, pues los huesos se llaman igual y coinciden todos. Sin embargo, la importación deformó un poco el modelo: ahora en vez de un joven caminando parece un anciano encorvado. Amén de ese detalle, las animaciones no se exportaron bien al exportar el FBX final. Supuestamente cada una debía ser un Action diferente, pero solo quedó el último. Quizás aquí sea necesario un poco más de habilidad con Blender.
También aconsejo, si vas a probar esta variante, que no exportes la animación optimizada para Unity, porque rotará el modelo en Blender. Otra desventaja es que tendrás que importar y aplicar cada animación en cada modelo por separado, lo que supone más espacio en disco consumido.
Y hasta aquí mis resultados en esta semana, que considerando los poquísimos minutos de internet de que disponía, sobrecumplieron lo planificado. Queda de parte de ustedes sacar sus conclusiones, aunque creo que la combinación podría en ciertos casos sacarlos de un apuro. Así que ya saben.

Comentarios