El objetivo del proyecto Jazz Inside era poner a prueba las capacidades gráficas del afamado motor de videojuegos Unreal Engine 4.  En el siguiente post quisiéramos explicar brevemente algunos de los procesos más importantes que hemos llevado a cabo para realizar la demostración.

Modelación:

Teniendo en cuenta que un motor de videojuegos depende estrechamente de las capacidades gráficas de la tarjeta que posea el equipo donde se va a ejecutar la aplicación, las limitaciones a la hora de modelar dependen directamente de la “compatibilidad” previa que queramos dar a nuestra demostración. En el caso de Jazz inside partimos de una tarjeta de gama media de Nvidia, el modelo Gtx 970, que cuenta con 4 GB de memoria DDR5 y que por otro lado es uno de los requisitos mínimos en lo que a hardware se refiere especificado por los fabricantes tanto de Oculus Rift como de Htc Vive.

Algunos de los modelos de Jazz inside fueron diseñados en primer lugar con una densidad de polígonos extrema, como por ejemplo el contrabajo, cuyo primer modelo cuenta con mas de 1.000.000 de polígonos. Esta densidad es del todo ineficiente para Unreal Engine 4, por lo que hubo que rebajar el número de polígonos mediante un proceso de retopología, contando el modelo final con una densidad de unos 20.000 polígonos.

En la imagen podemos observar la diferencia entre la malla en alta y baja densidad. En este proceso es fundamental tener en mente que zonas o detalles vamos a querer conservar con buena calidad y a cuales vamos a darles menos importancia. En este caso particular el clavijero fue una de las zonas que consideramos oportuno mantener con gran detalle.

d

Modelación:

Teniendo en cuenta que un motor de videojuegos depende estrechamente de la tarjeta gráfica que posea el equipo donde se va a ejecutar la aplicación, las limitaciones a la hora de modelar dependen directamente de la “compatibilidad” previa que queramos dar a nuestra demostración. En el caso de Jazz inside partimos de una tarjeta de gama media de Nvidia, el modelo Gtx 970, que cuenta con 4 GB de memoria DDR5 y que por otro lado es uno de los requisitos mínimos especificado por los fabricantes tanto de Oculus Rift como de Htc Vive.

Algunos de los modelos de Jazz inside fueron diseñados en primer lugar con una densidad de polígonos extrema, como por ejemplo el contrabajo, cuyo primer modelo cuenta con más de 1.000.000 de polígonos. Esta densidad es del todo ineficiente para Unreal Engine 4, por lo que hubo que rebajar el número de polígonos mediante un proceso de retopología, contando el modelo final con una densidad de unos 20.000 polígonos.

En la imagen podemos observar la diferencia entre la malla en alta y baja densidad. En este proceso es fundamental tener en mente qué zonas o detalles vamos a querer conservar con buena calidad y a cuáles vamos a dar menos importancia. En este caso particular, el clavijero fue una de las zonas que consideramos oportuno mantener con gran detalle.

Unwrap UVW:

El siguiente paso tras reducir el modelo a un número de polígonos “responsable” es el unwrap uvw, que no deja de ser en resumidas cuentas llevar a un plano bidimensional nuestro modelo para posteriormente poder texturizarlo.

Para ello es importante tener en cuenta varias reglas, para que no nos encontremos problemas a la hora de exportar a Unreal Engine 4. En el manual de dicho software podemos encontrar bien detalladas cuales son las recomendaciones para dicho proceso, pues no debemos olvidar que el motor utiliza nuestro unwrap no solo para representar las texturas del objeto sino también para calcular su mapa de iluminación o “Lightmap”.

Unwrap UVW:

El siguiente paso tras reducir el modelo a un número de polígonos “responsable” es el unwrap uvw. Esto consiste en llevar a un plano bidimensional nuestro modelo para posteriormente poder texturizarlo.

