January 18th, 2008

El modelado de arboles es una cosa que, al menos para mi todo un principiante, es la cosa mas complicada y tediosa de hacer a “mano” en un software como max, blender, lightwave, etc. La cosa se vuelve aún mas complicada si lo que se intentan hacer son arboles low-poly para una aplicación en tiempo real donde se tienen que ver con iluminación en escenarios exteriores como un bosque, no solamente uno sino varios de estos modelos simultáneamente.

Estas son algunas soluciones para realizar arboles en 3d, que van desde lo casual (como un in-house tool) hasta lo muy profesional y que pueden ser aplicadas al desarrollo de videojuegos.

  • SpeedTree: Este es uno de los pesos pesados en cuanto a producción de arboles para videojuegos se refiere, ha sido licenciado por casas como Electronic Arts, Rockstar games, Atari, Epic Games, Microsoft games, entre otras y utilizado para juegos de la talla de Elder Scrolls IV: Oblivion. Por lo refere a licenciamiento como es de esperar solo está al alcance de bolsillo muy grandes, con cerca de $9.800 USD por título que utilice la tecnología. SpeedTree no solo ofrece utilidades para el modelamiento y generación de árboles en tiempo real, sino que también posee un sistema propio de renderizado bastante eficiente que puede ser adaptado para diferentes motores gráficos como ocurrió con Unreal Engine 3.

    Algunos screenshots de sus demos oficiales:

    SpeedTreeRT SpeedTreeRT SpeedTreeRT SpeedTreeRT

  • ngPlant: Este es un paquete opensource bajo licencia GPL para modelamiento de arboles. El sistema es fácil de utilizar, aunque el software carece de varias funciones básicas (ctrl-z por ejemplo XD ) y en principio produce árboles high-poly, aunque con algunos trucos (texturas de ramas completas cof cof) se pueden conseguir modelos en low-poly. Otra desventaja es que no posee exporter mas alla del obj.

    ngPlant ngPlant

  • Continuar Leyendo… »

November 7th, 2007

Hasta hace unos años (principio de la actual década) la seguridad en videojuegos se limitaba a temas como la protección anticopia para ir en contra de la piratería y alguna que otra implementación para FPS y juegos de estrategia para evitar el abuso de jugadores sobre partidas en LAN o sobre servidores. Con el advenimiento de juegos masivos MMORPG, los hackers y el denominado “online cheating” toman de nuevo un papel a tener en cuenta a la hora de diseñar y mantener la seguridad de los videojuegos.

Este artículo no es una guía para hackear videojuegos, es una forma de mostrar a los desarrolladores las diferentes formas en que sus juegos serán explorados con el fin de obtener ventajas que no fueron contempladas, desde la perspectiva de un jugador y programador. El hackeo es una actividad prohibida por los T.O.S de la mayoría de videojuegos y es considerada una actividad ilegal en algunos países. Bajo este punto es necesario aclarar que un “glitch” no es considerado una forma de hack, debido a que es una característica inesperada que los jugadores descubren en el juego sin utilizar herramientas extra o crear modificaciones no permitidas sobre el mismo.

OBJETIVOS
Dentro de los objetivos más comunes de los hackers se encuentran:

  • Dinero: Generar dinero de juego en grandes cantidades, de manera rápida y automática.
  • Nivel: Aumentar un personaje de nivel sin realizar las actividades que el juego indica, haciéndolo igualmente de manera rápida y preferiblemente automática.
  • Creación de Items: Muchos de los MMORPG poseen ítems de difícil obtención o que es necesario pagar dinero real para su obtención. Los hackers buscan crear estos ítems saltándose los procesos de búsqueda, creación, etc.
  • Duplicación de Items: Se parten de ítems que posea el jugador para generar copias con diversos motivos ( ventas in-game, venta out-game, etc).
  • Continuar Leyendo… »

June 26th, 2007

Es muy común que los grupos starter de creación de videojuegos, bien sea modding o de contenido original, no puedan poseer un espacio físico para trabajar, porque no es posible (diferentes ubicaciones geográficas), cuesta dinero mantener un lugar (alabados los garajes) o cualquier otro inconveniente. Aún si es posible contar con dicho espacio es necesario que el trabajo con archivos (especialmente código fuente) sea lo mas organizado y seguro posible, adicionalmente a poder compartirse entre todo el grupo o al menos los interesados.

El control de versiones es una manera por lo general centralizada de mantener un historial coherente de todos los cambios realizados a un conjunto de archivos, lo que permite compartir, comparar y restaurar a estados anteriores dichos archivos. Esta solución es usada en la industria para proyectos medianos-grandes y en los proyectos open source, porque se adapta a las necesidades de desarrollo.

Es posible tener los repositorios de versiones en linea (accesibles a través de Internet) o en un entorno cerrado como una red local, todo lo que se necesita es un equipo servidor y para los casos particulares de cada software de Control de Versiones un cierto sistema operativo o extensión. Existen paquetes de Control de versiones como casi cualquier otro tipo de software en este momento en versión Open Source y de software propietario. Entre los mas populares están:

