MakeHuma+Mixamo+Unity3D solución completa


He tenido un mes (más o menos) bastante ocupado tratando de pulir el asunto de usar Mixamo. Cuando pensé que todo estaba bien amarrado, me encontré con unos problemas raros, cuya solución resultó ser más sencilla d elo que esperaba.
El caso es que las animaciones creadas por Mixamo me rotaban el personaje 90 grados. También en algunos casos la geometría simplemente saltaba o se bamboleaba, pero sin ejecutar una animación como tal. Luego de intentarlo de todas las formas posibles, achacándole el problema a que los modelos estaban divididos, luego a que los modelos no contenían información de animación, y otras cosas que ni recuerdo ahora, casi me doy por vencido.
En concreto, la solución que dejé para el final fue la que salvó la situación. Simplemente usé el procedimiento habitual que uso para ensamblar el modelo del personaje a partir de varias secciones separadas. Al hacerlo, la animación funcionó correctamente, sin rotaciones ni glitches raros. De paso, obtuve el efecto secundario de que puedo usar una misma animación para todos los modelos que tengan el mismo esqueleto. O sea, que es como un retargeting a lo bestia. Así, tienes un Animation Controller único para controlarlos a todos.
Para resumir, el procedimiento consiste en subir el modelo a Mixamo y obtener las animaciones. Podría ser necesario generar animaciones distintas para femeninos y masculinos (hombres y mujeres no caminan igual), pero eso ya es a gusto del consumidor. Recuerden exportar la animación para Unity y seleccionar Without Skin. Una vez obtenidas las animaciones necesarias, basta con seguir el método habitual de copiar la información de los huesos del esqueleto a las diferentes secciones del cuerpo (no abundaré en el tema aquí) y ya está.
En conclusión, ahora puedo generar todos los modelos necesarios para un prototipo en MakeHuman y con unas pocas animaciones de Mixamo hacer pruebas mínimas de sistemas. No es lo ideal, pero es mejor que no tener nada.

Avances y contratiempos (más de los últimos)

En esta época de conectividad desenfrenada, resulta que la mayoría de las herramientas de Mcrosoft están severamente limitadas si no tienes conexión. Estoy detenido por grave problema de que el Visual Studio Community necesita activarse a los 30 días de uso, algo que no recordaba. No debí pecar de honrado y haber pedido la versión Enterprise, de esa abundan los números de serie en internet y se puede activar offline. Tampoco he logrado que Visual Studio Code funcione 100% bien, con autocompletado, por lo mismo: algún paquete se me ha quedado sin instalar. Cosa que no sucedería si tuviese conexión a la red de redes.
Como les decía, más contratiempos que avances, aunque de estos últimos algo hay. Lo lamentable es que esta política se está infiltrando en Unity poco a poco y cada vez hay más cosas que dependen de los servidores de Unity o que simplemente hay que ir a buscar a otro lado en vez de venir de fábrica.
Pero a pesar de las dificultades siempre algo se logra, porque acá estamos habituados a que las dificultades sobren.
En fin, que sigo estudiando pequeñas cositas, nada serio. Una cosa ha llevado a la otra y me he visto obligado a aprender dos o tres cosas de Blender, aunque nada de modelar, claro. Tal y como decía aprincipios de año, no sé en qué momento todas las funcionalidades de Unity con las que nos han impresionados dejarán de ser experimentales. Creo que han mordido más de la cuenta y algunas de esas cosas seguirán siendo experimentales en la 2018.3, como me esperaba.
Ni siquiera vale la pena iniciar un proyecto si piensas migrar más tarde a una versión superior, o al menos yo tengo serios reparos en hacerlo. Muchas cosas pueden cambiar y romperlo todo. Es por eso que solo estoy haciendo pruebas aisladas, nada de trabajar en serio en desarrollar un prototipo jugable. Ya veremos cuando la 2018.3 alcance la version .1 o .2.

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.

Al fin, Visual Studio 2017

Saltando las limitaciones y bloqueos, al fin me llegó el Visual Studio 2017, directo desde USA y recién descargado. A pesar de un insignificante error cuando iba por el 99% funciona muy bien, al menos para mis propósitos. Así que ya estoy de vuelta.
Luego de tanto tiempo sin hacer nada es difícil arrancar otra vez, amén de que ahora el problema es otro. O el mismo, pero con otra cosa. En fin, que los nuevos packages, del Package Manager, dan problemas si no hay conexión a internet. Y la conexión desde Cuba no sirve, porque nunca llega a conectarse. Mientras no resuelva este problema, me están vedadas algunas funcionalidades nuevas como el ECS, que pretendía cacharrear un poquito porque dicen que es lo mejor que se ha inventado desde el sexo oral.
Pero bueno, al desnudo cualqueir ropa le sirve. Seguiré a la antigua por el momento.

