21 mar 2007

Si quieres que algo salga bien...

Al final no me ha quedado más remedio que pasar del SpriteBatch que incluye Xna.

Los motivos son tres:

* Quería usar shaders en los sprites. Aunque es posible usarlos con SpriteBatch, tan sólo si se aplican a la totalidad de la escena, lo cual no era suficiente.

* Quería usar animaciones mediante texturas con múltiples frames, lo que tampoco se soportaba directamente con SpriteBatch.

* Quería usar multitexturing, lo cual no se soporta con SpriteBatch.

Encontré algunos reemplazos a dicha clase, concretamente uno que resuelve el primer problema, y otro que resolvía el segundo. Pero no uno que lo tuviese todo, así que me ha tocado escribir uno casi desde cero.

El caso es que ya está hecho y funciona. Pero hay una cosa que no hace, y es lo de reordenar las cosas. En este momento se dibuja todo según llega, agrupando como le sea posible.

El rendimiento que da, por tanto, depende mucho del orden en que se le mande dibujar las cosas. Por ejemplo, dibujar dos grupos A y B seguidos, o entrelazados, causa una variación del 40% en el rendimiento final.

En fin, en las mismas condiciones el sistema da resultados mejores que las pruebas de ayer, pero como ya dije hay que tener cuidado con el orden. De momento así queda porque funciona, y permite Shaders con multitexturing.

Mañana intentaré juntar la lógica con los gráficos, para tener algo aceptable.

20 mar 2007

Vuelta a los orígenes

En fin, se veía venir. Hoy he instalado todo lo necesario para trabajar con XNA, y le he dado una segunda oportunidad.

Lo primero fue conseguir una pantalla en blanco, cosa realmente sencilla porque el proyecto base ya trae lo necesario (aunque en el Swift era todavía más simple :p).

Tras ello, el siguiente paso era dibujar un sprite en pantalla. Para eso, XNA incluye una potente clase llamada SpriteBatch, que permite lo que su nombre indica: Realizar un proceso batch de sprites en dos dimensiones, para dibujarlas después lo más rápido posible: Se pueden ordenar esos sprites para evitar problemas de alpha, o para minimizar el número de cambios de textura. También se permiten rotaciones y escalados, lo cual le proporciona toda la funcionalidad que hace falta para manejar sprites en 2D... siempre que usen una sola textura. Por ejemplo, para hacer tiles no creo que haya nada mucho más eficiente (habría que entrar ya en temas de no dibujar lo que no se va a ver y tal).

Rápidamente me programé un ejemplillo que, apretando una tecla, dibujaba más y más sprites en pantalla. El problema: ¿Cómo sabía cuantos sprites se estaban dibujando?

Así que lo siguiente fue mostrar texto en pantalla. Y, ay, esto ya resultó más complicado. Me explico:

XNA no incluye el soporte que traía MDX (y Direct3DX) para mostrar fuentes del sistema en la aplicación. Me imagino que tiene que ver con cierto aparatejo blanco. Y tampoco trae soporte para fuentes de tipo bitmap. Pero en fin, tras poco buscar encontré un pequeño paquete de clases entre las que se incluye un BitmapFont*.

Generar las fuentes fue un poco engorroso, puesto que no me valían las que llevo usando desde el Little Racers: Hace falta, además de la textura, un bonito archivo .xml que incluye la posición, tamaño, etc. de cada caracter disponible en la textura. Lo cual está muy bien, pero hay que hacerlo. Y además, tras generarlas, tampoco pude probarlas directamente porque resulta que si se genera una textura de 512 (quería una textura detallada para el texto), la estructura que usa el código utiliza datos de tipo byte, así que hale, a modificar código ajeno**...

En fin, tras pitos y flautas, conseguí la mierda que a continuación se muestra:


