Cambio de escenarios

Hoy he concluido la implementación básica del cambio de escenarios. Aún quedan errores, pero en esencia, funciona sin explotar la aplicación. Solo me queda pulir el proceso y probarlo a fondo. La idea actual que he definido con el resto del equipo es que tendremos locaciones divididas en áreas y puntos de transición hacia otras locaciones, al estilo de Fallout 2 y Dragon Age.
Ya estamos más cerca de una primera versión, tal vez un tech preview muy sencillo para poner a prueba el juego en un entorno más amplio. Solo falta definir el sistema de colisiones, que tenía pensado hacer con btOgre, pero desgraciadamente la falta de documentación y soporte por parte del autor no me han permitido tener un prototipo que funcione. Así que estoy pensando volver a probar MOC, que tal vez no sea un sistema de físicas completo, pero al menos me resuelve el problema de las colisiones y está mucho mejor documentado.
Y ya que hablamos de mapas, aquí les tengo una primera versión de cómo se ve nuestro mundo:

Metro 2033

La industria de los videojuegos se concentra en USA y Japón, eso lo sabemos todos. Por eso, cuando algún desconocido estudio polaco como CD Projekt lanza un título que obtiene el premio al RPG del Año, o un pequeño estudio argentino como NGD Studios se mete con éxito en el mercado de los MMORPGs con Regnum Online, o un título ruso tiene una acogida favorable, no puedo menos que alegrarme.
Me alegra porque demuestra que el desarrollo de juegos no es exclusivo de USA y Japón, si no que también puede prosperar dondequiera que haya un poco de inteligencia. Y no vamos a negarlo, también un poco de pasta para financiar el trabajo. Esto no debería ser nuevo, incluso acá, que no existe interés alguno en los videojuegos que no sean educativos, puedes encontrar gente interesada en el desarrollo de juegos y en experimentar con motores como Ogre o Irrlicht.
4A Games ha pegado bien con su juego Metro 2033, un FPS de horror que se desarrolla en el metro de Moscú, en un mundo post-apocalíptico. Lo más interesante es que 4A ha desarrollado su propio motor, que planean licenciar a otros desarrolladores. A juzgar por el trailer la tecnología es muy buena, de hecho, fue lo que me inspiró a trabajar un poco más en la implementación de IA para personajes de relleno en mi proyecto.

Vista isométrica

Hoy ve vuelto a retomar la proyección ortográfica para la vista isométrica. Hace tiempo hablé al respecto, y de hecho así fue como lo implementé en la primera versión, pero cuando el cambio a la rama 1.6 de Ogre tuve que eliminarlo porque no se veía igual que en la 1.4. De paso, una funcionalidad incorporada en la 1.6 me permitió agregar el zoom de forma muy fácil: Ogre::Frustum::setOrthoWindow.
setOrthowindow toma dos parámetros que son  el ancho y alto del área visible en unidades del mundo (no en píxeles). Lo siguiente:

camera->setOrthoWindow(150,100) ;

le indica a Ogre que muestre un área de 150x100. Aumentando esos valores ampliamos el área visible, lo cual es un zoom out. Al reducirlos,  hacemos un zoom in.

SRWare Iron

Ayer un colega me señalaba la existencia de SRWare Iron, un navegador basado en Chrome. Hoy además me mostró una comparación rápida entre ambos, al parecer SRWare Iron soluciona problemitas de privacidad y además me dice que es rapidísimo.

Nuevo elemento

Hoy hemos incorporado un nuevo personaje al mapa, un elemento presente en casi todos los juegos y olvidado por los jugadores. Las hemos golpeado con mazas en los RPG de fantasía, desintegrado con un fusil de plasma en los FPS de ciencia ficción, saltado sobre ellas... en fin. Y con toda modestia, lo mismo la vemos en un humilde juego amateur que en un título AAA.
Démosle la bienvenida a la Caja de Madera!

Tío, esto no estaba aquí ayer...

Cómo se hicieron las heridas de Left 4 Dead 2

Advertencia: esto es bastante avanzado (al menos para mí). No se apenen si al final se quedan sin entender nada.
Aquí pueden encontrar un enlace que a su vez referencia un documento de un empleado de Valve, bastante interesante para torturar tu cerebro, explicando a grosso modo cómo se lograron los efectos de heridas en Left 4 Dead 2. Intentaré explicar de qué va el asunto, más o menos como lo entendí yo. La idea es utilizar un elipsoide para calcular la parte de la geometría a remover, luego se adjunta un modelo con la herida a la malla original y se utiliza una textura proyectada. Además, interviene una tercera textura con la sangre.
Visto así, no parece tan difícil. Una lectura obligatoria, ahora que el desmembramiento y la destrucción de cuerpos en tiempo real se ha vuelto algo común, o más bien esencial, en los juegos. Por mi parte, he estado investigando acerca de la deformación de mallas en Ogre, eliminación de geometría, etc, aunque sin resultado aún.

Seguimos trabajando

