Shader – krótkiprogram komputerowy, często napisany w specjalnymjęzyku programowania (shader language), który wgrafice trójwymiarowej opisuje właściwościpikseli orazwierzchołków. Technologia ta zastąpiła stosowaną wcześniej wkartach graficznych jednostkęT&L.
Cieniowanie pozwala na znacznie bardziej skomplikowane modelowanie oświetlenia imateriału na obiekcie niż standardowe modeleoświetlenia iteksturowanie. Jest jednak dużo bardziejwymagające obliczeniowo i dlatego dopiero od wprowadzenia bibliotekAPIDirectX 8 (rok 2000) sprzętowa obsługa cieniowania pojawiła się wśród możliwościkart graficznychkomputerów osobistych. Wcześniej cieniowanie stosowane było tylko w niektórych fotorealistycznychrendererach (np.Renderman), gdzie grafika nie jest jednak generowana wczasie rzeczywistym.
W stosunku do standardowych modeli oświetlenia, stosowanych do generowania grafiki w czasie rzeczywistym, cieniowanie umożliwia uwzględnienie między innymi:
Obecnie, z uwagi na wymagania bibliotekDirectX w wersji 10, zniknął podział panujący dotychczas naPixel Shader iVertex Shader. Obliczenia, jakimi te odrębne jednostki się zajmowały, są teraz wykonywane przez jednolite jednostki obliczeniowe, które są dynamicznie przydzielane do odpowiedniego typu zadań, w zależności od bieżącej potrzeby. Rozwiązanie takie zostało nazwane przezATIStream Processors, a przeznVidię –Unified Shaders.
Biblioteki graficzneDirect3D iOpenGL używają trzech typów cieniowania:
Cieniowanie wierzchołkowe – uruchamiane jest raz dla poszczególnych przetwarzanych wierzchołków. Jego zadaniem jest transformacja położenia wierzchołka wwirtualnej przestrzeni 3D na współrzędne 2D naekranie. Cieniowanie wierzchołkowe może operować na takich własnościach wierzchołków jak położenie, kolor i współrzędne tekstur, ale nie może tworzyć nowych wierzchołków. Wyjście cieniowania wierzchołkowego jest wejściem dla następnego etapu w potoku, jakim jest albo cieniowanie geometryczne (jeśli jest obecne), alborasteryzacja.
Cieniowanie geometryczne – pozwala na dodawanie lub usuwanie wierzchołków zsiatki wierzchołków (ang.mesh). Może być używane do proceduralnego tworzenia obiektów geometrycznych albo do dodawania objętościowych detali istniejących siatek wierzchołków. Te operacje mogłyby być zbyt kosztowne obliczeniowo dlaCPU. Direct3D 10 i OpenGL 3.1 mają już zawarte wsparcie dla tego typu cieniowania. Jeśli cieniowanie geometryczne jest używane, to wtedy jego wyjście jest przekazywane na wejście rasteryzatora.
Cieniowanie pikseli – jest jednostką odpowiadającą za wyliczanie kolorupikseli. Direct3D używa terminupixel shader, a OpenGL –fragment shader. Piksele na wejście tego etapu cieniowania są pobierane z rasteryzatora, który wypełnia wielokąty przesyłane zpotoku graficznego. Cieniowanie pikseli jest najczęściej używane do oświetlenia sceny i innych powiązanych efektów, np.bump-mappingu lub kolorowania.
Poniższa tabela przedstawia, które wersje jednostek cieniowania odpowiadają poszczególnym wersjom bibliotek DirectX.
| WersjaDirectX | Pixel Shader | Vertex Shader | Compute Shader |
|---|---|---|---|
| 8.0 | 1.0, 1.1 | 1.0 | brak |
| 8.1 | 1.2, 1.3, 1.4 | 1.1 | brak |
| 9.0 | 2.0 | 2.0 | brak |
| 9.0a | 2_A, 2_B | 2.x | brak |
| 9.0c | 3.0 | 3.0 | brak |
| 10.0 | 4.0 | 4.0 | 4.0 |
| 10.1 | 4.1 | 4.1 | 4.1 |
| 11 | 5.0 | 5.0 | 5.0 |
| 12 | 5.1 | 5.1 | 5.1 |
Cieniowanie jest wykorzystywane do zaaplikowania przekształceń na dużym zbiorze elementów jednocześnie, np. na każdym pikselu ekranu albo dla każdego wierzchołka modelu. Wymaga to więc zastosowaniaprzetwarzania równoległego. NajnowszeGPU mająarchitekturę wielordzeniową, specjalnie dostosowaną do tego rodzaju przetwarzania. Jest zatem możliwe używanie GPU nie tylko do obliczeń graficznych, ale także do obliczeń ogólnych (naukowych, inżynierskich itd.), co nosi nazwęGPGPU. Przykładowymi środowiskami programistycznymi do takich ogólnych obliczeń są:CUDA,BrookGPU(inne języki),OpenCL iDirectCompute (część DirectX zarządzająca jednostkami obliczeniowymi ogólnego zastosowania, czyliCompute Shader).
Do współczesnych języków cieniowania należą:
| Zobacz hasłoshader w Wikisłowniku |