Descripción del barullo:
* 970 sprites (mas los 12 del texto, 982) dibujándose por frame.
* Todos usan la misma textura, de 256x256
* Resolución de 1280x1024
* Escalados a un octavo del tamaño de la textura original, es decir a 32x32 pixels.
* Vsync desactivado
* No se borra en la pantalla en cada frame
* Un total de 75fps.

En pruebas posteriores, obtuve resultados similares, por ejemplo 1020 sprites utilizando dos texturas de forma aleatoria, en vez de una (lo cual significa que funciona mejor!?

En resumen, que es posible hacer cosas en XNA (habrá que ver qué tal se porta cuando lleguemos al tema de Shaders), y que os vais a encontrar muchos enemigos en el Eternal Showdown :)




*: También se incluye un gestor de sprites con soporte para animación, al que le echaré un ojo más adelante.
**: Estuve por poner un comentario al respecto en la página de origen, pero estaban deshabilitados. La fecha de esa página data del 2006, es posible que exista una versión más moderna :\

17 mar 2007

Showing off

Tras unas cuantas carreras y paseos más, he desbloqueado la tienda de pintura, y he considerado oportuno hacer una bonita foto del Lotus Esprit V8 en todo su esplendor. La foto ha sido hecha usando el sistema que proporciona el propio juego.

Showing off

Antes de que alguien lo diga: Sí, es un fake, por eso no hay humo del derrape. La foto está hecha al máximo de calidad, que me va tan lento que es imposible conducir en condiciones :p. Además, para sacar los faros hay que mantener pulsada una tecla.

200 Kilómetros, uno detrás del otro

Hoy me he comprado el Test Drive Unlimited para Pc, y tras unos pequeños problemillas para entrar (relacionados con la cuenta de Gamespy y el beta test que hice del juego), entré de lleno en el juego. A simple vista, yo no noto ningún cambio respecto a la beta, excepto que todo va un pelín mejor de rendimiento (nada serio, sigo teniendo que jugar a 800x600 y al mínimo... pero es que incluso en el detalle mínimo se ve más que bien).

Eso, y que el multijugador parece funcionar mejor, ya sea porque hay más gente (y por tanto es más sencillo encontrar contrincante) o porque se mejorase el sistema. Sigue habiendo cosas muy mejorables en muchos aspectos, pero al menos uno se puede limitar a buscar partidas multijugador y entrar en ellas si le apetece (siempre que tenga coche adecuado y haya conducido antes por la zona donde empieza la carrera).

El caso es que tras un par de carreritas sin mucho interés (carreras con 4 rectas largas y cuatro curvas de 90º, en las que suele ganar el que más velocidad punta tiene), me metí en la partida de otro tipo, y se empezó un 1vs1: Su Mercedes SLR "Performance Tuning" contra mi Lotus Esprit V8 recién salido del concesionario.

La salida fue bastante emocionante, consiguió ganarme unos pocos metros, pero los recuperé con facilidad en cuanto la superior velocidad punta de mi coche se hizo evidente.

Fue entonces cuando me dí cuenta del desastre: La carrera era de 8 checkpoints, y el primero estaba a 20 Km . En total, 200Km de carrera que llevó unos 50 minutos completar.

En fin, decir que al final gané con 4 Kilómetros de ventaja, pero únicamente debido a esa superior velocidad punta, porque me metí una gran cantidad de tochazos... es lógico, me entretenía en las largas rectas moviendo la cámara, subiendo y bajando las ventanillas, cambiando de canción en la radio, etc.

En fin, que no pienso repetir la experiencia. No sé qué le da a la gente con las carreras largas y rectas... con lo divertido que tiene que ser hacer un duelo en las zonas boscosas y montañosas.

14 mar 2007

¿XNA?

Es una decisión que tarde o temprano tendré que tomar. Dado que estoy a punto de ponerme más o menos en serio con el nuevo proyecto, será mejor planteármelo ahora que en el futuro. La pregunta es ¿Lo hago en XNA?

