# Shader

La tecnologia shaders és qualsevol unitat escrita en un llenguatge d'acolorit que es pot compilar independentment. És una tecnologia recent i que ha experimentat una gran evolució destinada a proporcionar al programador una interacció amb la unitat de processament gràfic (GPU) fins ara impossible. Els shaders són utilitzats per realitzar transformacions i crear efectes especials, com per exemple il·luminació, foc o boira. Per a la seva programació els shaders utilitzen llenguatges específics d'alt nivell que permetin la independència del maquinari.

## Història

En el 2000 la sèrie 2 de targetes GeForce permetia a la GPU fer-se càrrec de funcions de transformació i il·luminació que fins ara havia de fer-les la CPU, no obstant això no va ser fins a la GeForce 3 (2001) que es va incloure la possibilitat de programar-les amb la primera versió del model d'acolorit. Successives versions d'aquest model van afegir més funcionalitat: programació d'operacions sobre vèrtexs, píxels i textures. Cada tipus d'operació disposava de maquinari específic en la GPU.
Les GPU modernes porten shaders unificats que permeten realitzar diferents operacions d'acolorit amb un mateix maquinari, eliminant el particionat estàtic de la mateixa i maximitzant el seu ús. La primera generació de programació unificada per part de Nvidia va ser el xip G80 usat en les targetes GeForce 8 i Nvidia Tesla. La primera generació de ATI (ara AMD) es va introduir amb el xip R600 usat en les targetes Radeon HD 2000, basats en la microarquitectura TeraScale. La Xbox 360 va ser la primera videoconsola a emprar programació unificada en la GPU de la mà del xip Xenos basat en el disseny unificat de ATI.

## Llenguatges d'acolorit

