Ayer tuvimos la tercera clase del curso de HLSL del Gamelab y se puede decir que ya hemos entrado en materia. La primera parte la dedicamos a la multitextura y el blending, cosa que fue bastante sencilla (y desde luego, más intuitiva que con el fixed-pipeline) porque, al fin y al cabo, lo que se hace es combinar los colores de varias texturas.

En ese momento me puse a cambiar el ejemplo un poco, para entretenerme y terminé con esto:

Un shader con dos texturas, la primera es un tileset de Kirby que animé diréctamente en el shader cambiando las coordenadas de textura. Por detrás hay un fondo que saqué de una captura del Super Mario World, y que se mueve horizontalmente.

Luego entró Jacobo a dar la parte más tostón del día, las ecuaciones de iluminación. Fue una parte bastante durilla, sobretodo para los novatos, que se habrán quedado flipados. Yo tampoco tengo mucha idea de esto, pero sí se por dónde van los tiros, así que no era tanta sorpresa.

Quizás hubiera sido más ameno si hubieramos ido poco a poco haciendo el shader en lugar de limitarnos a mirar el código y a ver el resultado final. Y con Gusi pasó lo mismo, así que la gente (entre los que me incluyo) debió liarse un poco.

Por eso voy a intentar recrear lo que hiciemos desde cero e ir poco a poco, para entenderlo mejor. Es una parte que, aunque sea muy matemática, conviene saber porque muchos efectos interesantes se realizan con modificaciones de estas técnicas. Yo ya me hecho una textura para el cubo de ejemplo para probar los shaders. Incluso hice un normal map con un plugin para el Photoshop hecho por NVidia. Publicaré las capturas del resultado en cuanto tenga algo.

Por cierto, que bajé el FX Composer 2 y ¡madre mía cómo lo han engordado!. Yo lo recordaba como un editor de código con una ventanita de preview y poco más y ahora está sobrecargadísimo. Además de que no me funciona bien, y la ventanita de preview de shader la carga mal. Creo que me quedaré con el RenderMonkey de momento. Parece mentira que no haya más editores.

Y todavía sigo pensando en cómo generalizar esto en mi motor, sin tener que recurrir a replicar la fixed-pipeline en un shader, para que los novatos no tengan que tocar los shaders.