GDC 2023, mi opinión

 Ha terminado la Game Developers Conference 2023, un evento que esperaba con interés, porque es como el E3, pero para los desarrolladores. Al GDC van los grandes de la industria a presumir de sus herramientas de creación de contenido (no solo de juegos), casi siempre con versiones recién lanzadas o por salir. Como punto a destacar, este año Godot tuvo un stand, patrocinado por W4. Por lo general, del GDC me interesan mayormente las presentaciones de Unreal y Unity, y sus reels. 

Sin embargo, este año ha sido decepcionante. Unreal ha presentado su versión 5.2 y parecen haberse enfocado únicamente en fotorrealismo. El reel es una sucesión de juegos que parecen ser exactamente el mismo, incluso los que no son fotorrealistas tienen esos colores que de tan brillantes parecen irreales. Es como si a Unreal no le interesaran los indies, o las estéticas alternativas. Hay que ir al reel de Unity (o al stand de Godot) para ver estilos visuales diferentes, y aún así, sus juegos con gráficos realistas van por el mismo camino (al fin se están acercando a Unreal en ese apartado).  

A diferencia de Unreal, hasta hace unas horas Unity no había subido o emitido un keynote, solo su reel "Made with Unity". Me he quedado con ganas de ver un repaso al estado del motor y su roadmap para este año, aunque entre sus conferencias está precisamente, el roadmap para el 2023. Han estado inusualmente callados.

Otro que no asistió fue Amazon con O3DE. Sí, por lo general el GDC no es terreno propicio para software libre (Godot está porque quiere hacerse un hueco en la industria). Amazon prefiere tener su propia conferencia anual: el O3DCon, donde pueden brillar sin nadie que les haga sombra.

Habrá que ver qué aparece en Youtube a lo largo de esta semana.

Reporte de progreso: menos apagones, y algo de avance (al fin)

 Esta semana hemos logrado concretar uno de los flujos de trabajo que nos venía dando problemas desde el principio. Al fin se ha implementar una prueba de concepto funcional del sistema de objetos que utilizan animaciones. O sea, los pantalones, guanteletes y en menor medida algunas armaduras.

La metodología es sencilla, pero conlleva algo de trabajo (como casi todo en el desarrollo de juegos). Para empezar, es necesario cortar el personaje en secciones, según las partes que quieras reemplazar. Si bien hay modelos que no necesitan eso, por ejemplo, una coraza que cubre el torso, en otros sí es obligatorio que sustituyas una parte del cuerpo del personaje. En nuestro caso, hemos escogido cortar en el cuello, hombros, manos, cintura y pies. El set de armadura inicial incluye una coraza con faldar, brazales que cubren todo el brazo, perneras y escarpes, completando así algo que parece una armadura de placas, aunque sin llegar hasta allá. Los brazales sustituyen los brazos, las perneras las piernas, y así sucesivamente. 

Seguramente alguien podría decir que esto es una estupidez, porque todo eso se hace en Blender, poniendo las cosas sobre el personaje y ocultando o mostrando la pieza correspondiente. Pues... va a ser que eso no funciona, cuando tienes tres razas con dos sexos cada una y montones de armaduras diferentes. 

Ya desde el punto de vista técnico, en Godot (en Unity es diferente) el procedimiento consiste en tomar el MeshInstance3D del objeto y asignar su componente mesh y su material al MeshInstance3D de la parte del cuerpo a reemplazar. Por supuesto, se guarda una copia del MeshInstance original para restaurarlo al desequipar la armadura. El método también permite personalización y variedad de personajes, pues puedes reemplazar el torso de un NPC por otro torso con panza, o cambiar su cabeza.