Per a l'escriptura d'aquestes instruccions, els programadors fan ús de llenguatges de programació dissenyats específicament per a això. Cadascun d'aquests llenguatges de programació necessita enllaçar-se mitjançant una API, entre altres OpenGL, Vulkan o Direct3D. Existeixen altres llenguatges però els següents són els més coneguts.
* GLSL és el llenguatge desenvolupat pel grup Khronos. Està dissenyat específicament per al seu ús dins de l'entorn de OpenGL. Els seus dissenyadors afirmen que s'ha fet un gran esforç per aconseguir alts nivells de paral·lelisme. El seu disseny es basa en C i RenderMan com a model de llenguatge d'acolorit.
* CG llenguatge propietat de l'empresa Nvidia resultant de la seva col·laboració amb Microsoft per al desenvolupament d'un llenguatge d'acolorit. El seu principal avantatge és que pot ser usat per les APIs OpenGL i DirectX. Un altre avantatge d'aquest llenguatge és l'ús de perfils. Aquests llenguatges no són totalment independents del maquinari per tant és recomanable crear programes específics per a diferents targetes gràfiques. Els perfils de CG s'encarreguen de triar per a la seva execució el més adequat dels programes disponibles per al maquinari.
* HLSLés la implementació propietat de Microsoft, la qual va col·laborar al costat de Nvidiaper crear un llenguatge d'acolorit. Aquest llenguatge s'ha d'utilitzar al costat de DirectX (la primera versió per la qual es pot utilitzar és Direct3D 8.0). Anteriorment al Direct3D 8 (Direct3D 7, 6, 5...) s'utilitzava un altre mètode el qual era més complicat i complex per ser utilitzat. (Entre el que era el llenguatge, creació d'objectes, sons, partícules, entre altres).
A l'hora d'estudiar rendiments és difícil asseverar gens. No només s'han de tenir en compte el fabricant (Nvidia o ATI) sinó la versió del model d'acolorit, el controlador instal·lat i el llenguatge usat. Usualment com més avançada sigui la versió del shader, la quantitat d'objectes, textures, efectes ambientals (Sol, Núvols 3D, Fums, Focs Realistes, Aigua, Il·luminació) serà major; amb formes, colors i textures més realistes.

## Shaders unificats (Unified Shader Model)

El terme Unified Shader Model s'usa per descriure dos conceptes similars encara que diferents: l'arquitectura de ombrejat unificat i el model de ombrejat unificat. Descriurem les seves especificacions

### Unified Shader Model

El model de ombrejat unificat (unified shader model), coneguda en OpenGL simplement com el Unified Shader Model, i en Direct3D 10 com Shader Model 4.0, usa un conjunt d'instruccions molt consistent per a tots els tipus de ombrejats.Tots tenen gairebé les mateixes capacitats: poden llegir textures, bufers de dades i realitzar el mateix conjunt d'operacions aritmètiques.
No obstant això, el conjunt d'instruccions no és exactament el mateix entre els diferents tipus de shaders, ja que per exemple solament el ombrejat de píxel pot llegir textures amb gradients implícits de coordenades, i solament el ombrejat de geometria pot emetre primitives addicionals; etcètera.
Els primers models de shaders (com el Shader Model 1.x) usaven conjunts d'instruccions molt diferents per ombrejats de píxels i vèrtexs, tenint els ombrejats de vèrtexs un conjunt molt més flexible. Els models posteriors (com el Shader Model 2.x i el 3.x) van reduir les diferències, orientant-se cap al Unified Shader Model.

### Unified Shading Architecture

Quan el dispositiu de gràfics implementa Unified Shader Model, té sentit dissenyar les seves unitats de computació perquè qualsevol d'elles pot executar qualsevol tipus d'ombrejat. Quan aquestes unitats computacionals estan unificades, a això se li crida Unified Shading Architecture. Molt sovint aquest maquinari està compost d'un conjunt d'unitats de càlcul i una unitat per al balanceig de càrrega i l'assignació dinàmica que distribueix les tasques d'ombreig entre les unitats de càlcul.
No cal que un dispositiu que implementi el model unificat d'ombra tingui l'arquitectura unificada d'ombreig, i viceversa. Un dispositiu Direct3D 10 pot mantenir els seus processadors de vèrtexs, geometria i píxels dedicats (encara que, a causa que tindrien un conjunt d'instruccions molt similars, a escala de maquinari serien molt similars). D'altra banda, un maquinari primerenc tecnològicament (per exemple, amb Shader Model 3.0) pot tenir una arquitectura unificada, com en el cas del xip Xenos de la Xbox 360.
L'arquitectura d'ombreig unificat permet un ús més flexible del dispositiu de visualització de gràfics. Per exemple, en una situació en la qual hi hagi molta sobrecàrrega amb la geometria, el sistema podria ordenar a més unitats de càlcul que processessin els shaders de vèrtexs i geometria. En casos en els quals la sobrecàrrega sigui amb el càlcul relacionat amb els píxels i hi hagi poca càrrega amb els vèrtexs, es podria desviar el càlcul perquè més unitats realitzessin els càlculs dels ombrejats de píxels.
Processadors gràfics que tenen una arquitectura d'ombrejats unificats inclouen: xips Nvidia a partir de la sèrie GeForce 8, xips d'AMD a partir de la sèrie Radeon HD 2000, xips S3 Graphics a partir del Chrome 400, xips Intel a partir de la sèrie GMA X3000 i el xip gràfic Xenos de la Xbox 360.
També hi ha processadors gràfics mòbils que tenen arquitectura unificada de shaders, com el Mali T600 de segona generació.

## Referències

* 1 2 «HLSL (Windows)» (en anglès). [Consulta: 8 desembre 2017].
* 1 2 «Cg Toolkit» (en anglès). NVIDIA Developer, 07-03-2011.
* ↑ Group, Khronos. «OpenGL News Archives» (en anglès). Arxivat de l'original el 2017-11-20. [Consulta: 8 desembre 2017].
* ↑ «Tutorials» (en anglès). Lighthouse3d.com, 04-03-2011.
* 1 2 «Common-Shader Core (Windows)» (en anglès). [Consulta: 8 desembre 2017].
* ↑ PeterTurcan. «Fase del sombreador de geometría (GS) - UWP app developer» (en castellà). [Consulta: 8 desembre 2017].
* ↑ «GeForce 8800 GTX: 3D Architecture Overview - ExtremeTech» (en anglès). ExtremeTech, 08-11-2006.
* ↑ Shimpi, Anand Lal «ARM Announces 8-core 2nd Gen Mali-T600 GPUs». GPU reviews.