Hasta ahora, todo está programado en C# utilizando DirectX administradas (algo que ha dejado de tener soporte de Microsoft) como base. Dado que me he centrado en la lógica del juego, aprovechando el bastante funcional aunque no eficiente motor 2D de cosecha propia, cambiarse en este momento no conllevaría muchos problemas... con el juego.

Pero claro, como no he usado nunca XNA, no sé cómo de sencillo será implementar ciertos asuntos en él. Especialmente los asuntos 2D. Ya lo intenté una vez y lo dejé, pero lo que estaba intentando hacer era adaptar el motor Swift a XNA.

Ahora, el enfoque sería diferente. Hay unas cuantas mejoras que me gustaría hacerle al motor (partículas más potentes y eficientes, soporte de semánticas en los shaders y mejor rendimiento en sprites animados o que compartan textura), pero son algo que conllevaría cambiar mucho la estructura interna del motor.

También me gustaría mejorar el sistema de colisiones y física, pero eso es algo muucho más peliagudo. Podría usar algo como esto. Y ya de paso hacerlo para el framework 2.0, no para el 1.1.

En fin, son muchas cosas las que habría que retocar. Definitivamente, si me pongo con esto NO habría demo para final de este mes. Pero bueno, tampoco es crítico.

Pero lo más probable es que termine pasando por el aro... y eso significará adios al Swift tal y como es ahora, y adiós a la demo para final de este mes :)

12 mar 2007

Los comics del mes (Febrero)

Este post llega con considerable retraso. La excusa del mes es que tanta práctica te quita las ganas de todo. Sin más dilación, veamos los cómics del mes de Febrero y principios de Marzo:

- V de Vendetta: Me suena haber escrito anteriormente, en algún lugar, sobre este cómic. El motivo era que me había comprado el primer número de la historia, y no me había agradado especialmente lo que ví. Un día me trajo mi madre de la biblioteca la historia completa en un tomo. He de decir que el peor número es en mi opinión el primero, pero aun así, entre que la historia no me deparaba muchas sorpresas porque ya había visto la película, y que no me atraía mucho el estilo de dibujo, tampoco me ha gustado especialmente. Pero a caballo regalado...

- Dragon Ball 25,26,27: Aparece Célula, demuestra sus capacidades, y se desarrolla hasta llegar a su forma perfecta, tras lo cual organiza los Cell Games. Los héroes se preparan para el combate que decidirá el destino del planeta...

- Spirit: Otro libro recopilatorio obtenido de una biblioteca, esta vez la de Oviedo. Para los (herejes) que no lo sepan, The Spirit es uno de los clásicos más importantes de la historia del cómic. Apareció por primera vez en el año 1940, y fue uno de los primeros cómics en salirse del cánon de los superhéroes. En él se nos cuentan las aventuras de un vigilante que da cuenta de los villanos al margen de la ley. Similar a Batman, pero con los pies un poco más en la tierra, y añadiendo una chispa de humor.

El recopilatorio en cuestión incluye las primeras historias aparecidas en dicha publicación, y, la verdad, los guiones son muchísimo más maduros y más completos que los clásicos de Marvel, por ejemplo.

- Rocco Vargas: Otro cómic de biblioteca, que pasó sin pena ni gloria por mis manos. Relata las aventuras de un piloto espacial y su tripulación en un sistema solar plagado de razas extraterrestres.

- TMNT vol.2 : Tras el gusto que me dió el primero, estaba bastante claro, pese a su elevado precio, que éste también iba a caer. De nuevo, no defrauda, y podemos disfrutar viendo a las tortugas ninja dándose de palos con Shredder y compañía. Además, el estilo de dibujo ya ha mejorado mucho respecto al primer número, siendo ahora mucho más espectacular.

