Najlepsza odpowiedź
Shadery to wyspecjalizowane programy używane przez sprzęt graficzny do tworzenia obrazów. Zwykle są podzielone na mniejsze programy, które obsługują różne aspekty procesu renderowania sprzętowego.
Istnieje kilka różnych odmian, ale najpopularniejsze z nich to piksel i Vertex shadery.
Vertex Shader jest odpowiedzialny za stosowanie wszelkich zmian w geometrii wejściowej. Zwykle oznacza to rzutowanie trójwymiarowej geometrii na dwuwymiarową płaszczyznę projekcji obrazu wyjściowego, ale czasami można dodać pewien rodzaj ruchu proceduralnego lub deformacji również tutaj.
Pixel Shader przyjmuje wyjście Vertex Shader i generuje piksele, które pojawią się w ostatecznym obrazie. W większości przypadków jest to oparte na pewnych odmianach równania renderowania , porównującym kierunek skierowany do piksela z kierunkami źródeł światła i właściwościami powierzchni , ale może to być cokolwiek, od losowej funkcji szumu po złożoną symulację lub śledzenie promieni.
Część tego, która najbardziej różni się od zwykłego programowania, polega na tym, że zarówno moduły cieniowania wierzchołków, jak i pikseli są skrajnie zrównoleglone. Każdy Vertex Shader będzie działał na każdym wierzchołku w danych wejściowych w tym samym czasie; każdy moduł cieniujący pikseli będzie działał na każdym pikselu końcowego obrazu w tym samym czasie. Oznacza to, że trudno jest coś zrobić z jednym pikselem na podstawie stanu drugiego – wszystkie piksele będą działać w tym samym czasie niezależnie od siebie. Efekty, które muszą być świadome kontekstu, często muszą uruchamiać wiele modułów cieniujących pikseli jeden po drugim, przechowując wyniki w tymczasowych obrazach.
To daje przyzwoity, bardzo podstawowy przegląd tego, jak to działa:
Odpowiedź
„Pixel Shader” (co jest złą nazwą dla „Fragment Shader”) to mały program, który działa równolegle wiele razy na GPU w celu określenia koloru fragmentów. Zasadniczo fragmenty są koncepcyjnie bardzo podobne do pikseli, stąd nazwa pomieszana.
Gdy geometria jest przesyłana do rysowania, wierzchołki są przekształcane przez „Vertex Shader”. Potok skonstruuje prymitywy, takie jak trójkąty lub linie, a po wyświetleniu ich na ekranie i przycięciu rasteryzer obliczy wszystkie dotknięte piksele i interpoluje wszelkie wartości między wierzchołkami, takimi jak kolory, współrzędne tekstury lub normalne . Fragment Shader jest uruchamiany dla każdego fragmentu w celu ustalenia ostatecznego koloru. Wykonywane są inne operacje, takie jak testowanie głębi / alfa / wzornika, a następnie fragmenty mogą być uśredniane razem w przypadku wielopróbkowego antyaliasingu, zanim ostatecznie staną się rzeczywistymi kolorami pikseli, które zostaną zapisane lub zmieszane w buforze ekranu.
Obraz pochodzi z tutaj .