Cel mai bun răspuns
Shaders sunt programe specializate utilizate de hardware-ul grafic pentru a produce imagini. De obicei, acestea sunt împărțite în programe mai mici care gestionează diferite aspecte ale procesului de redare hardware.
Există mai multe varietăți diferite, dar cele mai frecvente sunt pixel și vertex umbrere.
vertex shader este responsabil pentru aplicarea oricăror modificări la geometria de intrare. De obicei, asta înseamnă proiectarea geometriei 3-d pe planul de proiecție 2-d al imaginii de ieșire, dar uneori s-ar putea să adăugați un fel de mișcare procedurală sau deformare și la geometria de aici.
ieșirea umbrelor vertexului și generează pixelii care vor apărea în imaginea finală. De cele mai multe ori, acest lucru se bazează pe unele variații ale ecuației de redare , comparând direcția orientată a pixelului cu direcțiile surselor de lumină și proprietățile suprafeței , dar ar putea fi orice, de la o funcție de zgomot aleatoriu la o simulare complexă sau raytracing.
Partea din acest lucru care este cel mai diferită de programarea obișnuită este că atât umbrele de vârf cât și cele de pixeli sunt extrem de paralelizat. Fiecare umbră de vârf va rula pe fiecare vârf din datele de intrare în același timp; fiecare pixel shader va rula pe fiecare pixel din imaginea finală în același timp. Asta înseamnă că este greu să faci ceva unui pixel în funcție de starea altuia – toți pixelii vor rula în același timp, independent unul de celălalt. Efectele care trebuie să fie conștiente de context trebuie adesea să ruleze mai multe umbrere de pixeli unul după altul, stocând rezultatele în imagini temporare.
Acest lucru vă oferă o imagine de ansamblu decentă, foarte simplă, despre modul în care funcționează: >
Răspuns
Un „pixel shader” (care este un nume rău pentru un „fragment shader”) este un mic program care rulează în paralel de multe ori pe GPU pentru a determina culoarea fragmentelor. În termeni de bază, fragmentele sunt foarte similare din punct de vedere conceptual cu pixeli, de unde și confuzia numelui.
Când geometria este trimisă pentru desen, vârfurile sunt transformate de „vertex shader”. Conducta va construi primitive cum ar fi triunghiuri sau linii și, după ce au fost proiectate pe ecran și tăiate, rasterizatorul va elabora toți „pixelii” care se ating și interpola orice valori între vârfuri, cum ar fi culorile, coordonatele texturii sau normale. . Umbritorul de fragmente este rulat pentru ca fiecare dintre fragmente să elaboreze culoarea finală. Sunt efectuate alte operații, cum ar fi testarea adâncimii / alfa / șablonului, iar apoi fragmentele ar putea fi mediată împreună în cazul antialiasingului cu mai multe eșantioane, înainte de a deveni în cele din urmă culori reale ale pixelilor pentru a fi scrise sau amestecate în memoria tampon a ecranului.
Imagine preluată de la aici .