jueves, 22 de enero de 2015

Hablemos de Shaders (para novatos)


Como muchos bien sabeis, en Mechanic Moon Studio trabajamos principalmente con el programa Game Maker Studio. Durante el último mes hemos estado investigando sobre características a implementar en nuestros próximos proyectos. Una de ellas, a la que hemos querido nunca renunciar, han sido los Shaders.

¿Qué son los Shaders? A todos nos sonará en los reportajes sobre juegos los términos shaders de iluminación, efectos o quizás en los requisitos técnicos: Requerida Tarjeta Gráfica con Pixel Shader 4.0.


Digamos que los Shaders son operaciones que hace la GPU (el procesador de la tarjeta gráfica) con las imágenes y elementos que tiene en pantalla. En plan resumido, cuando se aplica un shader a una imagen sea 2D o 3D, la imagen pasa a aplanarse y a convertirse en cientos de triangulos, guardando sus posiciones, profundidad, colores, etc. Seguidamente se convierten a píxeles y ahí empieza el trabajo del sistema de shaders.

Normalmente los sistemas de shaders hacen diversas pruebas para comprobar qué deben dibujar en pantalla y así ahorrar trabajo a la GPU:
- Todo elemento fuera de pantalla no se tiene en cuenta.
- Elementos demasiado alejados de la "cámara" tampoco se tienen en cuenta.
- Elementos que están tapados completamente por otros elementos, tampoco se dibujan.
- Elementos que están parcialmente tapados o parcialmente fuera de pantalla, se dividen y se tiene en cuenta sólo lo que se ve por la cámara.

Cómo podréis imaginar, al aplicar estas reglas, la carga gráfica y cantidad de información que debe calcular la GPU con su motor de shader se reduce drásticamente, además nada de esto lo gestiona la CPU (el procesador de la placa base). Ahora bien, ¿Qué puede hacer un shader?

Un sistema de shaders realmente hace pocas cosas, pero con esas pocas operaciones se pueden conseguir muchísimos efectos. Simplificando, las operaciones más comunes que se hacen, pixel a pixel son:
- Transformar el pixel (Escalarlo o rotarlo)
- Cambiar su opacidad / color / brillo / contraste
- Cambiarlo de posición

Con sólo estas pocas operaciones ya podemos hacer efectos de filtro encima de la imagen, efectos de ondulación para simular que algo está debajo del agua y mil cosas más, entre ellas, efectos de iluminación. Para muchos de estos efectos, además, el motor de Shader usa otras texturas de apoyo para controlar cómo afecta o refleja la luz cada objeto. Por ejemplo: Mapas de Normals, Specular, Diff, Depth, etc.

SU USO EN GAME MAKER STUDIO

Para nuestros proyectos, vamos a utilizar un Shader preparado para crear una iluminación realista a la imagen. Otros sistemas anteriores de iluminación en Game Maker, usaban sistemas basados en Surfaces. Dichos sistemas consumían demasiado rendimiento del CPU y entonces no eran factibles para el desarrollo de un juego comercial. Al usar un sistema de Shaders, liberamos memoria a la CPU y cargamos esos cálculos a la GPU, normalmente más liberada, ya que los Shaders, digamos que van al final del proceso de cada frame dibujado en pantalla.

Este sistema lo hemos estado editando durante varias semanas y hemos conseguido que funcione en Android. Sin embargo al ser un proyecto en 2D necesitamos algo que nos permita utilizar toda la potencia del sistema, dando profundidad a nuestros sprites. Para ello hemos apoyado una excelente herramienta en Kickstarter: Sprite DLight



Este programa (que ya  hemos probado en versión Alpha como buenos backers que somos) nos permite crear mapas de Normals y Speculars para nuestros sprites pixelados y sin profundidad. No me entretendré mucho en explicaros esta parte, pero gracias a esta inestimable ayuda vamos a poder dar profundidad a nuestros personajes y escenarios de forma dinámica, decidiendo cómo queremos que les afecte la luz, influyendo la distancia a la fuente de luz o su ángulo.

Os recomendamos que sigais este proyecto ya que es muy prometedor y necesitan también vuestro apoyo para entrar en Steam: Sprite DLight en Steam GreenLight.

Dicho programa es compatible también con Unity 3d y otros programas de desarrollo web, por lo que es una forma rápida y semi-automática de generar mapas de normales y speculars para ir trabajando y mejorando vuestros proyectos con el uso de shaders.

 Como conclusión os comento que nuestro proyecto "Fire Tactics" usará Sprite DLight para aplicar los shaders en Game Maker Studio. Por nuestra parte, el descubrimiento y dominio de estos nuevos "juguetes" nos permitirá trabajar la ambientación de nuestros proyectos con más mimo y conseguir resultados (esperamos) más espectaculares.

No hay comentarios:

Publicar un comentario