El siguiente paso es lidiar con esas tres razas y dos sexos, que nos dan seis modelos en total. Cada uno de esos cuerpos tiene diferencias con respecto a los demás, más o menos sutiles, pero las hay. Aquí la cosa se complica, porque hay que proporcionar una armadura para cada cuerpo. Esto se logra usando shape keys, y no se dejen asustar por el término, es tremendamente fácil. Solo que como casi todo en el desarrollo de juegos, conlleva algo de trabajo. Hemos definido shape keys que permiten deformar la armadura y adaptarla al cuerpo objetivo. De nuevo, no es factible crear un modelo separado para cada variante, porque gestionar seis modelos por cada objeto cuando tienes muchos objetos es una pesadilla. 

Como ven, no hay un método fácil. Si quieren fácil, dedíquense a otra cosa. Rascarse los dedos de los pies, o mirar la pared. Pero es efectivo y les garantizo que el resultado vale la pena. Les debo las fotos porque Blogger ya no las muestra, pero pronto tendremos video mostrando cómo se ve todo esto en el juego. El paso siguiente consiste en manejar objetos más complejos, como un gambesón o túnica, que incluyen mangas y requieren sustituir no una, sino dos partes del cuerpo a la vez.


Reporte de progreso: muchos apagones y poco avance

 Han vuelto los apagones nocturnos para fastidiar le escaso tiempo de trabajo que tenemos, por eso todavía no hay nada que mostrar. Ni lo habrá por un tiempo, porque justo estamos entrando en la fase complicada y estoy solo a cargo de la programación, que no eran los planes. 

La fase actual, que como les decía es complicadita, es la de implementar el asunto de equipar objetos en el personaje. Nos ha tomado más de lo que debería, por apagones y por estar todos muy ocupados. Este proceso implica crear diferentes variantes de una armadura por ejemplo, usando shape keys para adaptarlas a diferentes cuerpos, o crear elementos que comparten el mismo esqueleto que los personajes para intercambiar partes del cuerpo. En este último caso podemos mencionar los pantalones, por ejemplo. O los brazales.

Aunque la parte de código básico está hecha, es solo una prueba de concepto que hay que adaptar a su uso en el juego real. De paso, les digo un secreto: me resultó mucho más fácil hacerlo en Godot que en Unity.

Godot 4.0 estable

 Tal como esperábamos, hoy se ha lanzado la versión 4.0 de Godot. No más Release Candidates. Salvo por una prueba rápida del proyecto, no le he dedicado tiempo, eso queda para por la noche. No me he actualizado desde la RC2, así que no sé si algunos bugs molestos fueron resueltos entre las RC 3 y la 6. En concreto, me estaba fastidiando mucho un fallo al presionar Ctrl-S o Ctrl-K. Pero en general, el resto del proyecto iba muy bien ya en la RC2.

Pensaba hacer un video, pero no creo que el proyecto, en su etapa actual, esté como para mostrarlo.

Sin novedad en el frente

 Y seguimos sin corriente. Tras tres (venga trabalenguas) fallos catastróficos del sistema eléctrico nacional que nos dejaron sin corriente durante 11-12 horas cada día a la mitad, e incluso el 90% del país, vienen los apagones por déficit. O sea, que a pesar de que en menos de quince días hemos tenido cero consumo en una parte significativa del país, Cuba no puede generar suficiente electricidad. Entonces sucede como anoche, que me quedé sin electricidad al levantarme y luego justo al sentarme a trabajar por la noche.

En fin, que se me acumula un atraso terrible.

Los problemas de una cámara isométrica

 Ya hemos entrado en fase de desarrollo con assets un poco más serios y han aflorado algunos problemas relativos al uso de una cámara ortogonal. Ya en Unity me había topado con cosas como que el shader toon no funcionaba en ese tipo de proyección. En Godot, hay un par que vale la pena mencionar. Por ejemplo, las sombras se torna borrosas, y eso solo en objetos grandes, que arrojan una sombra significativa. Los objetos pequeños apenas producen una manchita. 

El segundo problema vino cuando se agregó un shader para el terreno, que la pantalla se dividió en dos mitades, con la superior un poco más oscura que la inferior. Ahí sí tuve que buscar una solución y cambiar a una cámara en perspectiva, con FOV=15. Esta solución me fue recomendada varias veces, y también es la que usa Adam Lacko en su reimplementación del motor de Van Buren. Adam consigue un efecto tan parecido a lo que quiero que hice unas pruebas hace un tiempo y he aplicado lo que aprendí ahora. 

