You are on page 1of 2

¿Qué son los shaders?

Shader: “Un procedimiento de sombreado e iluminación que permite al


artista/programador especificar el renderizado de un vertex o de un pixel”.

Esta es la definición dada por el programa RenderMan de Pixar en 1989, que


sería usado para la realización de la película Toy Story (1995).

Por estas mismas fechas comenzó una revolución en el mundo de las tarjetas
gráficas de PC que fue dotando a las mismas de más y más potencia. En 1999 se
produce un importante salto cualitativo en el terreno de las tarjetas gráficas al presentar
nVidia la GeForce 256 que supuso el inicio de las GPUs (Graphics Processing Units)
programables.

A grandes rasgos, los shaders son simples programas que transforman un vértice
(denominado vertex) o bien un pixel (denominado fragment por OpenGL de forma más
correcta como veremos más adelante, aunque probablemente esté mas extendida la
propia denominación de pixel).

Para cada vertex, se llama a un vertex shader en una primitiva. Una vez que el
vertex es procesado por el shader, la primitiva es ensamblada y procesada, siendo
renderizada como una serie de pixels que pueden a su vez ser procesados por un pixel
shader para ser luego pintados.

Así, los shaders reemplazan una sección del hardware de vídeo que típicamente
se denomina pipeline de función fija (Fixed-Function Pipeline o FFP). Esto es porque
reemplazan tanto la transformación de vértices como la iluminación y mapeado de
textura “fijos” del hardware (es decir, no programable) por una forma programable.
Con la introducción de los shaders disponemos de la opción de tomar el control para
conseguir cualquier efecto que queramos, o dejar que el FFP decida por nosotros.

Actualmente, los shaders no sólo sirven para iluminación y sombreado, como


indica su nombre, sino que además sirven para crear efectos gráficos más ricos, como
animaciones, efectos de partículas, etc.

Veamos de forma un poco más rigurosa las definiciones de Vertex Shader, Pixel
Shader y Fragment Shader.

 
Un Vertex Shader (VS) es una función de procesado gráfico que manipula los
valores de un vertex en un plano 3D mediante operaciones matemáticas sobre un objeto.
Estas variaciones pueden ser diferencias en el color, en las coordenadas de la textura, en
la orientación en el espacio o en el tamaño del punto.

Cuando el VS está activado, reemplaza al pipeline de función fija para la


transformación de vértices. El shader no opera sobre una primitiva (un triángulo, por
ejemplo), sino sobre un solo vertex cada vez; además no puede crearlos ni destruirlos
sino solamente manipularlos. El programa shader se ejecuta para cada vertex que deba
ser procesado.

De forma análoga al vertex shader, se define un Pixel Shader (PS) como un pequeño
programa que procesa fragments (algo así como pixels con más datos) y que se ejecuta
en la GPU. Al crear un PS, se crea una función de procesado de fragmentos que
manipula datos de fragmentos.

Frecuentemente necesitan datos del VS, llegando incluso a veces a ser “conducidos” por
éste. Por ejemplo, para calcular una iluminación por pixel, el PS necesita la orientación
del triángulo, la orientación del vector de luz y en algunos casos la orientación del
vector de vista.

Un Fragment Shader (FS) es lo mismo que un PS. El nombre de fragment viene de que
una escena 3D es proyectada en el plano x-y (2D) donde los puntos son llamados
fragmentos. Un fragmento contiene no sólo información de color del punto sino también
otra información tal como la posición y las coordenadas de la textura por ejemplo.
Diversos fragmentos pueden ser unidos para mostrar finalmente un pixel en la pantalla.

You might also like