Ha pasado mucho tiempo desde la última actualización de este proyecto. Y aunque me ha tomado más tiempo de lo esperado, como todos los proyectos, sigo trabajando y aprendiendo mucho en el camino.

En primer lugar quiero recordar los objetivos que me puse al inicio Esto son:

  1. Usar Unity 3d y exportar el producto final para web.
  2. El jugador sólo podrá caminar, saltar y moverse en primera persona.
  3. Los gráficos serán lowpoly pero más detallados de lo que normalmente se espera.
  4. El escenario será parte de los universos que hemos creado en Trashbot. Más concretamente, Ulora. He pensado que sería interesante conocer la casa de Elenea y su familia.
  5. Solo puedo demorarme siete días en el desarrollo.
  6. Al finalizar haré un artículo y un video hablando sobre el tema.

De estos seis puntos, he cambiado dos.

El punto uno habla de usar Unity para el desarrollo. Esto ha cambiado, ahora estoy usando Unreal Engine 4. Un motor que conocía poco pero que, gracias el demo técnico de Unreal Engine 5, me convencí de aprender a usar. Quiero estar listo cuando esa nueva versión del motor salga al público. Además es totalmente gratuito hasta ganar el primer millón de dólares.

Y más allá del hype de los gráficos y el nuevo modelo de negocio, al usarlo he descubierto que me gusta mucho más que Unity. De alguna manera entiendo más el motor y su lógica. Además, los blueprints son una proposicion tentadora para mi que no soy programador. Y aunque estos tienen su ciencia y requieren que tengas una lógica de programación dominada, me parecen más flexibles y resistentes a los cambios. Los prefabs de Unity simplemente no ofrecen las mismas facilidades.

Obviamente el punto cinco también ha sido alterado. Me ha tomado mucho más de siete días completar esta tarea, pero no ha sido en vano. He trabajado este proyecto en Unity y luego Unreal, he aprendido qué me gusta y qué no de cada motor. También me estoy haciendo una idea más clara de qué flujo de trabajo funciona mejor para mí. También estoy aprendiendo algunas cosas que debo tener en cuenta al crear los modelos en Blender, y las detallo a continuación.

UVs

En mi caso los modelos necesitan ser exportados con UVs que no se esten interceptando entre si. De lo contrario se producirán errores al hacer build a la iluminación.

Planeación

Es necesario tener un plan más o menos detallado de todo lo que contendrá el nivel. En mi caso estoy teniendo problemas para definir el terreno. Creo que empecé con demasiado detalle. Lo ideal debió ser que haga un blocking más completo del terreno para entender dónde iría cada elemento.

Rendimiento

Hay que informarse sobre las mejores prácticas al momento de hacer vegetación. En el caso de Unreal, los elementos como árboles, arbustos, césped y rocas deben hacerse con las herramientas de Foliage. Esto optimiza el uso de recursos, ya que todos los elementos del foliage son llamados con un solo draw call.

95 árboles en un solo draw call

Pensar estratégicamente

Algo que ya sabía pero que por alguna razón siempre me cuesta implementar son los assets multipropósito. Es decir, por ejemplo, una roca que tiene siluetas muy diferentes desde cada ángulo que la vez. Esto permite que al colocarla en el escenario la puedas rotar en cualquier dirección y obtener una apariencia diferente. Mi problema con esta manera de trabajar es que en mi mente siempre tengo ansiedad por la geometría que ha quedado escondida, lo sé no tiene sentido, pero es un problema que tengo y sobre el que estoy trabajando. Mi mente está más tranquila cuando “nada sobra” y la idea de tener gran parte de la geometría escondida debajo del nivel es algo que no me deja tranquilo. Pero los motores están preparados para este tipo de cosas y no tiene nada de malo girar un pedazo de terreno y dejar oculta una parte, siempre que se logre romper la monotonía de usar el mismo asset varias veces, está bien, puedes usar el pedazo oculto en otro lugar.

Una misma roca puede tener aspectos diferentes.

Materiales

Estoy creando una librería de materiales. Creé un archivo de Blender que contiene todos los materiales que estoy usando en el nivel. Cuando tengo que usar uno en un modelo, solo linkeo el archivo de materiales al archivo del modelo en cuestión y los uso normalmente. Hago esto para evitar tener que copiar estos materiales constantemente entre archivos. Y tengo un archivo central al que puedo entrar cuando quiera hacer ajustes a determinado material, como la madera por ejemplo, y los cambios que haga automaticamente se heredarán a todos los modelos que lo usen.
Al importar los objetos a Unreal, el motor detecta los nombres y así evito que se creen materiales duplicados.

Mi librería de materiales en Blender
Y esta es su contraparte en Unreal Engine

En fin, me gusta trabajar con Unreal Engine 4. Es muy estable, no ha colapsado ni una sola vez desde que estoy haciendo mis experimentos. Puede ser algo pesado en sistemas antiguos, pero es el precio de la tecnología.

A continuación te dejo un video de lo que he hecho hasta ahora en Unreal. Este video fue tomado directamente con el motor, así que disculpa el nivel de compresión, aún estoy aprendiendo a configurar el codec. Todo lo que ves aquí está sujeto a cambiar. Me da mucha emoción que veas lo que tengo planeado para la siguiente actualización.