XNA Game Studio 3.0 (CTP)

8 05 2008

Acaban de anunciar la liberación del nuevo XNA Game Studio 3.0 (Community Technical Preview). Podéis ver la noticia completa en el blog del equipo XNA, aquí.

Entre las diferencias con la versión 2.0, el soporte para las versiones mayores (de Standard hacia arriba) de Visual Studio 2008, en lugar de únicamente las express y el desarrollo para dispositivos Zune (vulgarmente llamado el iPod de Microsoft) llaman la atención.

Cabe destacar que las versiones 2.0 y 3.0 no son escalables. Ambas tendrán que seguir conviviendo, dado que la versión 3.0 no contiene funcionalidades para la programación de XBox. ¿Por qué? Ni idea. Recordemos que es una CTP, ni siquiera una Release Candidate, y teniendo en cuenta los cambios que sufre especialmente esta tecnología entre las versiones previas y las versiones finales (para quien recuerde las diferencias entre la beta 1 y la beta 2 del primer XNA Game Studio), es posible que en la versión final del 3.0 sí que se habiliten las herramientas de desarrollo para XBox. De todos modos, tiempo al tiempo.

Para poder ir trasteando, el enlace de descarga es este.





Nuevo apartado de Ejemplos

6 01 2008

El desarrollo de GameComponents es algo más complejo pero todos estamos continuamente trasteando con XNA y creando pequeños proyectos para probar cosas. Esta es la idea con la que nace el nuevo apartado de XNACommunity llamado Ejemplos, en el que podremos subir todos aquellos proyectos de código completos ó casi, pero los cuales pueden ayudar y mucho a los demás. En estos momentos ya existe bastantes ejemplos subidos:

PerPixel Lighting

Importer Particle System

Demo billar

Environment Mapping

Importer Collada

Basic Shadow Map

Project Texture

Depth Of Field

Espero que os gusten, podéis encontrarlos todos en www.codeplex.com/XNACommunity.





Videotutoriales de XNACommunity

27 09 2007

En XNACommunity seguimos trabajando día a dia, para seguir mejorando su aspecto. Aquí podéis ver dos videotutoriales, que explican todo el proceso, desde crear un nuevo GameComponent a como subirlo a nuestra web.

Enlaces:

http://www.megavideo.com/?v=I30QXWZ7

http://www.megavideo.com/?v=UNBE0RFI





XNA GS 2.0 a la vuelta de la esquina

13 08 2007

Hace dos minutos han publicado la gran noticia en el blog oficial del XNA Team de Microsoft. Aunque todavía no hay fecha confirmada lo que sí está confirmada es la aparición de un nuevo XNA Game Studio para el último cuatrimestre de 2007 (posiblemente cuando se cumpla el año de la primera versión, cerca de Diciembre).

El anuncio diferencia, como siempre, entre las novedades de el XNA Game Studio (el IDE de desarrollo) y el XNA Framework (las librerías sobre las que funcionan los juegos XNA).

Novedades del XNA Game Studio 2.0

En primer lugar hay que notar que Game Studio pasa a ser el nombre oficial, eliminando las palabras “Express Edition” de detrás. ¿Por qué? Porque XNA Game Studio 2.0 dejará de ser exclusiva para C# Express Edition, pudiendo funcionar sobre cualquier versión de Visual Studio 2005 (Professional, Team, etc.)

Además de esta gran ventaja, se listan otras como:

  • Interfaz mejorada para la conectividad y manejo de conexiones con XBox 360
  • Mejoras en el manejo y compilación de contenidos
  • Plantillas para diferentes tipos de proyecto y procesadores de contenido
  • Manejo simple de parámetros a los manejadores de importación del Content Pipeline

Mejoras del XNA Framework 2.0

Entre los elementos anunciados destacan algunos muy interesantes. En primer lugar, con el XNA Framework 2.0 se incluirá la API de XBox Live para crear juegos multijugador on-line con la mejor plataforma de juego on-line hasta la fecha.

