# Sombreador

Un sombreador (llamado shader en inglés) es un programa informático que realiza cálculos gráficos escrito en un lenguaje de sombreado que se puede compilar independientemente. Es una tecnología que ha experimentado una rápida evolución destinada a proporcionar al programador una interacción con la unidad de procesamiento gráfico (GPU) hasta ahora imposible. Los sombreadores son utilizados para realizar transformaciones de vértices o coloreado de píxeles, entre otras labores, con el propósito de crear efectos especiales, como iluminación, fuego o niebla.
Para su programación, los sombreadores utilizan lenguajes específicos de alto nivel independientes del hardware sobre el que se ejecuten. Existen sombreadores de diversos tipos dentro de la arquitectura de una GPU, como por ejemplo sombreadores de vértices, sombreadores de geometría, y sombreadores de cómputo para realizar cálculos que no son gráficos, entre otros.

## Historia

En el 2000 la serie 2 de tarjetas GeForce permitía a la GPU hacerse cargo de funciones de transformación e iluminación que hasta ahora debía hacerlas la CPU, sin embargo no fue hasta la GeForce 3 (2001) que se incluyó la posibilidad de programarlas con la primera versión del modelo de sombreado. Sucesivas versiones de dicho modelo añadieron más funcionalidad: programación de operaciones sobre vértices, píxeles y texturas. Cada tipo de operación disponía de hardware específico en la GPU.
Las GPU modernas llevan sombreadores unificados que permiten realizar distintas operaciones de sombreado con un mismo hardware, eliminando el particionado estático de la misma y maximizando su uso. La primera generación de programación unificada por parte de Nvidia fue el chip G80 usado en las tarjetas GeForce 8 y Nvidia Tesla. La primera generación de ATI (ahora AMD) se introdujo con el chip R600 usado en las tarjetas Radeon HD 2000, basados en la microarquitectura TeraScale. La Xbox 360 fue la primera videoconsola en emplear programación unificada en la GPU de la mano del chip Xenos basado en el diseño unificado de ATI.

## Lenguajes de sombreado

Para la escritura de esas instrucciones, los programadores hacen uso de lenguajes de programación diseñados específicamente para ello. Cada uno de estos lenguajes de programación necesita enlazarse mediante una API, entre otras OpenGL, Vulkan o Direct3D. Existen otros lenguajes pero los siguientes son los más conocidos.
* GLSL es el lenguaje desarrollado por el grupo Khronos. Está diseñado específicamente para su uso dentro del entorno de OpenGL. Sus diseñadores afirman que se ha hecho un gran esfuerzo para lograr altos niveles de paralelismo. Su diseño se basa en C y RenderMan como modelo de lenguaje de sombreado.
* CG lenguaje propiedad de la empresa Nvidia resultante de su colaboración con Microsoft para el desarrollo de un lenguaje de sombreado. Su principal ventaja es que puede ser usado por las APIs OpenGL y DirectX. Otra ventaja de este lenguaje es el uso de perfiles. Estos lenguajes no son totalmente independientes del hardware por lo tanto es recomendable crear programas específicos para diferentes tarjetas gráficas. Los perfiles de CG se encargan de elegir para su ejecución el más adecuado de los programas disponibles para el hardware.
* HLSL es la implementación propiedad de Microsoft, la cual colaboró junto a Nvidia para crear un lenguaje de sombreado. Este lenguaje se debe utilizar junto a DirectX (la primera versión para la que se puede utilizar es Direct3D 8.0). Anteriormente al Direct3D 8 (Direct3D 7, 6, 5...) se utilizaba otro método el cual era más complicado y complejo para ser utilizado. (Entre lo que era el lenguaje, creación de objetos, sonidos, partículas, entre otras).
A la hora de estudiar rendimientos es difícil aseverar nada. No solo se deben tener en cuenta el fabricante (Nvidia o ATI) sino la versión del modelo de sombreado, el controlador instalado y el lenguaje usado. Usualmente cuanto más avanzada sea la versión del shader, la cantidad de objetos, texturas, efectos ambientales (Sol, Nubes 3D, Humos, Fuegos Realistas, Agua, Iluminación) será mayor; con formas, colores y texturas más realistas.