domingo, 28 de septiembre de 2014

Mars Colonial (Videojuego 3D)



Sinopsis:
Tras muchos esfuerzos y años de exploración espacial, finalmente los seres humanos hemos establecido una colonia en Marte para poder explotar sus recursos. Este anhelado sueño también nos ha revelado una inquietante pesadilla: no estamos solos en el Universo. Una sonda Von-Neumann también ha establecido su base en Marte. Este eficiente astillero automatizado es capaz de crear miles de robots ‘arácnidos’ cuya único objetivo es minar el planeta y autoreplicarse, acabando con cualquier obstáculo que se encuentre en su camino.
Marte es sólo el comienzo, todo nuestro Sistema Solar se encuentra en grave riesgo si consigue los recursos necesarios para conseguir su fin…


Descripción del juego:
Desde un punto de vista más prosaico, este juego sigue los esquemas de los clásicos juegos arcade de destruir ‘marcianos’. La mayor diferencia con éstos, es que toda la acción transcurre en un mundo infinito que simula ser Marte con modelos y escenas en 3D. Cuantos más enemigos destruyes, más aumenta tu nivel. Esto implica que pueden aparecer nuevos tipos de adversario (de momento sólo existen dos), además de que éstos irán creciendo en número y velocidad.
Existen una serie de recursos que se consumen conforme avanza la acción: munición, energía y salud. Los dos primeros se guardan automáticamente cuando acabas la partida para que dispongas de ellos al comenzar de nuevo. Estos recursos pueden reponerse en el transcurso del juego recogiendo las distintas cajas que aparecen en cuanto empiezas a carecer de alguno de ellos.
Otro de los valores que se conservan es el nivel alcanzado durante la partida, además de configuraciones como el idioma, sonido y filtros (dof y bloom).
La IA de los enemigos es bastante básica. Algunos te persiguen de manera constante provocando daños mediante el contacto con sus afiladas patas. Otros se sitúan a cierta distancia y disparan a placer. Los primeros pueden ser exterminados de un solo disparo, mientras que los segundos requieren un poco más de esfuerzo para ser derribados (tres disparos).


Algunas capturas de pantalla con el juego en funcionamiento

¿Qué herramientas se han empleado?
Este juego ha sido desarrollado básicamente con JMonkeyEngine (JME), Blender, Gimp e Inkscape.
JMonkeyEngine es un motor de juegos de código abierto y libre diseñado en Java que permite crear juegos 3D mediante ese lenguaje de programación.

Si sois lectores habituales del blog, sobre Blender, Gimp e Inkscape no tengo mucho más que añadir. El primero ha sido utilizado para crear los modelos y sus animaciones, mientras que tanto Gimp como Inkscape, se han empleado para la creación y edición de imágenes (texturas, fondos, interfaz, etc.).

JMonkeyEngine. Unos breves apuntes:
JME tiene un completo entorno de desarrollo (IDE) que utiliza todas las características de programación de la Plataforma NetBeans (autocompletado de código, herramientas de limpieza, integración VCS) y editores visuales que implementan distintas opciones y herramientas para modelos, terrenos, vehículos, etc. Además, cuenta con un completo conjunto de plugins que permiten complementar aspectos tan importantes como por ejemplo la propia interfaz del juego (Nifty GUI / XML) y que son actualizados automáticamente. Sin embargo, en este caso, he decidido no utilizar Nifty GUI y he partido de cero para implementar toda la  interfaz así como los botones y sus controles.

La incorporación de los activos o modelos digitales (Digital Art Assets) en la construcción del juego es realmente sencilla. Por ejemplo, en el caso de las imágenes basta con arrastrar desde el explorador de archivos a la aplicación. Los modelos en 3D se cargan a través de una herramienta de Importación que previsualiza el modelo, comprueba si existe algún problema y los convierte a un formato compatible llamado .j3o. Una vez importados se almacenan en la carpeta “assets” listos para ser cargados en cualquier visor, en el compositor de la escena (“Scene Composer”) o en el juego a través del “AssetManager”. Ahora tenemos todos los activos, pero ¿cómo se organizan dentro de la Escena?.


JMonkeyEngine en funcionamiento

En JME las escenas organizan todos sus datos jerárquicamente como si fueran un árbol: un padre puede tener múltiples hijos pero cada hijo solo un padre. Así, al actuar sobre el padre (mover, rotar, escalar, anexar, separar de la escena, etc.), el hijo recoge cualquiera de estas transformaciones. Por tanto, es importante planificar el esquema de tu escena desde el nodo principal (rootNode), pasando por cada uno de los nodos que vayas creando. En el último nivel se encontraría la geometría que les permite ser visibles al darles una forma, color, textura, etc.


Diagrama con la organización de la Escena

En cuanto al código, toda la programación en JME se realiza en Java, por lo que si te decides a juguetear con este programa es muy aconsejable que antes hayas adquirido unas nociones básicas en este lenguaje.