Otra ventaja importante es la posibilidad de incrustar juegos XNA en formularios Windows Forms, lo que permitirá tratar a las pantallas externamente como simples formularios y utilizar componentes de formulario en los juegos XNA. Me pregunto si se podrán utilizar también en web forms (aunque lo dudo bastante).

Destacables son también las mejoras dentro del propio framework en algunas clases clave del motor interno de XNA: el GraphicsDevice y el GameComponent. En cuanto al primero, el nuevo Framework permitirá virtualizar el GraphicsDevice evitando tener que tener una conexión directa a la tarjeta gráfica continuamente y, por tanto, simplificando el código de detección de fallos. En teoría esto abstrae al juego del nivel físico de gráficos mucho más de lo que lo hacía el Framework anterior, aunque para asegurarlo necesitaría un poco más de información. En cuanto a las mejoras sobre los GameComponents (posiblemente las que más nos interesan en nuestra comunidad) se ha mejorado la manera de crear supercomponentes, es decir, componentes contenedores de otros componentes. Este (a mi modo de ver) era uno de los grandes fallos del Framework anterior, que no contenía ninguna clase componente contenedora de componentes. Ahora la tendremos disponible.

Otras mejoras incluidas son:

  • Mejora de la eficiencia del XACT (con un nuevo XACT renovado)
  • Permite Multiple Render Targets

Conclusión

Definitivamente esta es una de las mejores noticias para todos los enamorados de XNA. Estoy deseando que saquen la versión beta para empezar a trastear con ella.

Podéis ver la noticia completa aquí.





Regístrate en XNACommunity

6 07 2007

Si quieres darte de alta en XNACommunity y colaborar en esta comunidad en expansión, o bien creando nuevos componentes que engrosen nuestra lista o simplemente mejorando los ya existentes, es muy facil:

Envia un email con tu nombre completo, tu correo y tu identificador de CODEPLEX a Javier Cantón o a Javier Sivianes y estareis dados de alta en XNACommunity.

Para poder escribir en el blog daos de alta en http://es.wordpress.com/ y enviad el nombre del usuario de wordpress y el correo que hayais puesto a Isaac Llopis.

En el menor tiempo posible te responderemos y pasarás a formar parte de XNACommunity.





¿Cómo crear un shader que use las texturas cargadas automáticamente por el modelo en XNA?

30 06 2007

 

Bueno esta pregunta me surgió al intentar escribir mi propio basicEffect para XNA.

El problema:

Yo quería crear un shader nuevo de iluminación para los modelos, pero este shader me gustaría que pudiera usarlo con objetos texturizados, y lo óptimo siempre es tener un modelo y una sola textura, pero muchas veces te bajas modelos de alguna página, y estos están texturizados por partes, por lo que tienen varias texturas. Entonces en mi shader no podría tener un atributo texture ColorMapTexture, sino que necesitaría tantos como tuviera mi modelo. Pero como trabaja entonces BasicEffect, ya que he hecho bastantes pruebas e incluso en alguno de los GameCompontents de XNACommunity he usado un gorilla el cual usa varias texturas. ¿Cómo han escrito un shader que use las texturas que fueron asignadas desde el 3D studio?

 

Investigando:

Bueno lo primero que se me ocurrió fue mirar el código fuente que se usa para dibujar un modelo en XNA usando BasicEffect:

 

foreach (ModelMesh m in model.Meshes)
{

foreach (BasicEffect effect in m.Effects)

{

effect.EnableDefaultLighting();
effect.World = Matrix.CreateTranslation(0,0,0);

effect.View = camera.View;
effect.Projection = camera.Projection;

}
m.Draw();

}

Y podemos ver como se le pasan al efecto varios parámetros como la matrix de view, projection y world, pero por ningún lado la textura. Entonces si pones un breakpoint en m.Effects te das cuenta de que este tiene almacenado la información internamente con una instancia de BasicEffect por lo que al hacer el casting ya effect tiene la textura de esa parte del modelo, pero tu de ninguna forma puedes acceder a la textura escribiendo m.Effects.Texture. Por lo que pensé que a lo mejor a la hora de cargar el modelo estaría la solución y me fijé en el siguiente código:

