En éste artículo hablaré de las conclusiones a las que he llegado tras el desarrollo del sistema de generación de mapas procedimental de Reactor Heart. Lo que explico no tiene por qué ser lo mejor, de hecho hoy en día sigo buscando mejoras a mi sistema. Al principio cometí muchos errores de novato en este campo y aprendí bastante superándolos, espero que le sea de ayuda y si alguien sabe como mejorar mi sistema sus sugerencias serán bienvenidas.

Cuando empecé a desarrollar Reactor Heart pronto me di cuenta de que necesitaría un universo infinito y además que se generara automáticamente. Habría sido un juego muy malo si tuviera un universo limitado por lo que empecé a esbozar las primeras ideas basándome en la información que encontré en diversas páginas y artículos que hablaban sobre el tema de la generación procedural.

La primera idea fue la de hacer un generador de sectores gigantes que alojarían sistemas planetarios, nubes de asteroides y todo tipo de cosas. Así que empecé a hacer funciones que generaban los elementos básicos del sistema planetario: planetas, asteroides, lunas. Los planetas eran círculos rellenos de radio variable, las lunas eran lo mismo pero más pequeño y los asteroides los generaba con un algoritmo que creaba un contorno con una forma lógica y medianamente redonda.

PlanetWithMoon Asteroid AsteroidPlanet

Y con estos elementos conformé lo que sería la generación de un sistema planetario en el que habían planetas en determinadas órbitas alrededor de un centro(en el que colocaría una estrella). Se disponían con un ángulo y distancia del centro aleatorio, restringido con unos rangos razonables para que estuvieran posicionados coherentemente.

Generation

Efectivamente el sistema de generación funcionaba bien en cuanto a lo que generaba pero había cuatro problemas:

  • Tardaba 15 segundos en generarlo todo.
  • Las formas de los asteroides no se asemejaban a lo que yo quería conseguir.
  • Se tardaba mucho en generar cada asteroide con el agloritmo que había creado.
  • Dependiendo de la disposición aleatoria podían quedar espacios muy vacíos.

Para un mapa limitado un tiempo de 15 segundos no es tan malo porque haces la generación una vez y ya está, pero cuando se trata de un universo enorme que los usuarios van a querer recorrer durante horas es impermisible dejarlos esperando ese tiempo entre sistema y sistema. Además los asteroides no tenían una forma muy buena porque tendían a ser romboides ademas de que tardaban demasiado en generarse.

El primer problema que arreglé fue el de los asteroides que era el más evidente. Cree un editor de asteroides en el que podía pre-diseñar un set de asteroides y guardarlo en un fichero que luego cargaba el videojuego. Al eliminar la generación de la ecuación el tiempo mejoraba muchísimo. Mejoró más aún cuando incorporé pre-procesamiento a la hora de exportar en el editor. A parte de esto las formas de los asteroides eran más coherentes y al combinarse formaban asteroides más grandes con formas geniales.

Una vez solventado el problema de los asteroides seguía sin tener un tiempo aceptable, aunque era mucho mejor que el anterior. Tenía dos opciones:

  • Trabajar en paralelo para mejorar los tiempos del algoritmo.
  • Reducir la complejidad del sistema que generaba.

En muchos sistemas que requerían de generación en tiempo real lo hacían reduciendo el tamaño de la “unidad” de generación para así poder particionar mejor el trabajo en trozos que costaba menos tiempo de cómputo generar. En ese entonces mi “unidad” era el sector y para seguir esta nueva filosofía decidí hacerlos más pequeños. El sector sería un espacio de 6×6 chunks (frente a los 50×50 que ocupaba el sistema planetario) que podría estar ocupado por un planeta, un planeta con lunas o asteroides, una nube de asteroides, una nebulosa, una estrella, etc…  El sistema funcionó a la perfección. Reduje el tiempo a 0.07-0.1 segundos de media utilizando este método( y también mediante algunas optimizaciones del proceso a bajo nivel).

Tip: Utilizar una herramienta de profiling como gprof ayuda mucho para ver en qué funciones o métodos se hacen más llamadas y así identificar la parte del código que más necesitas optimizar .

SectorSystem

Todavía falta paralelizar el sistema aunque lo diseñé pensando en el futuro para que en versiones más avanzadas me sea fácil integrarlo. Ésta es mi experiencia pero seguro que hay muchas formas de mejorarla.

Después de corregir muchos bugs, ya tenemos una versión estable de Reactor Heart  preparada par a jugar, en la que reflejamos el progreso realizado hasta ahora. Les invitamos a que la prueben, comenten, opinen y nos envíen las fotos de sus creaciones espaciales. También agradeceremos que nos informen de los bugs o errores que puedan encontrar en el juego.

 