- CVS (Concurrent Versions System): Desarrollado por GNU y distribuido bajo licencia GPL, fue durante mucho tiempo el mejor sistema Open Source para el control de versiones, pero actualmente ha venido siendo desplazado por SVN. Tanto el sistema cliente como el servidor pueden ser instalados en varios sistemas operativos ( irix, sunOS, linux, windows).

- SVN (Subversion) : Fue diseñado como el sucesor de CVS, es mas robusto, rápido y soporta algunas nuevas características que su antecesor no tenia como por ejemplo que es capaz de detectar diferencias entre archivos y enviar solo los cambios (no el archivo completo), es eficiente con archivos binarios, debido a que se integra con apache tiene características avanzadas para autenticar archivos, entre otros. Existen varias versiones para cliente/servidor como TortoiseSVN, Subclipse, ViewVC. Es distribuido mediante licencia Apache/BSD.

- SourceSafe (Visual SouceSafe) : Es el producto de control de versiones de Microsoft orientado hacia su producto Visual Studio. El precio de este paquete ronda los $400 - $500 dolares. Alterno a este paquete Microsoft ofrece el Team Foundation Server que además de el Control de Versiones en código ofrece un conjunto herramientas de colaboración de grupos mas completo, pero a un costo mas elevado ($500 versión CAL y $2800 versión Server).

- Plastic SCM Otro software comercial que es posible obtener desde $180 dolares la versión básica en adelante. Se integra con los IDE Visual Studio y Eclipse, basado en copias locales de parte del contenido del servidor. Funciona en sistemas operativos como Windows XP, Server 2000 y 2003, Linux, MacOs y Solaris. A diferencia de otros paquetes similares tiene muchas formas gráficas de mostrar los cambios en archivos individuales y en el proyecto, el branch se hace según el patrón de trabajo (ellos recomiendan una rama por tarea) y en el merge se hace seguimiento a todas las integraciones, también hace posible el merge automático.

A parte de los paquetes de control de versiones basados en arquitectura cliente-servidor, existen sistemas distribuidos como el Aegis orientado a desarrollos basados en metodologías Extreme Programming, GNU Arch que se considera el proyecto base para los distribuidos, aunque en estos momentos ya no se encuentra en desarrollo activo y Monotone que es similar al GNU Arch, pero que se encuentra en desarrollo. La mayoría de estos sistemas se basan en una fuerte encripción de datos para permitir enviar los paquetes a través de redes no-seguras y protocolos como netsync, rsyn y aún del tipo p2p para transmitir datos entre los diferentes usuario.

Existen empresas que ofrecen el servicio de alojar repositorios como por ejemplo freepository (gratis pero con acceso web únicamente) y Hosted Projects (pago), también algunos servicios de host regular como DreamHost dan SVN y CVS para algunos de sus planes.

March 2nd, 2007

meditando.jpg

Una pregunta no recurrente, sino obligatoria a lo hora de hacer videojuegos es ¿Por donde empiezo?. Diferentes personas ofrecerán respuestas variadas a esta pregunta. Probablemente si se hace en un foro de programadores las respuestas podrían ser de la siguiente índole:

  • Lo primero que hay que hacer es programar, para eso hay que aprender c, c++ , c#, assembler o algo por el estilo
  • Lo que hay que aprender es un API gráfico como OpenGL o DirectX
  • Con DirectX y OpenGL nunca se puede terminar un juego decente, lo mejor es aprender a manejar una engine como Ogre, Crystal o Torque
  • Con una engine tampoco se termina nunca nada, todo eso ya esta echo y lo mejor es usar un programa como RPGMaker o FPSMaker en los que no es necesario saber programar
  • No, lo primero que hay que hacer antes de empezar con un MMORPG es coger un libro de algebra lineal y estudiar como loco hasta que entienda que es un sistema uniforme de coordenadas, luego coger otro libro de computación gráfica y programar su propio SDK de gráficos, luego hacer un clon de mario, tetris, pacman, galaga, un rpg pequeño, mediano y grande, un juego en linea pequeño, mediano y luego tal vez si un MMORPG (bueno, esta me la invente pero ganas no me han faltado de colocarla en los foros)
  • etc, etc etc

Así que, ¿realmente cuanto hay que saber de todo esto para realizar un videojuego?, una respuesta que me ha parecido muy acertada es la que ofrece a manera de analogía la primera edición de la OpenGL Superbible:

In reality, yes, you can get along just fine without understanding the finer mathematics of 3D graphics, just as you can drive your car every day without having to know anything at all about automotive mechanics and the internal combustion engine. But you’d better know enough about your car to realize that you need an oil change every so often, that you have to fill the tank with gas regularly and change the tires when they get bald. This makes you aresponsible (and safe!) automobile owner.

Richard S. Wright, Jr. - OpenGL SuperBible First Edition p.221-222