model = content.Load<Model>(“modelo3D”);

Y si nos paramos también a debugear un poco vemos que al cargar este modelo dentro de content tenemos un diccionario llamada “loadedAssets” que contiene los effect, texture y todo aquello que cargemos medienate content.load<T>. Y si pones un breakpoint y cargas un modelo que tiene asignado multiples texturas puedes observar como al pasar la linea load, se cargan en el diccionario primero las texturas y finalmente el modelo. Por lo que ahí está toda la información que necesitas, pero como accedes al diccionario loadedAssets, puedes implementar un contentProcessor, pero ¿No habrá una solución más fácil?

En este punto la solución, fue intentar ver como lo hacen los de XNA, por lo que me cogí el reflector y ala a decompilar (si soy un poco bruto, es que soy de pueblo XD). Pero nada el shader BasicEffect viene ya precompilado, por lo que imposible, y al intentar ver lo que hacía el content tampoco encontraba nada.

Solución:

Después de buscar mucho por internet y no encontrar nada, ya que también es complicado buscar este problema en concreto, vamos a mi me ha costado más escribir el título de este post que el post en si XD.

Volví hacia atrás y mirando el código de cómo dibujar con BasicEffect, ahora presté más atencción a lo de que m.Effects contiene internamente la información con una estructura basicEffect y por ello ha hacer el casting a basicEffect obtenemos la textura aunque en m.Effects, no hubiera ninguna forma de hacernos con el puntero a la textura.

Por lo que solución y código genérico que he usado es:

public virtual void ChangeEffectUsedByModel(Model model, Effect replacementEffect)
{

Dictionary<Effect, Effect> effectMapping = new Dictionary<Effect, Effect>();foreach (ModelMesh mesh in model.Meshes)
{

foreach (BasicEffect oldEffect in mesh.Effects)
{

if (!effectMapping.ContainsKey(oldEffect))
{

Effect newEffect = replacementEffect.Clone(replacementEffect.GraphicsDevice);

newEffect.Parameters["Texture"].SetValue(oldEffect.Texture);

newEffect.Parameters["TextureEnabled"].SetValue(

oldEffect.TextureEnabled);

effectMapping.Add(oldEffect, newEffect);

}

}

foreach (ModelMeshPart meshPart in mesh.MeshParts)
{

meshPart.Effect = effectMapping[meshPart.Effect];

}

}

}

he intentado explicarlo sin alargarme demasiado aunque se podrían aclarar muchas cosas, pero espero que os sirva.





XNA vs. ANX

26 06 2007

Hace un par de días, Javi Cantón me dijo que posteara sobre el desarrollo de Mono.Xna, qué tal iban las cosas y tal, porque creo que a algunos de vosotros os interesa. Así que he consultado un poco a fuentes fidedignas y ahora estoy en disposición de hacer un reportaje de cómo va el proyecto.

Para empezar, creo que encontraréis interesante el post de Stuart Carnie en su blog “Aussie Bloke.” La imagen que veis colgada ahi está tomada de un juego tipo Pong muy simple, compilado contra las librerías de Mono.Xna en lugar de las de XNA, en su estado en Abril de este año. El juego en sí mismo, no usaba grandes alardes. Por ejemplo, no usaba el Content Manager para cargar modelos ni utilizaba GameComponents para los objetos del juego. Se trataba de un simple y llano renderizado a pelo de texturas. Pero funcionaba y era jugable. En Abril.

A día de hoy, Mono.Xna ha mejorado un poco en cuanto a la versión de Abril, aunque el trabajo realizado sobre el SVN, todo hay que decirlo, no ha sido demasiado importante. Somos poquitos los que ahora mismo estamos escribiendo código, y la mayoría hemos sufrido, precisamente desde Abril, un bombardeo de trabajos y exámenes en nuestras universidades. Muchos de vosotros lo entenderéis. Sin embargo ahora, en veranito, las cosas vuelven a moverse.

