29 de mayo de 2008

Traisión!

Una de las cosas que más me molestan es tener que perder el tiempo buscando y preparando modelos y escenas para los ejemplos. Te tiras un día entero para encontrar algo que no te acaba de convencer y te quedas con la sensación de no haber hecho nada. Pues bien, el otro día encontré uno que debía usar a toda costa en lo que fuera:


Si.... tiene una pinta genial, pero entonces empezaron los problemas. Se me había ocurrido una idea para un ejemplo en el que Master Chief quedaría de lujo, pero necesitaba dos cosas:

- Encontrar un escenario acorde con el personaje / ejemplo.
- Cambiarle la pose al Chief.

Al principio el primer punto fue sencillo, encontré un escenario a mi gusto en uno de los ejemplos del SDK de DirectX10. El problema es que a los de Microsoft se les ha ocurrido dejar de dar soporte a su formato de modelos .X en favor de un nuevo formato llamado sdkmesh que ellos mismos indican que es una mierda. Bravo.

Pero bueno, según ellos en el SDK han incluido una herramienta que convierte modelos entre los dos formatos. Lo probé y efectivamente funciona perfectamente al hacer la conversión .X -> .sdkmesh, pero no había manera de conseguir el paso inverso.

Después de trastear un poco con el código fuente del programa, encontré la siguiente condición en la función que carga el modelo de entrada:

if( nLength == 2 && pszExt && wcscmp( pszExt, L".x" ) == 0 )
{
CLoaderXFile loader;
hr = loader.Load( szFileName, requestedBHT );
m_pIntermediateMesh = loader.GetMesh();
}


Es decir, que sólo es capaz de pasar de .X a sdkmesh. Pues a la mierda el escenario.

El segundo punto no fue mejor. Yo no tengo ni idea de edición de modelos en programas estilo 3dStudio, Maya o XSI, pero conseguí cargar el modelo y cambiarle la pose. El problema es que los pesos están mal y a la hora de moverlo se le va la olla.

Al final me cansé de importarlo en varios programas, trastear, exportar, volver a importar, etc... Así que a la mierda el Chief (al menos hasta que contacte con un amigo que controla del tema).

Total, que me he cabreado y me voy a poner con otra cosa, porque eso de estar dos días sin parar para no conseguir nada me pone de mala leche. Lo volveré a intentar otro día...

26 de mayo de 2008

XNA del bueno

Hoy ha sido un buen día para XNA Community. Javi y Rubén han sacado por fin su cargador de modelos MD5 para XNA (Javi a cargo de los Shaders y Rubén con el cargador en sí). Este formato es el que se usa en los juegos con el motor del Doom 3, y hay una buena cantidad de modelos en la red que lo utilizan, y muchos conversores que lo soportan.

El cargador permite usar este tipo de modelos de forma tremendamente sencilla, así como visualizar sus animaciones. Sin duda es algo que merece la pena probar.



Con esto además se ha estrenado una nueva sección de utilidades en la web, junto con los cargadores de MD3 y Collada, entre otros.

Por otro lado, yo ya tengo terminada la demo de God Rays, pero una vez más esperaré un poco a colgarla para no saturar(me). ;)

24 de mayo de 2008

No tengo remedio

Soy impaciente de narices. Todavía no había subido la demo de animación de árboles y hardware instanting, y ya he empezado a probar un nuevo efecto. Aún queda trabajo por delante, pero hoy he conseguido los primeros resultados y la verdad es que mola. Se trata de una técnica que aparece en el GPU Gems 3 en un artículo titulado "Volumetric Light Scattering as a Post-Process", y trata de simular los llamados "god-rays" que produce la oclusión de la luz del sol con objetos opacos. Como bien dice el nombre del artículo, esta técnica se ejecuta como un postproceso en la GPU, y aún así da una sensación de volumen bastante realista.


Acabo de probarla y quedan muchos fallos por arreglar (además no se si buscaré una escena nueva) y cosas que optimizar, pero para haberle echado sólo un rato creo que por ahora va bastante bien.

Por último, ya se puede bajar la demo de animación de vegetación en el lugar habitual. Se han detectado algunos fallos en algunas tarjetas gráficas y hay quien me ha comentado que el instancing no les funcionaba bien, así que agradeceré cualquier comentario al respecto. ^^

21 de mayo de 2008

A mí me daban dos!

