Mostrando las entradas con la etiqueta Programación de Videojuegos. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Programación de Videojuegos. Mostrar todas las entradas

sábado, 28 de noviembre de 2009

Creación de game engine y editor de niveles.

En el mundo de los videojuegos la creación de un game engine no es una tarea sencilla, ya que para poder implementar un motor se requiere de conocimientos en diversas área técnicas, tales como el manejo de APIs gráficas (OpenGL, DirectX), sonidos, física, inteligencia artificial, y muchas otras.

A nivel de desarrollo amateur muchas veces conviene hacer uso de uno de los múltiples motores disponibles para poder llevar a cabo la implementación de un videojuego. Sin embargo, para las personas que desean hacer del desarrollo de juegos una actividad profesional (por ejemplo, como Ingeniero de Desarrollo), es altamente recomendado el poner en práctica los conocimientos de programación y de diseño de interfaces para programar un game engine y un editor de niveles.

Es así como desde hace algunos años he destinado tiempo de mis ratos libres para trabajar en un proyecto personal de desarrollo de un game engine 3D orientado a juegos en tercera persona. A pesar de haber estudiado Ingeniería Civil en Computación, esto me ha servido para refrescar y profundizar mis conocimientos en el área de modelamiento geométrico, física newtoniana, inteligencia artificial (máquinas de estados finitos, lógica difusa), y muchos otros conceptos que si bien pueden llegar a sonar un poco complejos y/o abstractos, se entienden muy bien al momento de aplicarlos en el computador y observarlos de forma visual.

A continuación publico una imagen del editor de niveles que he desarrollado, el cual permite entre otras cosas cargar modelos 3D en distintos formatos (COLLADA, 3DS/MAX, MD5, OBJ, etc), los cuales pueden ser posicionados en un mundo tridimensional (coordenadas X, Y, Z), y esta información es almacenada en formato XML como parte de un nivel de un juego.





Como dato final, puedo decir a modo personal que una de las cosas más complicadas en la creación de un editor de niveles es la usabilidad de las herramientas que uno dispone para que sean utilizadas por los diseñadores de los juegos, ya que la idea es que el editor sea lo más cómodo, fácil de usar y que no sature al usuario con múltiples barras de herramientas, botones y otros artefactos, pero siempre teniendo en cuenta que el editor no debe sacrificar el potencial de las múltiples funcionalidades que están disponibles para diseñar el videojuego.

miércoles, 25 de noviembre de 2009

¿Qué es un Game Engine?

Un Game Engine o "motor de juego" es una pieza de software que permite a los desarrolladores implementar los aspectos técnicos involucrados en un videojuego, tales como los gráficos, sonidos/música, detección de colisiones, y muchas otras tareas complementarias.

En la actualidad existe una serie de motores especializados en 2D y 3D, tanto de tipo comercial como del mundo open source, los cuales pueden ser usados por los desarrolladores para implementar sus videojuegos, ya sean de tipo FPS, RTS, u otra categoría.

La utilización de un game engine permite que los desarrolladores puedan centrar sus esfuerzos en la implementación de el o los videojuegos diseñados, ahorrando las tareas de tener que crear desde cero toda la infraestructura que soportará el universo del juego. Sin embargo, para que esto pueda resultar, en algún momento alguien tuvo que haber diseñado y programado el motor, lo cual es una tarea bastante compleja que puede llegar a tomar bastante más tiempo que el desarrollo de un solo juego.

Para facilitar la creación del mundo en un videojuego, los game engines proveen herramientas como editores de geometrías, editores de sistemas de partículas, etc., cuyo objetivo es proveer funcionalidades visuales que permitan a los desarrolladores ir observando en todo momento cómo se verá el juego al momento de ejecutarse.

Un buen sitio que permite revisar el estado del arte de los motores para distintos lenguajes de programación es DevMaster, en donde pueden encontrarse los motores pagados y gratuitos más populares para ser usados con diversos lenguajes, tales como C++, Java y otros.

Junto a esto, una excelente noticia fue la reciente liberación del motor Unreal Engine 3, el cual fue utilizado para crear los juegos Unreal Tournament 3 y Gears of War. Usando esta tecnología es posible que desarrolladores amateurs puedan experimentar gratuitamente (mientras sea sin fines comerciales) con herramientas de primer nivel para realizar su propias creaciones.

miércoles, 18 de febrero de 2009

Programación de videojuegos: patrones de diseño.

En el ámbito de las aplicaciones empresariales es muy común encontrar sistemas computacionales que han sido desarrollados considerando el uso de patrones de diseño. En particular, en el mundo de las aplicaciones J2EE existen los patrones de orientación a objetos y de la definición Core J2EE de Sun Microsystems, tales como los patrones Singleton, Data Access Object (DAO), etc., cuyo objetivo es entregar un conjunto de buenas prácticas y soluciones a problemas comunes que beneficien a la arquitectura, diseño y programación de sistemas complejos.

Tomando en cuenta que el desarrollo de un videojuego puede llegar a ser un proyecto de grandes dimensiones, cabe preguntarse qué tipos de estándares, recomendaciones y/o buenas prácticas pueden ser utilizadas para potenciar su desarrollo.

Un patrón de arquitectura clásico que puede ser utilizado en la creación de un videojuego corresponde al Modelo-Vista-Controlador (MVC), el cual postula realizar una separación entre la zona que posee los datos de una aplicación, la zona que considera la visualización de los datos, y la zona que permite contener la lógica de control de estos datos.

Para el caso de un videojuego, el Modelo puede estar compuesto por objetos que mantienen el estado del mundo y de los personajes que participan en el juego (ej: llevan el control de la energía de los jugadores, la cantidad de municiones de cada uno, etc.); la Vista puede estar compuesta por objetos que manejan y despliegan las animaciones y sonidos de los personajes del juegos, los cuales hacen uso de los objetos del Modelo para observar su estado y determinar qué es lo que se debe desplegar (ej: se despliega una animación de un personaje feliz cuando su energía está al máximo); y por último el Controlador puede estar compuesto por objetos que responden a los eventos enviados por el usuario del juego, tales como los movimientos que se realizan a través de un joystick/teclado/mouse, los cuales invocan cambios en el Modelo y probablemente también en la Vista (ej: el Controlador recibe una orden del usuario que le indica que el personaje debe saltar, por lo que interactúa con el Modelo para ver si es posible realizar el salto según las condiciones del juego en ese momento).

Un muy buen artículo sobre el uso del patrón MVC aplicado en un videojuego comercial puede ser visto en el sitio de Gamasutra, en el cual se ejemplifica su uso mediante el modelamiento de un tanque para un juego 3D de guerra (hacer click acá).

Próximamente discutiremos en este blog otros patrones útiles para el diseño y programación de videojuegos.