La semana que viene está prevista, aunque pendiente de confirmación, una reunión via Skype entre todos los desarrolladores activos de Mono.Xna. Los temas de la reunión van a ser muy suculentos. Por ejemplo se va a tratar de establecer un sistema de trabajo para descodificar el contenido de los ficheros de contenidos de XNA, tanto los de contenidos gráficos como los creados por XACT y se acordará un camino para el desarrollo de una herramienta XACT libre. La palabra “libre” significa que hay que mirar muy mucho las licencias y patentes, por eso también está abierta la proposición de nombres nuevos para el proyecto, que eviten problemas con la patente “XNA” de Microsoft. El que más está gustando hasta ahora es “ANX,” os podéis hacer una idea de por qué. Si tenéis ideas de cómo llamar al “proyecto anteriormente conocido como Mono.Xna” haced uso intensivo de los comentarios en este post, o meteros en el grupo de desarrollo de Mono.Xna.

Aunque estar atentos al desarrollo de “la tecnología anteriormente conocida como Mono.Xna” es interesante, ¿habéis pensado en meteros directamente en el ajo? En realidad no hace falta ser un crack para empezar a programar en Mono.Xna. Yo ya estoy en ello. Lo único que hay que tener son ganas. Hay una enorme cantidad de funciones matemáticas por programar en las clases matemáticas de XNA, funciones que con un poco de Google, salen solas. Si te parece difícil, puedes ayudar a escribir NUnits contra XNA, para que comprobemos la funcionalidad de Mono.Xna. Y si te sientes con ganas de sudar bits, puedes meterte de lleno con el ContentManager, los GameComponents o la clase Graphics, que tienen tela que cortar. Cualquier ayuda es bienvenida. Y lo mejor de todo es que aprendes mientras desarrollas un proyecto importante.

Y quién sabe, a lo mejor al año que viene te puedes apuntar al “Summer of Code” con un proyecto de XNA.

Si quieres saber más sobre XNA, Mono.Xna y su desarrollo también puedes contactar conmigo en neozack@gmail.com, dejar un bonito comentario en este post, o contactar con nosotros en XNACommunity o en el foro.





Ayudando al XNA Libre

31 05 2007

Bueno, tal vez sea un poco radical decir que XNA no es libre actualmente, cuando Microsoft lo licencia gratuitamente junto con los SDK y herramientas de desarrollo. Pero aún así, DirectX, que es la tecnología que funciona por debajo, sigue siendo propiedad cerrada e indiscutible de Microsoft.

Como ya sabéis por comentarios anteriores, está en desarrollo el proyecto Mono.Xna, que prentende hacer exactamente lo mismo que el XNA de Microsoft pero sobre código abierto usando SDL y OpenGL entre otros.

Tras las magníficas contribuciones de Javi a la Comunidad, y el movimiento que está teniendo el proyecto Mono.Xna en las últimas semanas, decidí avisar a los compañeros de desarrollo de Mono.Xna que en XNACommunity tenemos una sustanciosa y creciente cantidad de proyectos hechos sobre XNA en licencia MS-CL (compatible con la de Mono.Xna) que podrían servirnos para hacer pruebas. ¿La contestación? “Muchas gracias… Como mínimo seguro que nos sirven para hacer tests.” Y tened por seguro que se usarán para hacer tests en el transcurso de desarrollo del proyecto.

Actualmente el proyecto se encuentra en una fase muy alfa, en que todavía se está organizando el trabajo. Gran parte del esfuerzo se lo va a llevar el Content Manager y los archivos .fx, .xnb y shaders HLSL. El trabajo en la fijación del GraphicsDevice ya se está realizando y algunos juegos muy simples ya funcionan en esta fase de pruebas.