Despertar será una trilogía

A insistencia de varios lectores, he decidido escribir una tercera parte de la saga Despertar. Aunque en realidad, parece que estoy escribiendo para tres o cuatro amigos, que son los únicos interesados en leerme, pero esos tres o cuatro han sido muy enfáticos en a necesidad de resolver muchos cabos sueltos que quedaron en el segundo libro. El cual, debo decir, entrará en proceso de retoque pronto, en cuanto acabe la novela que estoy escribiendo ahora.
En realidad, tenía pensado tomarme unas vacaciones de la escritura y dedicarme a programar un poco, hobby que tengo abandonado debido a ciertas dificultades de las que hablaré luego. Tampoco tengo un plan concreto en la cabeza acerca de Despertar 3, salvo ideas sueltas. En algún momento a finales de año armaré esas ideas y consultaré con mi nueva editora personal, para entonces empezar a trabajar.
La otra buena noticia, o quizás la única, o quizás tampoco sea buena si no te gustan mis libros, es precisamente esa. Para evitar que vuelva a salir una novela sin una adecuada revisión, he convencido a una amiga para que las revise. Si alguien necesita una editora, pues María es excelente: graduada de Periodismo y además del Centro Onelio, por donde han pasado los mejores escritores de Cuba. Huelga decir que también es una escritora excelente y espero que algún día vean algo suyo, aunque lamentablemente, no será fantasía o CF, porque no trabaja esos géneros.
La idea era formar un equipo de trabajo, pero no he logrado dar con más personas que puedan realizarlo con la calidad que lo hace María.
Y ya que hablamos de libros y escritores, todo parece indicar que podré estar en la Feria del Libro de la Habana el próximo año. Aún no he sido contactado oficialmente, pero debería publicarse Elymuria: Primer Mago para esa fecha, una evento que no puedo perderme. Caso contrario, estoy pensando ir de todas formas, al menos un par de días, para renovar contactos o hacer otros nuevos, que nunca está de más. Así que si están por allá en esas fechas, ya saben a donde no ir para evitar encontrarse conmigo.

¡2 Gb de correo!

Antes de abandonar la institución donde he pasado desde el 2001 hasta el 31 de julio, me llevé una copia del directorio (aún me resulta chocante llamar carpetas a los directorios) de correo de Thunderbird. Me resultó un poco raro que el proceso de comprimirla demorase tanto, y al concluir me encuentro con que pesaba 2.3 Gb.
Ahí está el correo de mis dos direcciones: la de yahoo, que descargaba por POP3 y tuve que dejar de utilizar hace unos tres años cuando me quitaron la conexión directa a internet, y la oficial de mi centro de trabajo.
Solo de yahoo hay un gigabyte de correos. No solo eso, también tengo mensajes guardados de antiguas listas de discusión, como la de usuarios de Linux de Cuba, con referencias, respuestas y consejos, probablemente de principios de este siglo, que se dice fácil. Quizás alguien que lea esto haya nacido después de que esos correos fuesen escritos. O mientras, quién sabe.
Mirar esa tonelada de información me hace pensar en cómo ha pasado el tiempo y la vida. Hay mensajes ahí de amigos que ya han muerto. Ver los correos de Blanco, mi "padre adoptivo en el software libre" me trae recuerdos de mi primer habano, fumado en su compañía, y largas conversaciones acerca de Linux. No encuentro uno de José Antonio, pero quizás lo haya, y eso me recuerda su permanente bolsillo vacío, pero el infaltable ron y los cigarros, y sus planes de escribir una novela de Elymuria con Brisa como protagonista. Un día murió y nunca supe cómo, solo que ya no vendría más a mi casa a pedir libros prestados.
Hay mensajes de otro yo: un yo más joven que ni siquiera recuerdo. En total, 17 años (más o menos), un período de mi vida en que tuve la oportunidad de crecer, hasta que, como suele suceder fuera de la capital y en todas las instituciones gubernamentales, el estancamiento tecnológico se volvió la norma. He sido testigo de muchas cosas y no solo en el campo de la tecnología. El acceso a internet me permitió entrar en conctacto con muchísima gente, personas que olvidé y que me olvidaron, pero que quedaron en ese inmenso archivo.
Como diría Roy Batty en Blade Runner: "Yo he visto cosas que vosotros no creeríais". Y estos correos me recuerdan esas cosas. Son como una imagen hecha con palabras de una porción de ese período de mi vida, una imagen que abarca 17 años, que deja fuera mucho, pero que representa una importante parte de mí.
Me pregunto dónde estaré dentro de otro par de décadas.