Primera escena

 En general, habrá que esperar que el jodido sistema de terrenos al fin llegue a Godot 4 para poder darle el punto final a las escenas. Mientras tanto vamos buscando el flujo de trabajo que nos acomode para el resto.




Pestañeas y ya estás a mitad del 2023

 Pues así. Me acabo de dar cuenta de que ayer mismo era fin de año y hoy resulta que estamos a 12 de enero. ¿Cómo cojones pasó eso? Bien, a lo que íbamos. 

Se ha ido medio mes y hay muy poco que decir. Mucho trabajo encaminando el proyecto y armando dos conferencias para el próximo Global Game Jam. Estaré de nuevo en la Universidad de las Ciencias Informáticas como invitado y podrán ver las conferencias en directo, si todo sale bien. También creo que me regalan otro pulóver, pero esas cosas materiales no son las que importan. Atentos a mi twitter y Facebook, que publicaré el link en cuento estemos en vivo. 

El proyecto, ah... Poco que decir por ahora. Probablemente poco que decir por un buen tiempo pero supongo que eso no le preocupará a nadie.

Estamos en racha, pero no de las buenas

 A ver, señores, necesito el contacto del servicio técnico del universo, porque esto que me está pasando no es normal. Hace un par de meses se me rompió la motherboard. Ahora se me rompe la fuente, y de paso, la motherboard nueva deja de apagar correctamente (se queda como suspendida y el ventilador de la fuente sigue girando). Por si fuera poco, también se tupe la taza del baño. Y ayer me encuentro que los gatos tumbaron el control del televisor y lo rompieron. Hasta cuándo es esto?

El colmo es que ni siquiera las partidas de DOTA 2 que empiezo con ventaja abrumadora las logro ganar, siempre se joden al final.

ültimos cambios y estado actual del prototipo

 Ante todo mis disculpas, en el día de ayer el repo del prototipo estuvo en muy mal estado. Se rompió mi fuente de alimentación (la de la PC, no la mía) y muchos cambios se quedaron pendientes. Cuando logré poner el disco duro en otra PC, no me percaté de que faltaban archivos por agregar. Y cuando agregué esos archivos, no me percaté que una escena se había dañado cuando mi fuente falló y se apagó la PC. Es un problema que ya veo es habitual en Godot.

En fin, esos errores han sido eliminados. Y sustituidos por otros. Pero me place informarles, queridos compañeros de este sindicato, que el prototipo está casi terminado. O al menos, ahora es posible combatir. Lo que queda por delante es el proceso de pulir, refinar bien el sistema, y quizás agregar un par de cosillas. Los planes eran tener todo listo para enero, pero como nuevamente estoy sin estación de trabajo, creo que no podré cumplir a tiempo.

Pasando a algo nuevo

 Bueno, ya concluido y lanzado Battle Gear, toca moverse a otra cosa, que ya íbamos atrasados. Luego de muchas discusiones y de golpear con el látigo al resto del equipo para hacerles ver su falta de ambición, hemos iniciado un pequeño prototipo. El objetivo no es hacer un juego completo, ni iniciarlo, sino crear un banco de pruebas para el sistema de combate.

En este prototipo solo trabajaremos en eso. Nada de gráficos, interacción/exploración solo la justa, y detalles los estrictamente necesarios. Luego de más o menos un mes, ya hemos identificado unos cuantos problemas y descubierto algunas cosillas. 

Por ejemplo, el animation retargeting nos ha salido casi a la primera, aunque tiene sus fallitos. Solo funcionó bien cuando hice el mapeo de los huesos empezando por los pies y hacia arriba. Lo natural es que empieces de arriba hacia abajo, pero al llegar a la cintura, las cosas empezaban a dar problemas. Quizás tenga que ver con la estructura de huesos creada por Blender. 