Con la ayuda de Moma (Mono Migration Analyzer) se van a pasar y contrastar los usos de diferentes juegos en XNA contra las funciones y clases que XNA provee para poder priorizar el trabajo y empezar por las clases y funciones que más se usan. Para eso, evidentemente, hacen falta juegos de prueba, licenciados en MS-CL o en una licencia de código abierto, como la Creative Commons, o la propia de Mono.Xna.

Así que… ¡a moverse! Con vuestras contribuciones a XNACommunity no solo estáis ayudando a la creación de una librería de componentes fácil, adaptable y reusable, sino a que en el futuro, los juegos XNA funcionen en cualquier sistema operativo. ¡A multiplataformizarlo todo!

PD. Si tenéis alguna página personal donde colguéis vuestros juegos o proyectos de juego en XNA licenciados en código abierto estaría bien que dejáseis un comentario con vuestro link. Y, por supuesto, cualquier contribución a los componentes de la comunidad es bienvenida.





Componentes de PostProcessing

31 05 2007

En XNACommunity ya disponemos de una gran gama de componentes de PostProcessing, por lo que os animo a todos a probarlos. Aquí os dejo unas cuantas de imagenes sobre los componentes:





PostProcessing in XNA

22 05 2007

Las técnicas de post processing en el desarrollo de videojuegos son muy interesantes ya que el tiempo que consumen es constante, es decir depende de la complejidad de la escena. Existen muchísimos efectos de este tipo en videojuegos, pero algunos de los más conocidos pueden ser:

- B&W (black and white): Efecto con el que conseguimos el render de la escena en monocromo, y da una sensación de las fotos antiguas pero en tiempo real, usado en juegos desde “Hollywood Monster” hasta “Max Payne”.

- Sepia: Efecto de película antigua que se usa en los juegos de aventura acción u aventuras gráficas para recordar algo que paso con anterioridad.

- Bloon: Efecto con el que los brillos te deslumbran, el cuál además está de moda ya que da una sensación de realismo y de acabado final muy profesional. Lo puedes observar en todos los juegos de última generación como “Gears Of War” ó “Need for Speed Most Wanted”.

Este efecto es algo más pesado que los anteriores porque realiza varias pasadas para conseguir el acabado final. Lo primero que hace es aplicarle al buffer del render un efecto de saturación, para quedarse con todo aquello que más brille de la escena y todo lo demás lo deja negro, el segundo paso es aplicarle un Gaussian blur horizontal a esa imagen saturada, el tercer paso es aplicar otro Gaussian blur pero esta vez en vertical, y por último lo que hacemos es combinar la imagen original con la imagen resultante de los tres pasos anteriores.

- Depth of field: efecto que tenemos con cualquier cámara de video en la que lo que enfoques está nítido, mientras lo que está delante o detrás en el eje Z estará borroso según la distancia a la que esté del plano de nitidez. Este efecto tiene un resultado muy interesante, y puedes observarlo en juegos como el “Gears of War”, “Fifa 07″ ó “Virtual Tennis”.

- Motion blur: Este efecto da una sensación de cámara lenta y era una de las cosas que más me gustaban de juegos como el “Metal Gears Solid”. Consiste en coger una tira de frames y superponerlas todas en uno solo aplicándole un grado de alfa según la antigüedad de la imagen.

- Radial Blur: Efecto usado en los juegos de coches y aviones para aplicar una sensación de velocidad, usado normalmente para cuando presionas el turbo.

Bueno en otro post me centraré más detenidamente en cada una de estas técnicas, pero por ahora simplemente comentar que acabo de subir un nuevo componente a XNACommunity de PostProcessing con el cual mediante dos líneas de código:

PostProcessing post = new PostProcessing(this);

this.Components.Add(post);

Podréis incorporar un efecto de “negativo” a vuestros juegos, y ya estoy preparando otros, por los que pronto podréis también descargarlos de http://www.codeplex.com/XNACommunity.