lunes, 8 de julio de 2013

DirectX desde 0. Capitulo 3. Shaders en DirectX 11

Artículo perteneciente al tutorial de DirectX desde 0

Hola a todos,

Tal vez poner en una misma frase "tutorial desde 0" y "shaders de Directx11" no es lo más correcto del mundo. De hecho, OpenGL también tiene shaders y cuando hice el tutorial de OpenGL desde 0 creo recordar que ni los mencioné por que me pareció que se escabapaban totalmente del obejtivo del curso, pero DirectX 11 es diferente.

Dentro del paradigma de trabajo de DirectX11 los shaders tienen una importancia vital, hasta el punto que se puede decir que prácticamente todo lo que hagamos serán shaders, así que si que está justificado hablar de ellos aunque estemos en un punto muy inicial del curso.

Pero... ¿que es un shader? Un shader es un programa muy sencillo , pensado para ejecutarse sobre la GPU (tarjeta gráfica) escrito en HLSL ( un pseudoC ). La idea del shader es trabajar directamente en el flujo de proceso de la tarjeta gráfica, obteniendo datos de una etapa anterior para procesarlos y servirlos a una etapa posterior. Una de las ventajas de los shaders es que no se compilan junto con el código, sino en tiempo de carga, esto significa que de cara al desarrollo cuentan como scripts y agilizan mucho el tiempo de creación de nuestras aplicaciones (evitamos recompilar, que cuando el proyecto es grande, puede llegar a ser un tiempo de decenas de mínutos )

En función de en que etapa del proceso está los shaders se llaman de una manera u otra y tienen diferentes ámbitos de trabajo:

- Vertex Shaders: Son shaders que trabajan solamente con los vértices de la escena (se puede modificar posición, color, iluminación, textura, etc...), pero tratan cada vértice por separado, es decir, al ejecutarse el vertex shader no sabemos que vértice estamos manipulando. Es muy usado para transformaciones del espacio ( traslaciones , rotaciones , etc...) y deformación de mallas. Nunca podrá eliminar o crear un vértice, solo modificarlo.

- Geometry Shaders: Son shaders que trabajan con un modelo 3D y que permiten incluir y eliminar vértices a la malla en la que se está trabajando. Muy usados para generar modelos de diferentes niveles de precisión.

- Pixel Shaders: Son shaders que trabajan a nivel de pixel y que por lo tanto son muy útiles para hacer efectos de iluminación y sombreado.

- Compute Shaders: Estos shaders son un caso especial de shader no relacionado directamente con el pintado. Es decir, son shaders (se ejecutan en la GPU) pero su funcionamiento puede ser el que se quiera. Se basa en el aprovechamiento de los múltiples procesadores en paralelo que tienen las tarjetas gráficas para poder hacer cálculos de físicas, IA, etc...

Para que veáis mejor donde se ejecuta cada shader podéis mirar el siguiente gráfico sacado de la mdsn


Espero que os sirva y os haya gustado. A medida que avancemos en el curso iréis viendo más ejemplos de shaders extremadamente útiles. De mientras podéis ver un ejemplo de Vertex y Pixel shader aqui

Nos vemos



LordPakusBlog

0 comentarios :

Publicar un comentario

Entradas populares