Sin embargo, el nuevo sistema de pathfinding ha demostrado ser problemático. El personaje sigue flotando sobre el terreno y en reddit me dicen "que así es como debe ser". El segundo programador del equipo lleva varios días enfrascado en la solución de ese problema.

La jugabilidad ha sido relativamente trivial de implementar, porque muchas ideas ya estaban probadas (o al menos, pensadas) con anterioridad. Eso aún sigue y seguirá siendo un blanco móvil, porque es donde probaremos y romperemos más cosas, en busca de un combate en tiempo real dinámico, pero sin caer en lo frenético. Que para machacar botones ya tenemos el Diablo o DOTA (si te apetece un combate sazonado con el mejor menú de insultos internacionales).

Y en caso de que sientas curiosidad por cómo se arma todo este muñeco, el repo donde estamos trabajando es público.

Creando una cámara isométrica con O3DE

Decir que este ha sido un video complicado es quedarse corto. A mitad de trabajo se rompió mi PC y me tomó unas semanas recuperarme. Tuve que hacer la parte final en otra PC, y editar en la mía, ya recuperada. A esas alturas había olvidado el orden del video, no tenía tiempo para tratar el sonido, y ha sido un desastre total.

No obstante, no podía dejar perder el trabajo ya hecho.


Espero que les sirva para que al menos se formen una idea de cómo funciona O3DE, un motor que a pesar de sus probelmas, no se ve tan mal. De hecho, espero poder migrar en próximos proyectos, cuando él resto del equipo mejore en experiencia y hardware.

Huelga decir que esto no es un tutorial, solo es una prueba rápida, muy incompleta y con un dominio casi nulo del lenguaje script (Lua) y de O3DE en general.

Lanzamiento y nuevos planes

 Han sido unos días bastante horribles. Unos días antes de lanzar Battle Gear se murió mi motherboard. Definitivamente, no crean eso de Ultradurable en las cajas de Gigabyte. He visto dos placas Gigabyte B250 muertas con menos de dos años de uso cada una, y una tercera que no sé cuánto tiempo vivió, pero con el mismo problema. El lanzamiento se logró a pesar de eso... pero a última hora descubrimos un error grave, cuando el apk ya estaba en la plataforma esperando autorización. Esa fue otra carrera contra el tiempo para encontrar el misterioso problema y solucionarlo. Un consejo: tengan cuidado con el manejo de assets en Godot. Parece ser que es posible hacer algo tan disparatado como borrar una textura y el material seguirá manteniendo la referencia a la textura importada y todo seguirá funcionando mientras no limpies el directorio .import o ejecutes el juego en el editor.

En caso de que estés en Cuba y quieras darnos una ayuda, puedes adquirir el juego en Apklis.

Aunque he logrado recuperarme, el atraso acumulado es importante. Me esperan un par de días de trabajo intenso en las pocas horas con electricidad que tengo en las noches, para subir el lunes un video sorpresa que se quedó a medias con la rotura. Entre una cosa y otra, debo echarle un vistazo a la revisión de una novela para un concurso, y luego pasar al siguiente proyecto. 

El nuevo hardware no es nada impresionante, más bien es una mierda total. Esta vez me he puesto de suerte y ha aparecido una motherboard Asus, pero de gama muy baja: una Prime B365. Tampoco se dejen engañar por el "Prime", en verdad es una caca, con apenas 4 puertos USB traseros y puertos PS2 en vez de puertos USB 2.0 par ateclado y mouse. No sé quién use PS2 a estas alturas. La distribución de la placa no es la ideal: la tarjeta de video bloquea el primer puerto SATA, y por suerte ese fue el único detalle. El CPU es un i3 8100, que probablemente cumpla con lo estrictamente necesario, pero no más que eso.
Pero seamos matemáticos y veamos el lado positivo: estoy de vuelta. Con algo de esfuerzo (mucho, en realidad) podré mejorar lo que tengo ahora.