Tenemos pensado hacer una galería con un selección de fotos con las mejores creaciones de la comunidad. Envíanos una foto al correo de contacto y quizá aparezca la foto de tu nave con tu nick/nombre en la galería.

 

Para los participantes de la #TLP2k13 estaré a vuestra disposición para escuchar opiniones, sugerencias, preguntas…, el sábado a las 10:30.

 

Como siempre, para una información actualizada sígueme en @nesvi7.

 

Linux 64

Reactor Heart's Pre-Alpha #3 Linux 64 download

Windows 32-64

Reactor Heart's Pre-Alpha #3 Windows32-64 download

 

Crystal

Después de más de un mes de inactividad debido a la temporada de exámenes, hemos reanudado el desarrollo de Reactor Heart, además con muchas noticias nuevas acerca del proyecto.
Para empezar, éste año Francisco Viña y yo (Néstor Viña) daremos una ponencia en la “Tenerife Lan Party 2k13″ en la que hablaremos de todo el recorrido del proyecto hasta ahora, de su estado actual y de las cosas que tenemos planeadas para el futuro. Pueden ver toda la información al respecto aquí.
No podríamos asistir sin nuestra primera generación de merchandising ( solo para unos pocos afortunados cercanos y para nosotros =D ).

camisetaReactorH

Aparte hemos decidido liberar una versión jugable en la fecha de inicio de la TLP2k13, el 16 de Julio, así que estén atentos. Esto es en lo que actualmente estamos trabajando, por eso nos hemos centrado durante dos semanas en una corrección masiva de bugs y detalles. También hemos añadido otras novedades. La lista completa del progreso hasta ahora desde la última actualización sería la siguiente:
  • Correción masiva de bugs
  • Añadido sistema de minería básico
  • Añadidos nuevos minerales
  • Controlada la frecuencia de aparición de minerales
  • Añadidos primeros esquemas de crafting ( requisitos materiales + crafteo = resultado)
  • Añadido sistema de pintura
  • Sombras mejoradas

 

Estamos haciendo la página bilingüe(Español-Inglés). Ahora el blog está traducido al español y en breve el resto de la página lo estará también.

 

Tenemos que agradecer al equipo de Innova7 (organizadores de la TLP 2k13) por brindarnos la oportunidad de tener un espacio en su evento.

 

Les dejo algunas imágenes del progreso:

Crafting NaveNesviRojaZul

 

En ésta ocasión les traemos los efectos de aterrizaje y despegue de las naves espaciales. Básicamente éstas son las novedades:
  • Cuando pulsamos la barra espaciadora y la nave está aterrizada inicia el despegue.
  • Cuando la nave está volando y pulsamos espacio si no hay obstáculos aterriza.
  • Bugfixes del sistema de crafting.

Reactor heart (RH) ya tiene sistema de crafting funcional. Ahora por fin será posible el uso de minerales para la creación de naves. Es un sistema simple, directo y rápido con el que tratamos de evitar convertir el proceso de crafting de RH en algo tedioso. Para craftear algo sólo hay que seguir dos pasos :
  1. Activar el botón de crafting: aparecerá el panel con los items que podemos craftear.
  2. Pulsar en una opción: Una vez pulsemos en uno de los items se nos restarán del inventario los recursos necesarios para producirlo y se nos añadirá el nuevo ítem.
El panel de crafting se ha programado para que sea adaptativo con diferentes resoluciones y también está animado. Para este nuevo elemento gráfico de la interfaz de usuario, hemos querido darle un diseño llamativo inspirado en la mecánica industrial que encaja coherentemente con la funcionalidad del crafting. También le hemos cambiado la estética al antiguo panel del inventario para que siga la del panel de crafting.
Todavía hay que revisar los requisitos de recursos para cada pieza y hacer un esquema de crafting definitivo. Disfruten del video:

 

Imagen Conceptual
La imagen conceptual está ligada al desarrollo de una idea cuyos elementos intentan definirla a grandes rasgos. En el campo de la creación artística se usa como primer recurso para representar la idea. De alguna manera, imprime la esencia con la que se trabajará la realización final y sólo tiene en cuenta los aspectos básicos necesarios para poder configurar la imagen mental. Lo que hoy en día se entiende como arte conceptual, en otra época no tendría valor más allá de ser un simple apunte para la realización posterior de una gran obra.  Este tipo de anotaciones gráficas o expresiones plásticas personales del bloc del artista, han salido a la luz no sólo como parte necesaria del proceso creativo, sino como aportaciones relevantes al mercado del arte actual. Sin embargo, en la mayoría de los casos siguen cumpliendo su función primigenia: dar apoyo a la creación final realizando imágenes que describan las escenas, los objetos, los personajes o secuencias de cualquier producto en desarrollo.

 

En resumen podríamos concluir: 
La idea es el producto de la inspiración, ésta genera imágenes mentales que a continuación podemos desarrollar y plasmar en imágenes gráficas, dando como resultado la Imagen conceptual.

 