- Lobo Solitario y su cachorro Nº14: Otro clásico, esta vez del manga. Éste fue uno de los que más fama cosechó en su momento en Estados Unidos. Relata la historia de Itto Ogami, un antiguo Albacea del Shogun (algo así como un ¿Verdugo?) que es víctima de una conspiración y acaba huyendo con su hijo de tres años en sus brazos. Los años siguientes los pasa haciendo de sicario, y planeando con calma su venganza, junto a su hijo Daigoro.
La verdad es que es un cómic muy interesante, muestra el lado más oscuro del japón feudal, y pese a que todas las historias son muy parecidas entre ellas (casi siempre acaban con un duelo a espada entre el protagonista y otro samurai), no se hace pesado. Por lo demás, es un pelín violento en ocasiones, pero en general no se pasa mucho con la sangre.
De éste tengo ya unos cuantos números, no seguidos porque en la Fnac la disponibilidad va a rachas, y además las portadas son demasiado parecidas y no logro recordar cuáles tengo y cuales no.

- Transformers: La nueva generación, nºs 1 y 2: Realmente estos cómics son de hace un par de meses, pero parece que no me acordé de mencionarlos entonces. Básicamente tienen pinta de ser una edición anticipada para aprovechar el filón de la película cuando ésta aparezca. Esto no es necesariamente malo si la calidad del cómic es buena, y en este caso no es mala.
Narra la historia posterior a la destrucción del Segundo Arca (el primer Arca era donde llegaron los Transformers. El segundo fue construido en conjunto por los Autobots y los humanos para que los Transformers volviesen a su planeta Cybertron). Básicamente, parte de cero con todos los Transformers del planeta desactivados o reprogramados para trabajar con facciones terroristas, y cuenta cómo recuperan la memoria y se dan los primeros palos. Bajas incluidas.


Y eso es todo por este mes. Realmente, hasta hace una semana el número de cómics era menor (Febrero fue un mes muy estresante...). Espero poder leer lo suficiente para llenar otro post a finales de este mes :)

8 mar 2007

Primeros pasos con ZBrush

Como dije ayer, iba a probar con el ZBrush a ver si conseguía, de una vez, obtener resultados aceptables con relativa facilidad, ya que hasta el momento no había habido suerte.

Hay que reconocer que el concepto de ZBrush es de lo más curioso: Es una fusión entre el photoshop y un programa de edición 3D. Nosotros dibujamos cosas sobre un lienzo que tiene profundidad, pero no podemos girarlo.

En cualquier caso, dejando a un lado esa característica, permite esculpir geometría como si de plastilina se tratase, añadiendo pegotes y quitando. La verdad es que es realmente divertido el hacerlo, y se pueden conseguir resultados bastante aceptables con facilidad.

¿ Problema? Eso no funciona tan bien para hacer las formas metálicas de las armas, ya que conseguir superficies lisas en ese programa es un poco complicado. Lo que más echo en falta es algún tipo de rejilla o snap a los ejes en algunas ocasiones (se puede, pero no parece que todo el tiempo).

En fin, el resultado final tras un videotutorial de una hora para entender de qué va el programa, y tres cuartos de hora de curro, el resultado se puede ver aquí:


La verdad es que debería haber añadido más detalle en la culata, y algún tipo de asa de madera en la parte frontal de la escopeta, pero algo armé que el modelo de edición inicial se perdió ,con lo que sólo podía esculpir a mano.

En fin, en cualquier caso el resultado me parece correcto, excepto porque el asa está torcida si miramos el arma de frente (como ya digo, echo en falta una forma de hacer snap a los ejes). Y para formas orgánicas es facilísimo, hice un lindo pulpito en apenas 5 minutos.

No obstante, aún tengo que echarle un ojo a algún programa más de los tradicionales en 3D. Pero aquí tenemos un buen punto de partida. Y sólo ocupa 20 megas.

7 mar 2007

Let the showdown begin