Alive

Un post muy breve para decirles que estoy vivo. Digo, si le interesa a alaguien. Mucho trabajo, pero tambien muchas satisfacciones, como por ejemplo, jugar Horizon Zero Dawn en una Playstation 4. Luego nos vemos.

Unity3d 2018.2: primeras impresiones

A pesar de tener un fin de semana bastante ocupado, he logrado echarle una ojeada a la nueva versión de Unity, a ver si valía la pena usarla. Resulta que hasta ahora me convence.
Aunque en verdad aún no he logrado localizar todas las funcionalidades nuevas, que quizás sean paquetes aparte, las que tiene me bastan para lo que estoy haciendo. He iniciado la migración del proyecto a la HDRP, o más bien, reinicié el proyecto desde cero y estoy moviendo las cosas poco a poco desde el anterior. Tendré que hacer algunas comprobaciones, pero me da la impresión de que la calidad gráfica es ligeramente superior con HDRP+Post Processing Stack, usando los mismos modelos. Me vendrían bien unos modelos mejores, pero como no los tengo, hay que resolver con lo que hay.
Como decía, no pude encontrar algunas funcionalidades que me interesaban, por ejemplo, Pixel Perfect. En cambio, sí conseguí hacerme con el NDK de Android y probar el soporte IL2CPP de Android. La compilación se demora un mundo, el apk resultante es un poquito más pequeño, y supuestamente el rendimiento mejora, algo que no tengo forma de cuantificar. Pero los tipos de Unity lo recomiendan, así que hay que usarlo.
En general, he tenido solo un encontronazo y ha sido con los materiales, que ahora están incrustados en el modelo y no se dejan modificar. Quizás debería reexportar todo desde Blender, pero de momento solucioné el inconveniente extrayendo los materiales. Y ya que hablamos de materiales, aún sigo buscando el famoso editor de shaders.
En fin, que me quedo con el 2018.2, que aunque no está maduro del todo, sí está mucho mejor que el 2018.1 y me vale para esperar a que salga el 2018.3.

Unity3d: la versión 2018.2 ya está aquí

Con un par de días de atraso, les informo que ya tenemos Unity 2018.2. Algo me decía que saldría este mes y en esta ocasión no me falló el instinto. Ahora bien, antes de que corran a descargarlo e instalarlo, sobre todo instalarlo, tengo que advertirles que en esta versión los Standard Assets no están disponibles para descarga como solía ser. Los mismos estarán en la Asset Store y serán divididos en varios paquetes, el primero de los cuales es Standard Assets: Characters, y saldrá muy pronto (unas semanas, dice el post oficial).
Unity3d 2018.2 optimiza muchas de las funcionalidades intoducidas en el 2018.1, como LWRP y HDRP, C# job System, ECS, Burst Compiler, etc, estos últimos en busca de lograr "perfomance by default". Me llamó la atención el sistema Pixel Perfect Camera, para 2D, que permite mejorar la calidad del  pixel art, aunque antes de festejar quisiera ver qué tanto mejora con gráficos de la vida real (como los de mi proyecto 2D). No menos llamativos que eso son los tilemaps hexagonales en 2D. Ahora ya no tienes excusa para no hacer ese remake de Heroes of Might&Magic 3 que tenías pensado desde hace años.
Les recuerdo que a pesar de que todo esto suena maravilloso, la mayoría de esas funcionalidades todavía están señaladas como Preview, incluso algunas de las que verán en el anuncio oficial ni siquiera están incluidas y son paquetes aparte. Importante tener en cuenta esto para evitar malestares, decepciones amorosas y calvicie temprana inducida por autohalarse los cabellos. Quedan debidamente advertidos.

Unity3d: ¿adiós a Mecanim?

