Shader
Un shader este un program ce se execută pe unitatea de procesare grafică GPU și redă scena 3D monitorul 2D, ori într-o imagine bitmap. Shaderele sunt compilate din cod sursă, scris în limbajul GLSL ori altul, cu o sintaxă asemănatoare limbajului C. Ele sunt folosite în așa tehnologii precum OpenGL, Vulkan, WebGL,  Direct 3D. Cuvântul provine din limba engleză, "Shade" însemnând "umbră", "shader" fiind "cel care umbrește", deoarece inițial destinația lor era de a calcula, în dependență de locul sursei luminii, părțile luminate și cele umbrite ale unui corp. În sensul mai larg al cuvântului, shaderele au fost introduse ca etape adiționale de transformare în alte tehnologii grafice înainte de a fi introduse în tehnologiile 3D.

Limbaje de programare
Curent există două interfețe pentru aplicații grafice, OpenGL și DirectX (sau Direct3D). OpenGL este un standard deschis utilizat pe toate platformele, pe când DirectX este un standard proprietar, elaborat și distribuit de Microsoft în sistemul de operare Windows și dispozitivele lansate de Microsoft precum XBox. OpenGL utilizează limbajul GLSL (Graphics Library Shading Language), iar DirectX utilizează limbajul HLSL (High Level Shading Language). Principiile de lucru sunt similare. Ambele limbaje au fost construite pe baza limbajului C.

Tipurile de shadere și principiul de lucru

Sunt cinci tipuri de shadere. Cel mai frecvent se utilizează două dintre ele: Vertex Shader și Fragment Shader. Celelalte sunt Tessellation Control Shader, Tessellation Evaliattion Shader, Geometry Shader. Shaderele de teselare sunt apărute in OpenGL versiunea 4. Vertex shader se execută pentru fiecare vertex din modelele afișate. Apoi primitivele din Vertex Shader se interpolează, și se execută Fragment Shader pentru fiecare pixel. În Vertex Shader pot fi produse manipulări asupra coordonatei și asupra culorii vertexului. Un Fragment Shader de obicei calculează culoarea și transparența pixelului respectiv. Datele pot fi afișate la ecran ori într-o imagine rastru, adesea folosită pentru a produce textură. Alte calcule pot fiefectuate în  Fragment Shader, cum ar fi harta de adâncimi, folosită la calcularea umbrelor. Fragment Shader este ultima etapă programabilă care se execută înainte de se execută practic înainte de afișare, când deja majoritatea lucrului cu poziționarea este efectuat.
Lucrul cu shaderele este bazat pe vectori și matrici, și OpenGL și DirectX oferă funcții pentru operarea cu matricile (normalizare, înmulțire).

Tot ce ține de shadere se rotește în jurul performanței. OpenGL și DirectX paralelizează acest proces, folosind avantajul procesoarelor grafice, de a conține sute de nuclee care pot procesa informația în paralel. Shaderii sunt operații de genul SIMD (o singură instrucțiune, multe date).
Exemplu de vertex shader în OpenGL ES:
varying vec3 vNormal;
void main() {
	vNormal = normal;
	gl_Position = projectionMatrix *
	              modelViewMatrix *
	              vec4(position,1.0);
}
Exemplu de un simplu Fragment Shader în OpenGL ES, care face posibilă umbrirea obiectului alb-negru în dependență de poziția luminii:
varying vec3 vNormal;
void main() {
	//definim coordonatele luminii
	vec3 light = vec3(0.5,0.2,1.0);
	//normalizam, e nevoie ca lungimea vectorului sa fie 1
	light = normalize(light);
	//calculam produsul vectorilor Normală și lumină pentru a afla unghiul de incidență
	float dProd = max(0.0, dot(vNormal, light));
	//setăm culoarea pixelului
	gl_FragColor = vec4(dProd, dProd, dProd, 1.0);
}

Vezi și
GLSL
HLSL

Resurse Adiționale
GLSL: OpenGL Shading Language @ Lighthouse 3D - GLSL Tutorial
Steve Upstill: The RenderMan Companion: A Programmer's Guide to Realistic Computer Graphics, Addison-Wesley, ISBN 0-201-50868-0
David S. Ebert, F. Kenton Musgrave, Darwyn Peachey, Ken Perlin, Steven Worley: Texturing and modeling: a procedural approach, AP Professional, ISBN 0-12-228730-4. Ken Perlin is the author of Perlin noise, an important procedural texturing primitive.
Randima Fernando, Mark Kilgard. The Cg Tutorial: The Definitive Guide to Programmable Real-Time Graphics, Addison-Wesley Professional, ISBN 0-321-19496-9
Randi J. Rost: OpenGL Shading Language, Addison-Wesley Professional, ISBN 0-321-19789-5
Riemer's DirectX & HLSL Tutorial : HLSL Tutorial using DirectX with lots of sample code
HLSL Tutorials : HLSL tutorials on shader structure and how to implement multiple types of lighting.
GPGPU: general purpose GPU
MSDN: Pipeline Stages (Direct3D 10)

Legături externe
OpenGL geometry shader extension
AMD RenderMonkey  - unealtă pentru a dezvolta și experimenta cu shadere.

Referințe

