Hero’s Journey. Indev. 2

Dos meses y medio después del primer /indev dedicado a Hero’s Journey regreso con importantes novedades ¡Hero’s Journey está en desarrollo! Ya no es sólo una idea en mi cabeza, sino un proyecto que llegará a ser un juego real y completo. Llevo aproximadamente dos semanas y media trabajando en el juego, con numerosos problemas y dificultades debidas a mi inexperiencia, pero que no me hacen desesperar, sino animarme a aprender más y más. No he elegido precisamente el proyecto más sencillo para empezar de manera más seria en esto de la creación de videojuegos, Hero’s Journey es un juego en 3D, de mundo abierto y hecho nada más y nada menos que en Unreal Engine 4.

La gente oye hablar de Unreal Engine 4 y piensa en un programa complicadísimo, con el que se hacen juegos “profesionales”, no parece una herramienta tan al alcance de todos como lo es Unity por ejemplo. Pero lo cierto es que me he llevado una grata, pero esperada, sorpresa con Unreal, ya lo había tocado con anterioridad y sabía lo que podía ofrecer. No es ni mucho menos ese programa tan complicado que se teme, de hecho su interfaz visual y bien organizada es muy agradable a la vista y fácil de usar, además, el diseño del la herramienta de programación visual Blueprints es maravilloso, de uso sencillo y mucho más accesible para aquellos que como yo no somos precisamente duchos en eso de los lenguajes de programación. En mi opinión Unreal es en estos momentos el mejor programa de creación de juegos de la nueva generación. He probado a fondo Unity y puedo decir que me siento más cómodo en Unreal y por supuesto es indudable la mayor potencia gráfica de Unreal y su excelente optimización.

Aún así, hay cosas en Unreal Engine 4 que no me han gustado tanto, me ha molestado especialmente el compilado de sombreados (shaders), un automatismo del programa que recalcula las shaders del trabajo de manera demasiado habitual, sobre todo al usar la herramienta de pintura del motor de paisajismo. Simplemente al aplicar una nueva textura sobre uno de los “trozos” (chunks) en los que se divide un paisaje, este pasa a canal alfa mientras se compilan los shaders, que suelen rondar entre 100 y 200 por chunk. Lo habitual es que se pinte sobre más de un chunk, por lo que no es raro que el programa compile entre 1000 y 2000 shaders, en lo que puede tardar 15-20 minutos, durante los cuales consume bastantes recursos del PC, principalmente memoria RAM, que en mi PC de 8 gigas se pone al 100%. Uno a uno los chunks van dejando de estar en alfa, pero resulta una espera demasiado larga para un proceso tan aparentemente sencillo ¡a veces incluso vuelve a compilar shaders aplicando la misma textura ya presente! Es absurdo y espero que mejoren este tema en nuevas versiones.

Hero's Journey indev 2 compiling shaders unreal 4
Si haces un juego en Unreal Engine 4 verás muchas veces “compiling shaders”

En fin, en estas dos semanas y media aproximadas de trabajo, he tenido tiempo de hacer muchas cosas, aunque a veces siento que voy demasiado lento. Pero es normal, ya que me estoy introduciendo por primera vez en profundidad a varios programas y hay cosas que aún no sé y que voy aprendiendo poco a poco, sobre todo a base de ver decenas de tutoriales. No solo he usado Unreal, sino también Blender, Krita, Gimp, Fuse y Mixamo, además de otros programas que he aplicado poco o nada al juego como Pixexix o Sculptris, pero a los que he dedicado también bastante tiempo.

Hasta que automatizo un proceso de desarrollo, dando con la mejor metodología posible, voy probando diversos métodos, descartando algunos y eligiendo el mejor posible. Esto obviamente ralentiza mucho el proceso pero mejora el resultado final y con el tiempo también reduce costes de tiempo. Pero para automatizar, primero hay que experimentar, aprender y adquirir los conocimientos necesarios.  A la hora de crear un videojuego, noto mucho mis preferencias más por el campo del arte y el diseño que por el de la programación, ya que intento limitar a lo mínimo posible el tocar código, ni siquiera blueprints, e intento aprovecharme de las numerosas herramientas y tutoriales que hay y que facilitan mucho este trabajo.