Unity ha tratado en su conferencia Unite Berlin de demostrar que se está poniendo a la par con Unreal Engine. Sin embargo, lo más llamativo de todo lo mencionado (tampoco es que fueran muchas cosas), en mi opinión, es el nuevo Kinematica.
Kinematica es una mejora sustancial de Mecanim, donde se prescinde del complicado proceso de definir transiciones entre una animación y otra. Exactamente cómo funciona, no lo sé. Si lo explicaron, yo no estaba prestando suficiente atención. Así que adiós al reguero de las transiciones, a los blend trees y todo eso. Cualquiera que haya tenido que trabajar en un proyecto con múltiples clips de animación sabrá lo complicado que se vuelve. Al menos yo, me alegro mucho, aunque aún falta por experimentar de primera mano qué tan sencillo es usar la nueva solución.
No me queda claro si esto vendrá integrado en la 2018.1.5 o si será un paquete aparte, pero lo lógico es que fuese lo primero.

Cosas de edad

He estado un poco ausente en este mes (y el anterior) por cuestiones de tiempo, derivadas sobre todo de un cambio de trabajo. Luego de unos 17 años, creo que es momento de buscar progreso en otro lugar, así que me voy al vilipendiado y a veces tolerado sector privado. Eso lo convierte en un salto de fe, pero tenía que darse en algún momento.
En los últimos tiempos han llamado mi atención un par de memes acerca de lo viejo que eres, usando como comparativa tecnologías ya obsoletas, como Windows 95, los CDs, el Wolfenstein, etc. Ja, memes conmigo...
Como diría el replicante Roy: he visto cosas que no creerías. He trabajado con MSX y programado en Basic. Evolucioné hacia el MS-DOS, donde usé QuickBasic durante años, y de ahí pasé al Turbo Pascal. Vi nacer la programación orientada a objetos en ese lenguaje, un trabuco infumable que además había que enfrentar sin documentación.
Jugué el Príncipe de Persia original, el Death Track y otros muchos. Tuve la fortuna de ver llegar a esta ciudad el primer kit multimedia: bocinas, lector de CD y tarjeta de audio. En aquel lejano 1996 o 1997, tener algo así se veía tan remoto e imposible como viajar a las estrellas.
Y siempre digo que eso no es nada. Otras muchas tecnologías estuvieron fuera de mi alcance, por haber nacido en el lugar equivocado, por decirlo de alguna forma. No viví la época de clásicos como el Commodore y Amiga (son dos cosas diferentes, creo). Me perdí juegos como Wasteland.  En fin, que fue tanto lo que no viví que duele pensarlo.

No, el single player no se está muriendo

No sé dónde oí eso. Está de moda el multijugador, todo el mundo quiere hacer un DOTA, un Overwatch o un Destiny. O un juego de cartas.  Y cuando creíamos que no podía venir nada peor que un juego de cartas, llegó PUBG y su modo Battle Royale. El Battle Royale es muy fashion. Hasta Bethesda ha sucumbido, y no contenta con arruinar un clásico destruyendo su sistema RPG, ahora lo convierte en un MMO survival o algo así.
Señores, el single player no ha muerto, ni se está muriendo. Simplemente, las compañías incapaces de hacer un single player como dios manda le están dando de lado. Si no lo creen, ahí está CD Projekt RED con sus millones de copias del Witcher vendidas. O Larian y Divinity: Original Sin 2, que tendrá multiplayer, pero seguro que el 90% de los jugadores no lo compró por eso. La misma Bethesda nos ha dejado excelentes RPG que no necesitaban de multiplayer para ser grandes juegos. Bioware y sus Mass Effect o Dragon Age.
Es más fácil atraer millones de jugadores si los pones a dispararse entre sí. Es divertido y además, te ahorras inventarte una historia con la cual tenerlos ocupados durante más de 10 horas, sin mencionar que los jugadores de shooters no buscan una historia. Yo mismo lo que quiero es que me deje pegar dos o tres tiros a unos presuntos terroristas y ya, así de mal acostumbrados estamos. Es como la música, que cada vez es peor. Va a ser verdad aquello de que las nuevas generaciones son menos inteligentes, salvo unas pocas honrosas excepciones, que por suerte son suficientes para darle vida a esos desarrolladores que sí se molestan en escribir una buena historia. A los que no necesitan de gráficos excepcionales y apelar a nuestra ansia de competir para mantenernos enganchados a un juego y que nos recompensan por pensar.
Pero digo yo que ojalá hubiese más de ambos, jugadores y desarrolladores inteligentes.