Respecto mi punto de vista es:

  • Los creación de software no solo consta de programación
  • Un videojuego no consta solo de gráficos “bonitos”, de hecho muchos pésimos videojuegos son solo eso, gráficos bonitos
  • Todo proyecto, sea puentes o software requiere de planificación, c, ogre, xmaker y todo eso son tecnologías de creación, no metodologías de desarrollo
  • Como todo en esta vida la creación de videojuegos se da por etapas, uno no puede mover los brazos y esperar levantar vuelo a los 5 minutos, o lo que es lo mismo, si uno no puede hacer un clon de pacman, ¿Realmente espera terminar un MMORPG?
  • Todo producto bien sea comercial o OpenSource está en constante desarrollo, posee fallas y limitaciones. No creo que sea necesario aprender cada pequeño detalle que determina el funcionamiento de SDK tan complejos como un motor gráfico o de videojuego (aunque es genial si lo logra), pero si no se tiene al menos una idea de como funciona, lo mejor es ponerse a rezar para que nunca fallen o se necesite de ellos mas allá de lo que ofrecen, porque en ese momento se estará “varado” en el sentido en que menciona la SuperBible.
  • Si no presta atención a la experiencia de otros, eso quiere decir que le gusta cometer errores que otros han cometido, lo que no está mal, pero consume tiempo y energía moral.

Como última señal es buena idea leer un poco, no solamente de programación y gráficos, sino también de manejo de proyectos, grupos, documentación en Ingeniería de Software y otros tantos temas que se pasan por alto, solo por el afán de ver resultados a través de la programación y el 3ds Studio.

February 22nd, 2007

La generación procedual, semialeatoria y aleatoria de terrenos se ha vuelto desde hace un par de año un componente fundamental en la creación de niveles para juegos como RTS, FPS, aventuras, MMORPG y en general los juegos que requieren de grandes paisajes exteriores que de otra manera serían dispendiosos de realizar por un artista del CG, aunque hay que ver que cuando se realiza “a mano” por un profesional, la calidad es superior.

Estas son un conjunto de herramientas tanto libres como comerciales que he ido encontrando en la red:

bryce
Bryce: Hace algún tiempo mencioné esta herramienta porque se pudo conseguir por un tiempo la versión 5 de manera gratuita. La versión actual, la 6, permite exportar los terrenos generados a formatos como lightwave (.lws), directx (.x), 3ds studio (.3ds), vrml (.wrl) y algunos otros. Los terrenos de todos modos tienen que retocarse y casi siempre pasar por otra aplicación para terminar en el formato del motor gráfico que estemos usando.
_

earthsculptor
EarthSculptor: Sencillo editor gratuito (no opensource) desarrollado por Ernest Szoka, todavia se encuentra en una fase de desarrollo temprano (0.25b), pero cuenta con una interfaz bastante intuitiva que se puede aprender en unos cuantos minutos. Por ahora solo se puede exportar el mapa a heightmap en .png, .tga y .obj, ademas de la posibilidad de guardar en un formato propio.
_

terragen
Terragen Este es un editor relativamente conocido que permite su utilización gratuita para usos no-comerciales, ya que de otra manera es necesario registrarlo, la interfaz no permite la navegación directa sobre el terreno ( al menos en la versión 0.9), por lo que tiende a ser poco intuitiva. Aún así permite gran cantidad de ajustes sobre los parámetros de generación, también permite exportar el resultado como mapa de alturas y en formato 3d de Lightwae .lwo.
_

MojoWorld
MojoWorld Este es un producto comercial bastante costoso, principalmente porque se usa de manera profesional en la industria del cine, en películas como “El día después del mañana”. A diferencia de otros paquetes este software es capaz de generar completos mundos proceduales/fractales que van “evolucionando” a medida que se corre el programa, mediante variaciones como erosión, “crecimiento” de cordilleras, formación de valles, etc. Con la versión 3 también es posible la inclusión de objetos estáticos como arboles, casas, etc. Permite exportar a una gran cantidad de formatos, tanto en forma de mapa de alturas, como objetos 3d con todo y texturas.

YATG
Nem’s Tools Terrain Generator Otra pequeña herramienta (literalmente, la descarga es de 301kb) que funciona sobre el .net Framework. Puede trabajar sobre Heightmap, generación fractal y aleatoria de terrenos, puede exportar a gran cantidad de formatos como vmf, .map, .rmf, .t3d, .dxf, .obj, .smf, .txt, .bmp y.jpg; por supuesto es totalmente libre, aunque no Open Source. En la página hay otras herramientas interesantes como un batch compiler, visor de .bsp, visor de map, entre otras.

Algunos otros proyectos son el fracplanet que permite realizar mundos completos y exportarlos a povray / blender, con el inconveniente que solo corre en sistemas POSIX, el Demeter Terrain Engine que no crea terrenos, sino que los muestra y finalmente el powerPlant, que corre sobre java y permite generar terrenos y plantas.

Existen además de estas muchas otras opciones entre aplicaciones, plugins y algoritmos para realizar terrenos. Una alternativa interesante es la utilización de programas con 3ds studio, Lightwave, Blender o Maya, con plugins para la generación de terrenos, principalmente porque evitan lo engorroso de pasar entre formatos y además de poder utilizar directamente las herramientas de éstos para los retoques finales.