Empecemos con el proceso que he seguido hasta ahora para desarrollar Hero’s Journey. Ya que la inspiración del juego fueron las islas Feroe, empecé a crear el juego trasladando a Unreal una de las islas, concretamente la isla Vágar, en la que se encuentra el espectacular lago Sørvágsvatn, que se encuentra a apenas unos metros de un enorme acantilado. Este fue un trabajo mucho más complejo de lo que esperaba, aunque en principio no es excesivamente complicado, ya que se puede exportar una ubicación real al motor de paisajismo de Unreal usando un mapa de alturas, heighmap en inglés. El problema viene a la hora de conseguir un buen mapa de alturas y que al exportarlo, el modelo 3D tenga una considerable cantidad de polígonos para trabajar en el diseño sin problemas. En principio sólo hay una herramienta decente para conseguir un buen mapa de alturas, se trata de la web http://terrain.party/, una web inicialmente pensada para crear mapas para Cities Skylines y que se puede usar para crear heighmaps de cualquier lugar de la Tierra. El problema es que al importar las imágenes de terrain.party a Unreal, el resultado no tenía ni mucho menos la calidad deseada, el mapa era enormemente confuso y sin sentido. La razón es que los mapas de alturas deben tener una transición suave de los tonos de color del blanco al negro, sin pixelación y sin bordes duros, es decir, este tipo de mapas requieren más de un aspecto difuso que de una gran resolución. Por lo tanto, conseguí solucionar el problema al aplicar un filtro glow mediante Gimp a la imagen “merged” del archivo que nos ofrece terrain.party, que es la imagen más definida de todas, añadiéndole además un grado de transparencia bajo, al 90% aproximadamente, con la imagen “Plus” del archivo de terrain.part, la imagen más difusa de todas, en una capa inferior, mejorando más si cabe la transición de colores de la imagen. El resultado fue inmejorable.

 comparison heighmap terrain.party Hero's Journey
Detalle del mapa de alturas original extraído de Terrain.party (izquierda) y su versión final con glow (Derecha)

El siguiente problema vino al intentar modelar el terreno, ya que el número de polígonos era insuficiente y si intentaba aumentarlo demasiado dentro del propio Unreal, el motor crasheaba. La primera solución que pensé fue crear el mapa en un programa externo que permitiera mayor resolución de polígonos, por ejemplo Blender, pero los archivos de paisaje de Unreal no son modelos 3D al uso y por lo tanto, no se puede aplicar la herramienta de paisajismo a un modelo 3D externo, el remedio era peor que la enfermedad. Tras diversas pruebas opté por dividir en 4 partes el mapa, al dividir el escenario puedo aplicar la misma resolución a cada de las cuatro partes que al total original. Pese a ello, el número de polígonos seguía sin ser suficiente para lo que deseaba hacer, por lo que al final el diseño va a cambiar ligeramente frente a lo que tenía pensado y añadiré numerosos detalles 3D, como rocas o elementos de los acantilados, creados mediante blender y exportados a Unreal. Debido a esta limitación de polígonos cobra también mayor importancia el dibujo frente al volumen.

Hero's Journey gif week 1
Estado del juego en la primera semana de desarrollo

De hecho, el dibujo es uno de los elementos que más va a caracterizar al diseño artístico de Hero’s Journey, cada textura del juego estará dibujada a mano, ya sea a través del propio Unreal para el paisaje general, Blender para modelos 3D y Krita para otras texturas, como la hierba o las nubes. Quería que el estilo tuviera un importante valor artístico, visual, de colores planos y cierta estética “low poly”, me gusta poder controlar a la perfección cada detalle del dibujo, algo que complica el trabajo, ya que cada textura supone un gran esfuerzo, pero creo que mejora el resultado final. La verdad es que estoy bastante contento con el resultado conseguido hasta ahora y aunque use tres herramientas para dibujar, el conjunto tiene bastante unidad visual.

Hero's Journey gif week 2.5
Estado actual del juego, con un estilo artístico mucho más definido

Sin duda, uno de los mayores esfuerzos que va a exigir Hero’s Journey es el mar y el agua en general, de hecho pese al trabajo realizado hasta el momento, aún estoy lejos de terminarlo. Con la creación del mar y el agua estoy notando mucho mis carencias y mi inexperiencia, ya que cualquier cosa me está llevando mucho tiempo y muchas pruebas diferentes. Por suerte existe un proyecto abierto y gratuito realizado por la comunidad de Unreal llamado Ocean’s project, el proyecto incluye un mar con físicas, con flotabilidad y oleaje, además de muchos más elementos accesorios como objetos flotantes y una herramienta de climatología. Tras pelearme mucho con el proyecto, he conseguido crear un mar con un aspecto bastante decente, muy personalizado y con una malla de postprocesado bajo el agua que le da un aspecto increíble cuando nos sumergimos. Aún no he conseguido aplicar las físicas, lo que sin duda me va a dar numerosos dolores de cabeza.

