Llevo un par de días probando algo nuevo, y aunque no me lo esperaba he avanzado lo suficientemente rápido como para tener casi listo un nuevo ejemplo para PC:
Son las típicas metaballs o "blobs", pero generados mediante un efecto de post-proceso. Esto como siempre tiene su parte buena y su parte mala. La buena es que es muy rápido (ahora mismo me funciona a unos 600 fps pese a que uso un par de rendertargets de 64 bits), y la mala es que al no tener en cuenta la profundidad, a veces se pierde mucho la sensación de perspectiva y se mezclan bolas que quizás no deberían... Eso seguramente será un problema donde iba a usar este efecto, así que quizás tengo que hacer algunos cambios de concepto. ^^U
En fin, que por un lado estaba contento porque había quedado bastante bien en poco tiempo, pero por otro acabé sumamente cabreado porque no hubo manera de hacerlo funcionar bien en Xbox 360. En el ejemplo se usan point sprites para pintar las diferentes bolas, y por alguna razón que todavía no se explicar, en la consola no he conseguido modificar el tamaño de estos sprites para dar sensación de 3D. Y además en general todos los shaders usados dan algún problema, ya sea con las coordenadas de textura (si, he usado SPRITETEXCOORD en el caso de ejecutarlo en la consola) o en el paso final de post-proceso, donde no hace lo que debe hacer.
Necesito que esto funciona en ambas máquinas, así que será lo que trabaje en los próximos días.
31 de julio de 2008
27 de julio de 2008
A otra cosa, mariposa
Acabo de subir a XNACommunity el ejemplo de fluidos! Ahora toca ponerse con otro tema, que ya digo que será completamente diferente. Ya tengo una idea de qué hacer, pero hoy no voy a tener tiempo de empezar hoy, así que mañana al lío.
Por cierto, si se pausa la simulación en la demo, se puede seguir echando tinta y por tanto se sigue sumando la velocidad del fluido, así que si luego se reanuda se generan animaciones y formas bastante curiosas. ^^
Por cierto, si se pausa la simulación en la demo, se puede seguir echando tinta y por tanto se sigue sumando la velocidad del fluido, así que si luego se reanuda se generan animaciones y formas bastante curiosas. ^^
25 de julio de 2008
Por fin se acabó
Bueno, tampoco es que haya sido una tortura, pero ya tenía ganas de terminar. Acabo de dar por finalizado el ejemplo de los fluidos 2D. He añadido un par de cosas puramente estéticas y mejorado el rendimiento (unos 15 milisegundos en ambas máquinas), además de cambiar un poco la funcionalidad (el fluido ya no va hacia arriba automáticamente, sino en la dirección del cursor) y añadir soporte total para Xbox 360. Un ejemplo del resultado final es esto:

Ahora en mi máquina va incluso un poco demasiado rápido (no hago ningún tipo de control en ese aspecto), pero creo que después de todo no ha quedado tan mal. Durante este fin de semana acabaré de pulir detalles en el código (aka limpieza de mierda) y lo colgaré, a ver si gusta. ^^
Ya grabaré el video correspondiente cuando vaya a colgar el ejemplo. ;)