Para evitar problemas a la hora de exportar nuestro modelo a Unreal Engine 4 es importante tener en cuenta varias reglas. En el manual de dicho software podemos encontrar bien detalladas cuáles son las recomendaciones para el proceso, pues no debemos olvidar que el motor utiliza nuestro unwrap para representar las texturas del objeto y calcular su mapa de iluminación o “Lightmap”.

Texturizado:

La ultima parte para terminar el modelo antes de la correcta exportación a Unreal Engine 4 es el texturizado de éste. Las texturas se aplicaran en el editor de materiales de Unreal Engine 4, donde ajustaremos las reflexiones, brillos especulares, etc.

En el caso del contrabajo hemos usado unas texturas con un tamaño de 4.096 x 4.096 píxeles, lo cual nos permite acercarnos bastante al modelo sin perdida de detalle.

En esta etapa debemos tener en cuenta si vamos a usar texturas de Oclusión ambiental, Normales, Opacidad… etc, y ajustarlas correctamente en el editor de Unreal Engine 4.

Texturizado:

Para finalizar el modelo antes de la correcta exportación a Unreal Engine 4 es necesario un proceso de texturizado. Las texturas se aplicarán en el editor de materiales de Unreal Engine 4, donde ajustaremos las reflexiones, brillos especulares, etc.

En el caso del contrabajo hemos usado unas texturas con un tamaño de 4.096 x 4.096 píxeles, lo cual nos permite acercarnos bastante al modelo sin pérdida de detalle.

En esta etapa debemos tener en cuenta si vamos a usar texturas de oclusión ambiental, normales, opacidad… etc; y ajustarlas correctamente en el editor de Unreal Engine 4.

Iluminación de la escena y reflexiones:

Es importante tener en cuenta que al encontrarnos en una escena interior la iluminación indirecta es la que aportará un mayor grado de realismo y calidad al proyecto. Quedamos gratamente sorprendidos con las capacidades de Unreal Engine 4 para el cálculo de dicha iluminación. La iluminación de la escena quedó completamente calculada en menos de 5 horas con unos resultados más que aceptables. En lo que respecta al tratamiento de las reflexiones son varias las opciones que Unreal ofrece para su cálculo. En nuestra demostración optamos por las capturas de reflexión esféricas, ya que son quizás las más eficientes teniendo en cuenta que el proyecto está diseñado para ser visualizado en dispositivos de realidad virtual. Otro tipo de reflexiones, como las reflexiones planas, fueron descartadas por consumir demasiados recursos.

Animación de cámaras:

La herramienta “Sequencer” del propio motor nos ha permitido crear y organizar todas las animaciones de cámara sin necesidad de acudir a un software ajeno a Unreal Engine 4. El trabajo ha sido cómodo y ágil debido a la versatilidad de dicha herramienta, que permite controlar individualmente las curvas de cada animacion, algo esencial para obtener suavidad en los desplazamientos. No debemos olvidar que movimientos bruscos pueden ocasionar mareos y malestar a la hora de utilizar nuestros dispositivos de realidad virtual.

Programación y FX:

Jazz inside es una demostración técnica del apartado visual de Unreal Engine 4, por tanto no hay prácticamente programación ni por tanto interactividad en la demostración. No obstante, la asignación de controles y la programación básica para movernos entre sus niveles ha sido realizada con blueprints. Este método de programación específica de Unreal podría considerarse una especie de programación visual basada en nodos, la cual facilita bastante el trabajo a diseñadores que no tienen conocimientos de C++.

Sobre los efectos especiales, Jazz inside cuenta con un sistema de partículas que simula polvo en aquellas zonas donde la luz solar atraviesa las cristaleras. 

Conclusiones finales:

Quedan muchas cosas en el tintero puesto que Unreal Engine 4, al igual que cualquier otro motor de videojuegos, es una herramienta extensa, compleja y con muchísimas posibilidades. No obstante, queríamos compartir con vosotros nuestros primeros pasos en el desarrollo de contenidos para realidad virtual.

¡Un saludo y hasta pronto!