Interfețe grafice
Infografică
Generarea imaginilor 3D
Un shader este un program ce se execută pe unitatea de procesare grafică GPU și redă scena monitorul , ori într- o imagine bitmap . Shaderele sunt compilate din cod sursă , scris în limbajul GLSL ori altul , cu o sintaxă asemănatoare limbajului C . Ele sunt folosite în așa tehnologii precum OpenGL , Vulkan , WebGL , Direct . Cuvântul provine din limba engleză , " Shade " însemnând " umbră " , " shader " fiind " cel care umbrește " , deoarece inițial destinația lor era de a calcula , în dependență de locul sursei luminii , părțile luminate și cele umbrite ale unui corp . În sensul mai larg al cuvântului , shaderele au fost introduse ca etape adiționale de transformare în alte tehnologii grafice înainte de a fi introduse în tehnologiile . Limbaje de programare Curent există două interfețe pentru aplicații grafice , OpenGL și DirectX ( sau Direct3D ) . OpenGL este un standard deschis utilizat pe toate platformele , pe când DirectX este un standard proprietar , elaborat și distribuit de Microsoft în sistemul de operare Windows și dispozitivele lansate de Microsoft precum XBox . OpenGL utilizează limbajul GLSL ( Graphics Library Shading Language ) , iar DirectX utilizează limbajul HLSL ( High Level Shading Language ) . Principiile de lucru sunt similare . Ambele limbaje au fost construite pe baza limbajului C . Tipurile de shadere și principiul de lucru Sunt cinci tipuri de shadere . Cel mai frecvent se utilizează două dintre ele : Vertex Shader și Fragment Shader . Celelalte sunt Tessellation Control Shader , Tessellation Evaliattion Shader , Geometry Shader . Shaderele de teselare sunt apărute in OpenGL versiunea Vertex shader se execută pentru fiecare vertex din modelele afișate . Apoi primitivele din Vertex Shader se interpolează , și se execută Fragment Shader pentru fiecare pixel . În Vertex Shader pot fi produse manipulări asupra coordonatei și asupra culorii vertexului . Un Fragment Shader de obicei calculează culoarea și transparența pixelului respectiv . Datele pot fi afișate la ecran ori într- o imagine rastru , adesea folosită pentru a produce textură . Alte calcule pot fiefectuate în Fragment Shader , cum ar fi harta de adâncimi , folosită la calcularea umbrelor . Fragment Shader este ultima etapă programabilă care se execută înainte de se execută practic înainte de afișare , când deja majoritatea lucrului cu poziționarea este efectuat . Lucrul cu shaderele este bazat pe vectori și matrici , și OpenGL și DirectX oferă funcții pentru operarea cu matricile ( normalizare , înmulțire ) . Tot ce ține de shadere se rotește în jurul performanței . OpenGL și DirectX paralelizează acest proces , folosind avantajul procesoarelor grafice , de a conține sute de nuclee care pot procesa informația în paralel . Shaderii sunt operații de genul SIMD ( o singură instrucțiune , multe date ) . Exemplu de vertex shader în OpenGL ES : varying vec3 vNormal ; void main ( ) { vNormal = normal ; gl_Position = projectionMatrix * modelViewMatrix * vec4( position,1.0 ) ; } Exemplu de un simplu Fragment Shader în OpenGL ES , care face posibilă umbrirea obiectului alb-negru în dependență de poziția luminii : varying vec3 vNormal ; void main ( ) { //definim coordonatele luminii vec3 light = vec3(0.5,0.2,1.0 ) ; //normalizam , e nevoie ca lungimea vectorului sa fie 1 light = normalize( light ) ; //calculam produsul vectorilor Normală și lumină pentru a afla unghiul de incidență float dProd = max(0.0 , dot(vNormal , light ) ) ; //setăm culoarea pixelului gl_FragColor = vec4(dProd , dProd , dProd,0 ) ; } Vezi și GLSL HLSL Resurse Adiționale GLSL : OpenGL Shading Language @ Lighthouse - GLSL Tutorial Steve Upstill : The RenderMan Companion : A Programmer's Guide to Realistic Computer Graphics , Addison-Wesley , ISBN50868-0 David S. Ebert , F. Kenton Musgrave , Darwyn Peachey , Ken Perlin , Steven Worley : Texturing and modeling : a procedural approach , AP Professional , ISBN228730-4 . Ken Perlin is the author of Perlin noise , an important procedural texturing primitive . Randima Fernando , Mark Kilgard . The Cg Tutorial : The Definitive Guide to Programmable Real-Time Graphics , Addison-Wesley Professional , ISBN19496-9 Randi J. Rost : OpenGL Shading Language , Addison-Wesley Professional , ISBN19789-5 Riemer's DirectX & HLSL Tutorial \ : HLSL Tutorial using DirectX with lots of sample code HLSL Tutorials \ : HLSL tutorials on shader structure and how to implement multiple types of lighting. GPGPU : general purpose GPU MSDN : Pipeline Stages ( Direct3D Legături externe OpenGL geometry shader extension AMD RenderMonkey - unealtă pentru a dezvolta și experimenta cu shadere . Referințe Interfețe grafice Infografică Generarea imaginilor