Pero a lo que hasta ahora más tiempo le he dedicado es a la creación del personaje principal, que de hecho aún no está terminado a falta de algunos retoques. El primer diseño de la chica protagonista, que aparece en el primer teaser del juego, fue creado mediante el editor de personajes Fuse y animado mediante su programa online hermano Mixamo, sin duda Mixamo y Fuse son dos programas increíbles que nos dan muchas facilidades a la hora de crear y animar un personaje, la cantidad de animaciones es inmensa y me ha ahorrado un gran número de horas de trabajo, aunque obviamente habrá que crear algunas animaciones personalizadas que no están presentes en Mixamo. El principal problema con el personaje vino a la hora de rediseñarlo para hacerlo un poco más original. Aunque conseguí un aspecto bastante cercano al concept art tan solo usando Fuse, quería darle un toque de originalidad modificando tanto las texturas como los modelados. La gran cantidad de problemas a los que me enfrentado y de los que aún quedan rescoldos, ha sido innumerable. En gran parte han sido problemas causados por el modelado de Fuse y por bugs y problemas de Blender, unidos a mi falta de experiencia también en Blender.

Hero's journey main character design evolution
Evolución del personaje principal, a la izquierda el personaje creado con Fuse, a la derecha la versión final creada con Blender

Blender es sin duda uno de los mejores programas gratuitos que existen, por número de opciones y potencia es capaz de competir con programas que cuestan cientos de Euros como 3D studio o Zbrush, pero Blender es también uno de los programas menos intuitivos y con más bugs y problemas extraños que he usado. El principal problema al que me he enfrentado tiene que ver con los modelados de Fuse, con varias capas de polígonos demasiado pegadas entre ellas, que al intentar modelar crearon numerosos glitches visuales y errores que me han obligado en varias ocasiones a modificar o eliminar completamente los modelados. No voy a hacer una lista de todos los problemas que he tenido al crear al personaje protagonista pero han sido muchos y muy diversos. Aún quedan dos pequeños problemas que solucionar, uno tiene que ver con extrañas transparencias, tanto en el guante izquierdo como en  la bota izquierda, de las que conozco su origen, creo, pero no una solución sencilla de momento. Por otro lado estoy teniendo problemas al aplicar físicas de tejidos mediante nvidia Apex, creo que tengo la solución para este problema pero aún no la he aplicado.

Además de en todas estas cosas, también he estado trabajando en elementos artísticos del paisaje, como el dibujado básico del escenario, efectos de postprocesado ambiental, rediseño del cielo, con nubes nuevas que se adaptan mejor al estilo visual del juego y también hierba, con una textura dibujada a mano y que le da a todo un aspecto realmente bonito.

Inspirations Hero's Journey
Carpetas con decenas de imágenes de diversos temas para inspirarme

En los últimos días he estado un poco más parado debido a problemas personales, pero no he estado totalmente quieto, ya que he aprovechado la pausa para repensar algunas cosas. Aunque tenía bastante claro el aspecto artístico y la idea general de gameplay e historia, lo cierto es que había algunos elementos demasiado difusos y que necesitaba definir para mejorar la metodología de trabajo. Puedo decir que ahora ya tengo bastante clara la historia básica, aún no hay un guión desarrollado, pero el argumento ya está bastante definido en mi cabeza de principio a fin. También he aprovechado para organizar un poco lo hecho hasta ahora, ordenarlo en carpetas y crear una copia de seguridad en la nube, pasándolo de Google Drive a Mega por problemas de espacio, ya que el proyecto completo ocupa actualmente 12 gigas. También he creado un organigrama de trabajo en Trello, distribuyendo el esfuerzo en pequeñas tareas, organizándolas en aquellas que están por hacer, aquellas que estoy haciendo, las que están terminadas y las que no puedo hacer hasta que no termine otra tarea asociada. Por último, esta misma mañana he estado realizando una búsqueda en profundidad de imágenes diversas que me pueden servir de inspiración para la historia y el arte del juego.

Trello Hero's Journey
Organigrama de trabajo en Trello

En fin, queda aún muchísimo trabajo por delante, pero Hero’s Journey es ya una realidad y espero que sea imparable, esto no es solo el primer juego serio que espero terminar, sino también un reto, el reto de que soy capaz de hacerlo, de que puedo cumplir mis sueños y sobreponerme a todos los problemas que van a surgir a lo largo del proceso. Nos vemos en nuevos /indevs, espero que con buenas noticias.