Despues de la demo de POM y Custom Content Processor, una vez más voy a sacar un ejemplo doble. En el próximo, aparte de animación de vegetación como ya mostré en la entrada anterior, me di cuenta de que los cuatro hierbajos que se pintaban quedaban muy tristes y además suponían un bajón de rendimiento incomprensible para lo poca cosa que eran, así que me he mirado cómo implementar hardware instancing. Esta técnica permite pintar con una sola llamada "draw" gran cantidad de objetos iguales (varios miles sin problemas en mi PC), aumentando mucho la velocidad de renderizado. Para poder colocar cada instancia en una posición diferente, se pasa la información de la transformación de cada una con un nuevo flujo de vértices accesibles desde el shader.

Tal y como lo he implementado, el ejemplo no funcionará en Xbox 360 (aunque nunca los hago pensando en ejecutarlos en consola) ya que esta técnica se debe hacer de forma diferente en esta máquina. Dejo una imagen que da una idea del resultado:

A lo largo de esta semana la iré dejando lista y la subiré. ^^

Ah, y ya me han llegado el GPU Gems 3 y el ShaderX6, así que tengo trabajo para rato!

18 de mayo de 2008

Mmmm... la naturaleza...

Aprovechando que ya me ha llegado el Shader X5 y que este fin de semana he tenido algo de tiempo (bueno, sólo me he podido poner hoy ^^U), me he puesto a preparar una pequeña demo sobre uno de los artículos del libro, concretamente el titulado "Animating Vegetation Using GPU Programs". Es una técnica muy sencilla para animar en la gráfica varios tipos de vegetación como árboles, arbustos o hierba. Pese a que no tiene en cuenta la forma del modelo, ni huesos ni cosas por el estilo, sino que directamente modifica los vértices según una cierta función, la animación no es 100% realista pero da perfectamente el pego para muchas aplicaciones. Además he podido prepararlo en una mañana, así que qué más se puede pedir! Ya está terminada y no creo que le añada gran cosa más, pero me esperaré un poco a colgarla, ya que Javi tiene lista otra demo y no es plan de ponerlas todas a la vez y reventar XNACommunity. xD Igualmente he grabado un video que YouTube se ha encargado convenientemente de joder hasta la saciedad, aun así creo que más o menos se puede apreciar el efecto:



Sobre aquello tan ambicioso que había empezado ya veremos... Quizás era un poco demasiado ambicioso. :(

13 de mayo de 2008

Resacón

Bueno, ya no. El viernes fue la fiesta de la facultad, y mientras me recuperaba he colgado la nueva demo. El efecto que implementaba es el Parallax Occlusion Mapping, una especie de Relief Mapping que por ejemplo se ha usado en el Crysis. Si alguien lo prueba y le va lento es muy posible que sea por el sistema de partículas, que chupa bastante, así que se puede desactivar. Como siempre se puede descargar AQUI en XNACommunity, y a la derecha dejo el link correspondiente.

Ahora estoy esperando a que me lleguen de una puñetera vez los libros para pillar nuevas ideas, pero mientra me he puesto a trabajar en otro ejemplo mucho más ambicioso y espectacular que los anteriores... No sé si lo conseguiré, pero por intentarlo que no quede. ^^ Stay tuned!

8 de mayo de 2008

Un pequeño adelanto

Como voy a estar un par de días sin poder hacer nada (la fiesta de la facultad y tal... :P), dejo una primera imagen de la próxima demo, que como ya comenté será más sencilla que las últimas que he hecho. Una pista sobre qué efecto implementa: el suelo. ;)

6 de mayo de 2008

Teh Coordinator

Hace unos días por fin colgué la demo sobre nubes/humo volumétrico. Ya había puesto el link en el espacio dedicado a ello en la columna de la derecha del blog, pero no había puesto nada sobre ello. No voy a poner fotos bonitas ni vídeo porque ya está puesto en entradas anteriores, pero pongo el link AQUÍ.

Por otro lado ya estoy metido desde hace unos días en una nueva demo. En un principio tenía buena pinta, pero no me acaban de convencer los resultados así que seguramente la dejaré en algo más sencillo que lo que tenía en mente. Bueno, no todo iban a ser éxitos a la primera... Lo que seguramente se quedará como demo final es un ejemplo de customización de un Content Processor de XNA para que pueda cargar varias texturas para un mismo modelo, y así hacer efectos de iluminación más complejos como un normal mapping. Será un ejemplo de lo más sencillo, pero seguramente será útil para más de uno, y además añadiré algún shader molón para representar relieves.

Por último, comentar que desde ayer soy el nuevo coordinador de XNACommunity! Gracias a Javi (MVP DirectX) y a Rubén (de Novarama) por fijarse en mí pese a llevar tan poco tiempo colaborando en la página. ^^ Y bueno, esto hace que me entren más ganas de seguir haciendo cosas y aprendiendo cada día!