Imagen conceptual: Paisaje Planetario 1. © Francis Viña - www.reactorheart.com
Imagen conceptual: Paisaje Planetario 1.
© Francis Viña – www.reactorheart.com
El Bosquejo y el Boceto.
 
Bosquejo: 
La primera anotación realizada en dibujo se denomina bosquejo. El bosquejo intenta simplificar la idea, en este sentido guarda estrecha relación con la imagen conceptual, incluso pudiéndose tratar como homólogos. Responde a una creación de la imagen a través de formas simples, sin prejuicios de tener que ser una representación fiel del producto final, por lo tanto, no se atiende de forma esmerada a las proporciones de la figura, sino a la captación visual y primaria de la misma.
Bosquejos en editor de pixel y técnica tradicional grafito. © Francis Viña - www.reactorheart.com
Bosquejos en editor de pixel y técnica tradicional grafito.
© Francis Viña – www.reactorheart.com
 
La ejecución de un bosquejo, en el arte tradicional, se identifica fácilmente por su ejecución a lápiz, bolígrafo, plumilla, etc., sobre papel, sin descartar también su ejecución con las herramientas digitales (programas de retoque fotográfico, vectoriales, sencillos programas para pixel art, etc.) que se hacen casi indispensables en la actualidad, dada su versatilidad y rápida obtención de la imagen a través de los métodos de impresión, así como la publicación en los medios universales de divulgación que ofrece Internet.

 

Bosquejos en editor de pixel y técnica tradicional grafito. © Francis Viña - www.reactorheart.com
Bosquejos en editor de pixel y técnica tradicional grafito.
© Francis Viña – www.reactorheart.com
Boceto:
La definición de boceto responde al dibujo que materializa la idea de forma más elaborada. Incide de manera concreta en la representación de la figura, por lo que generalmente contempla el estudio del volumen a través de la iluminación, sombreado, color, textura, etc., así como su propia composición respecto al formato definitivo en el que se realizará. El boceto pretende mostrar información objetiva y determinante de la obra que queremos representar, aún así, no está exento de futuras modificaciones que surgen en el transcurso de la creación. En cuanto a los medios y herramientas para su realización, se usan prácticamente los mismos descritos en el apartado anterior.

 

Bocetos: Técnica bolígrafo. © Francis Viña - www.reactorheart.com
Bocetos: Técnica bolígrafo.
© Francis Viña – www.reactorheart.com
 
El boceto se usa como recurso general para la expresión de las ideas, es obvio por tanto la utilización en la creación gráfica de los videojuegos. Una de las tendencias plásticas actuales en este campo, nos sitúa en una estética visual retro y pixelada de la imagen, que coexiste con relevancia, entre otras de mayor realismo y potencia gráfica. El auge de los videojuegos indie, junto con la aparición de tutoriales que explican las técnicas exclusivas para desarrollar un buen sprite, han fomentado la creación del Pixel Art. En este sentido, podemos observar como el boceto también puede ser realizado directamente en los programas informáticos especializados en esta técnica.
 2Articulo Pixel Conceptual Art

CalimoComposicionComposicionMineralesPixel

 

Hola, esta vez les traigo una actualización no solo con screenshots sino también con un video que mostrará mucho mejor las características que RH tiene hasta ahora. Desde hace un mes han habido varias mejoras en el juego entre ellas :
  •  Ahora los motores se pueden girar. 
  • El personaje tiene las animaciones caminando en todas las direcciones. 
  • Los jwakins se disponen automáticamente junto con la generación del terreno. 
  • Los motores tienen una animación de fuego cuando se encienden. 
  • Mejora en los efectos de las interfaces que hacen mucho más usable el sistema. 
  • Cuando un bloque no esta encajado como debería sale el bloque de error. 
  • Acelerado el algoritmo de generación del terreno (9s to 0.2). 
  • Añadida la pieza “punta de nave” al inventario para ponerla de manera independiente. 
  • Añadido sistema de sonidos con algunos sonidos beta. 
  • Ahora el editor de prefabs precalcula la estructura para acelerar el proceso de disposición.

 

Screenshot488783Screenshot338342

BocetosPA2-1BocetosPA2-4

Finalmente hemos lanzado la página web de Reactor Heart con nuestro último año de trabajo. Hasta ahora no habíamos publicado nada relacionado con el juego por lo que agradeceremos cualquier tipo de comentario con respecto a la web o a las características del juego. Ten en cuenta que la versión actual es una versión alfa y que esta bajo desarrollo (todavía somos solo dos a cargo del proyecto). Actualizaremos este blog y el de IndieDB tan pronto como sea posible con nuevos contenidos ( probablemente videos de gameplay…). Para mantenerte al día sígueme en Twitter (@nesvi7).

 

LaunchSketch