Ahora en mi máquina va incluso un poco demasiado rápido (no hago ningún tipo de control en ese aspecto), pero creo que después de todo no ha quedado tan mal. Durante este fin de semana acabaré de pulir detalles en el código (aka limpieza de mierda) y lo colgaré, a ver si gusta. ^^
Ya grabaré el video correspondiente cuando vaya a colgar el ejemplo. ;)
24 de julio de 2008
Decepcionado
Y mucho, además. Hoy he usado la suscripción gratuita al Creators Club que dan al registrarte en DreamBuildPlay (es un añazo gratis!). Me hacía bastante ilusión probar mis ejemplos en la consola, y al principio todo ha ido bien... He probado un par de ejemplos antiguos y funcionaban perfectamente, pero luego ha llegado el momento de probar el que realmente quería poner a prueba.
He creado un proyecto de los fluidos para Xbox 360, he toqueteado un poco el código para que funcionase sin ratón y... F5... Deploying... Running... Zas, lento de narices. Es que no iba ni la mitad de rápido que en PC.
He cambiado alguna cosa más para tener información más precisa de cuánto estaba tardando:
- PC: Fluido de 100x100 -> ~25 ms
- Xbox360: Fluido de 64x64 -> ~65 ms
Si, eso es más del doble de tiempo con una matriz de casi un cuarto del tamaño original. La diferencia es muy grande, *enorme*, sobre todo cuando en principio había metido el thread de la simulación en su propio core... Sabía que XNA era bastante lento en la consola, pero no imaginaba que tanto.
Esto me ha trastocado un poco los planes, y me ha dejado un poco de bajón. ^^U
Pero bueno, me ha servido para ver que con el fluido de 64x64, el Gaussian Blur que puse no servía para prácticamente nada porque lo hacía sobre una imagen muy pixelada puesta sobre un backbuffer a una resolución bastante alta. Esto podría parecer un palo más, pero en realidad me ha servido para mejorar algo bastante interesante... como la Xbox (y muchas gráficas actuales) no permitía filtrar por hardware la textura de la tinta, he decidido implementar el filtro bilinear directamente en el shader, a mano. Bueno, irá como una tortuga pero por lo menos se ve bonito. Seguramente este fin de semana lo dejaré como pueda y lo subiré ya.
OMG no hay foto! o_O
He creado un proyecto de los fluidos para Xbox 360, he toqueteado un poco el código para que funcionase sin ratón y... F5... Deploying... Running... Zas, lento de narices. Es que no iba ni la mitad de rápido que en PC.
He cambiado alguna cosa más para tener información más precisa de cuánto estaba tardando:
- PC: Fluido de 100x100 -> ~25 ms
- Xbox360: Fluido de 64x64 -> ~65 ms
Si, eso es más del doble de tiempo con una matriz de casi un cuarto del tamaño original. La diferencia es muy grande, *enorme*, sobre todo cuando en principio había metido el thread de la simulación en su propio core... Sabía que XNA era bastante lento en la consola, pero no imaginaba que tanto.
Esto me ha trastocado un poco los planes, y me ha dejado un poco de bajón. ^^U
Pero bueno, me ha servido para ver que con el fluido de 64x64, el Gaussian Blur que puse no servía para prácticamente nada porque lo hacía sobre una imagen muy pixelada puesta sobre un backbuffer a una resolución bastante alta. Esto podría parecer un palo más, pero en realidad me ha servido para mejorar algo bastante interesante... como la Xbox (y muchas gráficas actuales) no permitía filtrar por hardware la textura de la tinta, he decidido implementar el filtro bilinear directamente en el shader, a mano. Bueno, irá como una tortuga pero por lo menos se ve bonito. Seguramente este fin de semana lo dejaré como pueda y lo subiré ya.
OMG no hay foto! o_O
23 de julio de 2008
Pacheando
Estos días he probado el tema de los fluidos en otros PCs para comprobar el rendimiento en máquinas bastante diferentes. Parece que aguanta bastante bien aunque al guardar el color en una textura de 128 bits, hay muy pocas gráficas que la puedan filtrar a la hora de pintar (básicamente todo lo que no lleva una DX10 lo pintará pixelado).
En vez de cambiar la manera de guardar el color (que tenía más curro de lo que parecía al principio), he tomado la decisión de aplicar un Gaussian Blur como efecto de post-proceso, de manera que se suaviza la imagen cargando casi todo el trabajo en la GPU que en este ejemplo no hace prácticamente nada. El resultado es bastante bueno y rápido, así que es muy posible que lo deje así finalmente.
Ah, también añadí la posibilidad de sacar screenshots. :P
En vez de cambiar la manera de guardar el color (que tenía más curro de lo que parecía al principio), he tomado la decisión de aplicar un Gaussian Blur como efecto de post-proceso, de manera que se suaviza la imagen cargando casi todo el trabajo en la GPU que en este ejemplo no hace prácticamente nada. El resultado es bastante bueno y rápido, así que es muy posible que lo deje así finalmente.
Ah, también añadí la posibilidad de sacar screenshots. :P
17 de julio de 2008
Ya casi...
Ya está cerca, parece que por fin voy acabando cosas y no sólo las estoy empezando. He añadido otro detalle más al simulador de fluidos, y a falta de un par de cosas ya va teniendo el aspecto que quería que tuviese.
Por desgracia he añadido los colores demasiado rápido y sin pensar, y como resultado tengo que ahora mismo necesito pintar la simulacion sobre un rendertarget de 128 bits, lo cual limita mucho el rendimiento y las plataformas donde quiero que se ejecute (no cumplo uno de los puntos que requería en la última entrada sobre esta demo).
Total, que tengo que volver al punto de la optimización, pero al menos ya sé que funciona el tema de los colores. A ver si este fin de semana lo puedo finiquitar...
Por desgracia he añadido los colores demasiado rápido y sin pensar, y como resultado tengo que ahora mismo necesito pintar la simulacion sobre un rendertarget de 128 bits, lo cual limita mucho el rendimiento y las plataformas donde quiero que se ejecute (no cumplo uno de los puntos que requería en la última entrada sobre esta demo).
Total, que tengo que volver al punto de la optimización, pero al menos ya sé que funciona el tema de los colores. A ver si este fin de semana lo puedo finiquitar...
16 de julio de 2008
El chico de los recados xD
Me han vuelto a pedir que haga un pequeño shader para el Model 2 Emulator, y yo encantado de poder aportar algo más a un programa tan conocido. ^^ Esta vez se trata de imitar el aspecto de los antiguos monitores arcade con un efecto normalmente conocido como "scanlines". En muchos emuladores se permite activar un efecto similar, y hay mucha gente que lo ha pedido para éste. Esta tarde me he puesto un momento y ya tengo una versión más o menos bien afinada:

Al ser un efecto procedural y no una textura que se aplica encima de la imagen original, no hay efectos raros al cambiar de resolución y cosas por el estilo. A ver si gusta y veo otro shader mío funcionando en algo que usará mucha gente. ^^
Aunque parezca mentira también he seguido con mis cosas de XNA, y ya he empezado a adaptar el simulador de fluidos para soportar varios colores simultáneos. Lo malo es que estaba muy cansado (está siendo una semana un poco dura) y he avanzado muy lentamente. A ver si mañana le doy más ritmo y pronto puedo colgarla. ;)

Al ser un efecto procedural y no una textura que se aplica encima de la imagen original, no hay efectos raros al cambiar de resolución y cosas por el estilo. A ver si gusta y veo otro shader mío funcionando en algo que usará mucha gente. ^^
Aunque parezca mentira también he seguido con mis cosas de XNA, y ya he empezado a adaptar el simulador de fluidos para soportar varios colores simultáneos. Lo malo es que estaba muy cansado (está siendo una semana un poco dura) y he avanzado muy lentamente. A ver si mañana le doy más ritmo y pronto puedo colgarla. ;)
Suscribirse a:
Entradas (Atom)