Esto de trabajar con un artista se pone un poco complicado a veces. Los artistas demandan mucho del motor que uses, ellos siempre quieren que su trabajo se vea lo mejor posible, pero no siempre los motores pueden seguir el ritmo, o simplemente no cuentas en tu equipo de desarrolladores  con un mago de los shaders que pueda suplir las carencias.
El caso del normal mapping ilustra bien qué tan limitados podemos estar. Para tener un mapeo decente el artista tiene que trabajar doble: primero hacer un modelo de menos polígonos, quees el que se utiliza en el juego como tal y luego hacer uno con más polígonos, del cual se obtiene el mapa normal. Como me decía Ludovic, eso lo obliga a planificarse mejor a la hora de modelar, pues de la versión inicial tiene que obtener una segunda con más nivel de detalle.
Por el momento nos espera un largo proceso de pruebas hasta encontrar el método adecuado.

Otra sacudida

Ayer tuvimos la sacudida más fuerte que yo recuerde. Esta fue de 5.5 grados en la escala Richter y sucedió a las 2:08 de la tarde, mientras estaba aquí en la oficina. Me resulta difícil explicar lo impresionante que es sentir un temblor en un edificio alto, solo les diré que las paredes parecen moverse, o de verdad se mueven. Trabajo en una edificación antigua, que no tiene ninguna protección contra sismos, excepto paredes muy gruesas, que supongo que sea una desventaja a la hora de algún movimiento de más de 7 grados. Por suerte ya nos mudamos pronto.
Más tarde tuvimos otro, de 4 grados, aunque el reporte oficial menciona tres temblores perceptibles posteriores al de las 2 de la tarde y hasta las 5. Se han informado de daños ligeros en algunos edificios y las personas residentes en edificios han acampado fuera de ellos, al menos durante la tarde de ayer. Por mi parte, hemos tomado precauciones y a pesar de la fuerza del movimiento sísmico de ayer, no he notado nuevos daños en mi casa aparte de las grietas que ya estaban ahí.

Un 56% tiene Dx10

Leo en esta anotación que según una encuesta de Steam, el 56.5% de los usuarios ya tienen sistemas compatibles con DirectX 10/11. Dicho así, parece mucho, pero si también decimos que un 43.5% de los jugadores no tiene Dx10 aún,  pues también me parece una respetable cantidad de usuarios que no comprarán nuestro juego si solo se vende con un renderer basado en Dx10.
No dudo que esto se solucione a corto plazo, cuando Windows 7 demuestre que es un buen sucesor de XP y más jugadores migren a esta nueva plataforma, justificando el desarrollo de juegos que requieran Dx10/11.

Empezar en la industria del videojuego

En Vidaextra han publicado un breve resumen de una conferencia que duró nada menos que seis horas. Consejos de gente importante de la industria, que no está de más leer y tener como referencia obligada para los que quieren (o mejor dicho, queremos, porque yo también me incluyo) meterse en el negocio de los juegos. La primera parte aquí y la segunda aquí.

Normal mapping!

Ya funciona el normal mapping! El shader en cuestión es éste, y lo que me tuvo a punto de asesinar a alguien ayer (para que después no digan que los videjuegos no incitan a la violencia) fue el segundo mapa normal.El primero, que es el que ven en la imagen, es gris y con puntos. El segundo es más rojizo y no tenía el punteado que le da ese efecto de relieve, o tal vez sea el color.  El caso es que a pesar de la resaca que tengo justo ahora, se me ocurrió probar a cambiar de textura y ver qué pasaba.
Es la primera vez que pruebo el método y tengo que reconocer que el cambio es increíble, aún cuando hay algoritmos más avanzados, como el parallax mapping. Que dicho sea de paso, también está soportado por Ogre, la cosa es encontrar el shader adecuado. Los ejemplos incluyen un shader de offset parallax mapping, que es el más primitivo, si no recuerdo mal el más avanzado es occlusion parallax mapping. Por favor que alguien me corrija si ando desencaminado.

Nuevo edificio

Hoy recibí una versión preliminar del edificio, incluyendo texturas. El primer modelo tuvo que ser desechado porque algunas cosas no funcionaban, éste que ven aquí es el segundo intento, que incluye textura y mapa normal. Me parece que no se ve mal, a pesar de que faltan detalles por agregar como las puertas y ventanas.
Aún o he podido probarlo en Ogre, aunque exporta bien, porque el exporter de Blender me genera referencias a shaders que dan error, a pesar de que están incluidos en el proyecto. Realmente esto fue algo que no me esperaba, que el exporter identificara la segunda textura como un mapa y me generara los materiales adecuados para usar bump mapping. Como mencioné anteriormente, el objetivo era usar normal map, pero requiere modificar el material a mano. Si esta vía genera el material apto para el uso, supongo que será mejor dejarla como está, aunque el método no sea tan avanzado.

Descarga de escenarios

El proceso de descargar los escenarios se ha puesto bastante complicado. El gran escollo aquí es que hasta la versión 1.6, Ogre no tiene una forma de eliminar el terreno, solo con SceneManager::clearScene(). Dicha función elimina todos los nodos y por lo que me parece, deja las entidades. Por lo cual es necesario recrear los nodos al volver a cargar un mapa. Y ahí está el problema, porque por alguna razón, cuando elimino un nodo, previa separación de las entidades adjuntas, no se hace efectiva la separación. Al intentar adjuntar la entidad otra vez al nodo recién creado me dice que ya se encuentra adjunta a un nodo o hueso.
Sin lugar a dudas, el terreno en Ogre ha sido uno de los elementos más deficientes en las versiones anteriores a la 1.7. Me resulta molesto que un detalle tan tonto tenga detenido todo mi trabajo.