Este juego está estructurado en distintas Clases para tener más organizado todos sus elementos (jugador, enemigos, hud, sonido, etc.), separar los controles en algunos casos (p.e. la IA de los enemigos) y tener un mejor acceso y control sobre las distintas pantallas (Start, Main y Float Window). Deben existir cientos de métodos o funciones, y ya no digo de atributos o variables, que he intentado optimizar en la medida de lo posible. Sin embargo, en un proyecto tan vasto existen bastantes cosas que se escapan y que pueden derivar en algún posible bug o falta de rendimiento. Por mi parte intentaré ir mejorando estos problemas si el tiempo y las circunstancias no lo impiden.

Requisitos mínimos del juego:
Sistema operativo
Linux, Windows
Memoria (JVM tamaño de almacenamiento dinámico)
> 10 MB + memoria para los activos digitales (modelos, texturas, sonidos, etc.)
CPU
> 1 GHz
Tarjeta gráfica
AMD/ATI Radeon 9500, NVIDIA GeForce 5 FX, Intel GMA 4500, o superior con soporte para OpenGL 2.0 o superior (las bibliotecas nativas se incluyen en la descarga)
Java (Entorno de ejecución)
Java 5 o superior
Es necesaria una máquina Virtual Java (JVM) para ejecutar los juegos JME.
Normalmente JVM se encuentra preinstalado en la mayoría de equipos, aunque puede obtenerse gratuitamente desde http://www.java.com

Instalación:
El juego puedes descargarlo de manera gratuita desde sourceforge.

•  Linux
Descarga el juego, descomprime la carpeta y ejecuta “MarsColonial.sh”.
Si tienes un sistema basado en Debian, también tienes la opción de instalarlo mediante un paquete “.deb”.

•  Windows
Descarga el juego, descomprime la carpeta y ejecuta “MarsColonial.exe”.

•  MacOSX
Descarga el juego, descomprime la carpeta y ejecuta “MarsColonial.app”.

Controles del juego (Atajos de Teclado):
•  W, S, A, D o teclas de dirección: Movimiento del jugador.
•  Barra espaciadora: Disparo.
•  X: Cambiar la posición de disparo del arma.
•  M: Activar o desactivar el sonido.
•  P: Hacer una pausa o continuar con el juego
•  Esc: Cerrar el juego.

Saludos y espero que paséis algún buen rato con él.

jueves, 26 de septiembre de 2013

Neandertal

Vuelvo con un nuevo trabajo que combina dos de mis herramientas preferidas: Blender (Cycles) y Gimp. Se trata de la representación idealizada de un Homo Neanderthalensis, morador de la Europa y el Próximo Oriente de hace entre 230.000 y 28.000 años, y que convivió con los primeros hombres modernos europeos.
Físicamente se caracterizaban por tener una gran robustez: extremidades cortas, pelvis ancha y una altura entre 1.60 y 1.70 metros. En cuanto a su cráneo, destacaba por tener el toro supraorbital bastante marcado, una frente baja e inclinada, un mentón poco marcado y una capacidad craneal incluso superior a la de nuestra especie (1.550 cm3 frente a 1.200 cm3).

En cuanto a la imagen: el modelado, la pose, materiales, iluminación y render han sido realizados con Blender, aunque con bastante postproducción final para afinar determinados detalles. Este trabajo ha sido básicamente una prueba para comprobar las posibilidades de dos nuevas características implementadas en el motor de render Cycles:
- Subsurface scatering: Un nuevo shader para mejorar la representación de piel humana. 
- La capacidad para renderizar pelo (todavía en la rama Experimental, aunque completamente funcional).

Con estas dos características, ya podemos considerar que Cycles alcanza la madurez necesaria para poder utilizarse con garantías en la mayoría de proyectos. De hecho, sorprenden los buenos resultados y la relativa velocidad en los renders (y eso que al estar en la rama Experimental todavía no se emplea el renderizado GPU en el renderizado de cabello). La estabilidad es bastante buena, aunque puede verse comprometida en algunos momentos si el número de polígonos o de partículas de pelo es demasiado elevado.

De obligada visita para todo el que quiera experimentar con estas dos características son los siguientes enlaces (ambos en inglés):

De hecho, en mi modelo de neandertal empleo el shader de Matt que, con algunos ajustes y una adecuada iluminación, puede lograr resultados realmente sorprendentes. Por su parte, Andrew explica en su página cómo renderizar el cabello con Cycles y ajustar su correspondiente material con resultados igualmente excelentes.

La técnica base de modelado ha sido poligonal con el posterior esculpido de los detalles utilizando las herramientas propias de Blender para estos menesteres. Por último, he empleado Gimp para realizar los pertinentes retoques en postproducción, sobretodo, en la zona de la cara y ojos. De hecho, había detalles que no me convencían y que partían de un modelado que no acaba de quedar redondo (de hecho, ahora mismo volvería a reorganizar la malla de nuevo).

A continuación tenéis un cartel de 44x26 cm y un fondo de pantalla de 1024x768 píxeles que he preparado con unas vistas frontal y lateral del modelo:

Cartel (44x26 cm)
Fondo de pantalla (1024x768 px)

Saludos y espero que os guste.

AddThis