KUZU : Desarrollar juegos 3D optimizados para OUYA

Dic 31

KUZU : Desarrollar juegos 3D optimizados para OUYA

La historia del nacimiento del juego

El personaje lo usé para desarrollar con Davit Masía, Bomber Farm 3D en el 2012, lo edité y pagé a un modelador para que me hiciera una versión de hielo de este dragón de fuego. De hecho, el desarrollo más maduro de este juego surgió como aceptación de un reto propuesto por un amigo, Miguel Díaz, y porque también me lo pedía más gente, de diferentes formas, por ejemplo, entre otros, algún lector de este blog que escribió un comentario pidiendo un tutorial sobre un juego de tipo plataformas y como suelo cumplir lo que digo, el juego está a punto de terminar.

Hace unos meses compré una OUYA a Amazon UK, en cuanto llegó me puse a trabajar sobre un prototipo de juego 3D con el motor ShiVa 3d engine, no sin antes ir a por el dichoso adaptador para enchufes de UK-ES al chino más cercano, el resultado de las primeras pruebas se puede ver en estos vídeos.

Test de número de objetos:

¿Qué o quién es Kuzu?

Kuzu es cualquiera de vosotros o yo mismo, es la manifestación de nuestro propio ser, el juego al completo es una metáfora desde el nacimiento del micro-dragón hasta el final, que no os lo voy a contar XD
Cuando un niño nace, conoce a sus padres, estos les dan conocimientos y le insuflan sabiduría para desenvolverse en el mundo al que se debe afrontar y adaptar. En nuestra naturaleza humana disponemos de una parte lógica y de una emocional, igual que Kuzu , representado por la pasión del fuego y la pasividad del hielo, cada uno tiene un papel en nuestra vida.
Los enemigos del juego son representados por monstruos y su forma de actuar es la que tendrían nuestros propios miedos, es por eso que el primer miedo antes de salir de la zona de las cavernas ( el útero materno / la típica estampa familiar de la cueva de Platón con la hogera y las sombras proyectadas de este mito, os sonará), es el miedo a ser un individuo, a manejarse sólo en el mundo, el elemental de tierra amenaza al personaje intentando infundirle estos miedos al jugador si es que no los tuviera ya, preguntándole si cree que es capaz de salir victorioso ante semejante agresión como es la vida moderna y nuestra sociedad en diversas formas, aunque esto, es discutible.
Cada monstruo representa a un miedo o una debilidad nuestra,ya sea nuestros propios errores del pasado ( fantasmas de hielo o fuego: errores de nuestro razonamiento o nuestras emociones/ intuición ), etc.

Volviendo al apartado técnico…

¿Qué hay que optimizar?

Test básico con iluminación y proyección de sombras dinámica y estática:

Veréis, estas son pruebas de rendimiento, en el vídeo queda demostrado que se pueden crear cientos de objetos sin que el ratio de imágenes por segundo en pantalla se vea reducido notablemente. En los siguientes prototipos a este conseguí obtener 60FPS con muchos elementos dibujándose en cada frame, pero no tenía muchas llamadas de dibujo, ni efectos post-dibujado, ni iluminación dinámica o sombras.

Entonces, me dí cuenta de que al juego le faltaba algo, técnicamente habría que depurarlo durante unos meses hasta la demo que se encuentra ahora disponible en la tienda de OUYA.
Este es el vídeo de la demo en vimeo:

Sí, es sólo del nivel 4.

Como véis, este vídeo ya se utiliza iluminación y tiene mucha más vidilla, esto es debido al uso de técnicas avanzadas de batching, agrupación y compresión de malla, optimización de texturas (potencias de 2), reducción del número de triángulos y vértices, uso moderado de shaders, sistemas de partículas de una única partícula animada con un spritepack, y otras muchas cosas más,algunas las comentaré.

Algunas de las técnicas usadas

– Auto-batching: es como el batching de Unity, esta técnica se basa en tener objetos muy pequeños con un único material, sin iluminación ni sombras, 32 vértices de límite, una textura con un sólo mapeado.
– Optimización de esqueletos para animaciones de modelos: como mucho, los modelos han de tener 19 huesos (joints) en su esqueleto para ser optimizados/acelerados por la GPU del dispositivo ,en este caso la Tegra 2 de OUYA sobre Android.
– Mapas de iluminación: siempre que podáis, evitar el uso de mapas de normales, es decir, quitar todos los efectos en tiempo real con iluminación dinámica y generar mapas de iluminación sobre una escena con una luz estática (hornear también llamado baking).
– Combinación de mallas una vez optimizadas: una vez que hemos limpiado / eliminado agujeros de la geometría de cada componente de un nivel (escena) y optimizado su número de polígonos y vértices, hay dos caminos posibles que conozco, uno es generar las mallas de los modelos en el editor 3D y luego combinarlas para que sólo se realice una llamada de dibujo para todo la geometría del nivel una vez importado e instanciado. Otra, generar los niveles, la geometría en el juego y luego combinarla en tiempo real, por suerte, ambas opciones son factibles y muy valoradas a la hora de ahorrarnos FPS.
– Módulos de programación , número de llamadas de dibujo, mapa de texturas (atlas) para modelos y HUD, AI, Flocking, scripts de animación , cinemáticas, etc.: son todos estos elementos los que se han de optimizar para que un juego sea fluído.

Si alguien tiene especial interés en que desarrolle alguna de sus partes que me lo comente.

Espero que os guste tanto el juego como a mí hacerlo y jugarlo 🙂

El enlace a la demo del juego:
The Legend of Kuzu

Instalar el juego

Artículos relacionados

Exprésate dejando un comentario:

Introduce el captcha

Por favor escriba los caracteres de la imagen captcha en el cuadro de entrada