Aprovechando un rato libre que he tenido hoy, he creado un wiki nuevo (borrando de paso el anterior y el sitio Diario de Campaña), llamado Diario de Campaña, por mantener las apariencias. Por supuesto, incluye una sección para el Eternal Showdown, que procuraré rellenar un poco según vaya teniendo tiempo y contenido :).

Desgraciadamente, he perdido gran parte del tiempo intentando hacer el logo, por una estúpida idea que he tenido. Quería que apareciese un arma en el logo, pero no valía un arma cualquiera: Tenía que ser algo distinto. Lo mejor que se me ocurrió es una escopeta de TRIPLE cañón, pero claro, para mostrarla en el logo tendría que hacerla.

En principio no quería hacerla mediante fotomontaje porque limita bastante las posibilidades, y además detrás de este arma irían más, con lo cual tenía tres maneras: Generar en un programa 2D, Generar en un programa 3D, y dibujar a mano para luego escanear.

Como soy un paquete dibujando, sólo valían dos de las 3, y como además soy un zote dibujando cosas en 2D, otra de ellas fuera, con lo cual nos quedaba la opción del modelado 3D.

Pero claro, el nene no tiene una aplicación decente para modelar en 3D, y tras buscar y buscar por internet, ninguna de las gratuitas me ha gustado, y mira que pedía poco: Poder crear geometrías sencillas y escalarlas, rotarlas, fusionarlas, etc. Ni splines ni generar UVs ni animación ni leches. Pero todas las que probé tenían un interfaz demasiado limitado, o simplemente eran basura...

Así que no me quedará más remedio que instalarme algo más potente (voy a echarle un ojo a la demo de ZBrush a ver), o bien pintar a dedo en el photoshop.

Por cierto, si a alguien le apetece dibujar, que avise que le voy dando ideas :).

PD: Wops... la URL del Wiki es http://156.35.31.178/~i0886062/wiki

PD2: Sí, ya sé que los iconos de los post funcionan cuando quieren... el puto Blogger beta se empeña en cambiar las mayúsculas por minúsculas.

6 mar 2007

Hosting gratuito de wikis

En uno de mis múltiples naufragios por internet (léase "Prácticas de SISCOM"), me topé con PBWiki, una web donde se nos ofrecen wikis gratuitos (con sus correspondientes anuncios, etc.).

No es algo revolucionario, ya que siempre se puede contratar un hosting gratuito con PHP y MySQL, y montar allí el correspondiente Wiki, pero el engorro de configuración, permisos, etc. puede echar bastante atrás a la gente.

Personalmente, tengo interés en montar un par de wikis para mis proyectos en desarrollo, etc. Lo que intentó ser Diario de Campaña, vamos.

En mi opinión, lo chulo de los wikis no es tan sólo la parte de compartir conocimiento o colaborar entre varios para editar contenido, también la facilidad para añadir nuevo contenido, o modificar el existente, es un gran punto a su favor. Podemos olvidarnos de gestores de contenido con complejas interfaces (Joomla me resultó demasiado complejo para lo que quería hacer en Diario de Campaña), nos aseguramos la homogeneidad en todo el sitio, etc.

Para casos concretos (siempre hablando de páginas pequeñas sin ánimo de lucro), puede que un Wiki se quede corto: No tiene foros como tales, algunas tareas que podrían automatizarse no lo están, etc. No estoy muy puesto en el tema, y puede que hasta existan plugins para un Wiki para, por ejemplo, gestionar una liga o un sistema de puntuaciones/votos desde él. Y si no, tiempo al tiempo.

Creo que el futuro de los sistemas de gestión de contenidos pasará por una fusión entre lo que estamos acostumbrados a ver (PHPNuke, etc.) y las posibilidades que un Wiki nos ofrece. Si alguien quiere hacerse de oro ya sabe lo que le toca :).

PD: Para el último día de este mes prometo tener activo un Wiki del Eternal Showdown, junto con capturas y un ejecutable.