Wolna encyklopedia

Shader - krótki program komputerowy, często napisany w specjalnym języku (shader language), który w grafice trójwymiarowej odpowiada za cieniowanie obiektów. Technologia ta zastąpiła stosowaną wcześniej jednostkę T&L.

Szadery pozwalają na dużo bardziej skomplikowane modelowanie oświetlenia i materiału na obiekcie niż standardowe modele oświetlenia i teksturowanie. Są jednak dużo bardziej wymagające obliczeniowo i dlatego dopiero od kilku lat sprzętowa obsługa szaderów jest obecna w kartach graficznych dla komputerów domowych. Wcześniej szadery stosowane były w niektórych fotorealistycznych rendererach (np. Renderman), gdzie grafika nie jest generowana w czasie rzeczywistym.

W stosunku do standardowych modeli oświetlenia, stosowanych do generowania grafiki w czasie rzeczywistym, szadery dają możliwość uwzględnienia między innymi:

Spis treści

Rodzaje shaderów

Obecnie z uwagi na wymagania bibliotek DirectX w wersji 10 zniknął podział panujący dotychczas na Pixel i Vertex Shader. Obliczenia, jakimi te odrębne jednostki się zajmowały, są teraz wykonywane przez jednolite jednostki obliczeniowe, które są dynamicznie przydzielane do takiego typu obliczeń, jaki jest aktualnie potrzebny. Rozwiązanie takie zostało nazwane przez ATI Unified Shaders a przez nVidię Stream Processors.

Biblioteki graficzne Direct3D i OpenGL używają trzy typy szaderów:

Vertex Shader

Szader wierzchołkowy - uruchamiany jest raz dla poszczególnych przetwarzanych wierzchołków. Jego zadaniem jest transformacja położenia wierzchołka w wirtualnej przestrzeni 3D na współrzędne 2D na ekranie. Szadery wierzchołkowe mogą operować na takich własnościach wierzchołków jak położenie, kolor i współrzędne tekstur, ale nie mogą tworzyć nowych wierzchołków. Wyjście szadera wierzchołkowego jest wejściem dla następnego etapu w potoku, jakim jest albo szader geometryczny (jeśli jest obecny) albo rasteryzator.

Geometry Shader

Szader geometryczny - pozwala na dodawanie lub usuwanie wierzchołków z siatki wierzchołków (ang. mesh). Szadery geometryczne mogą 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 dla CPU. Direct3D 10 ma już zawarte wsparcie dla tych szaderów. Natomiast OpenGL ma takie wsparcie, ale w postaci rozszerzeń, aczkolwiek jest bardzo prawdopodobne, że następna jego wersja (3.0 lub 3.1) będzie miała natywne wsparcie. Jeśli szadery geometryczne są używane, to wtedy wyjście z nich jest przekazywane do rasteryzatora.

Pixel Shader lub Fragment Shader

Szader pikselowy - jest programowalną jednostką odpowiadającą za wyliczanie koloru pikseli. Direct3D używa terminu "pixel shader", a OpenGL - "fragment shader". Piksele na wejście szadera pikselowego są pobierane z rasteryzatora, który wypełnia wielokąty przesyłane z potoku graficznego. Szadery pikselowe są przeważnie używane do oświetlenia sceny i innych powiązanych efektów, np. bump-mappingu lub kolorowania.

Poniższa tabela pokazuje, jak wersje jednostek szaderowych odpowiadają poszczególnym wersjom DirectX.

Wersja DirectX Pixel Shader Vertex Shader
8.0 1.0, 1.1 1.0
8.1 1.2, 1.3, 1.4 1.1
9.0 2.0 2.0
9.0a 2_A, 2_B 2.x
9.0c 3.0 3.0
10.0 4.0 4.0
10.1 4.1 4.1

Przetwarzanie równoległe

Szadery są 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. Oznacza to przetwarzanie równoległe. Najnowsze GPU 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.). Przykładowymi środowiskami programistycznymi do takich ogólnych obliczeń są: GPGPU, CUDA, BrookGPU i OpenCL.

Języki cieniowania

Współczesne języki cieniowania:

W rzeczywistości HLSL oraz Cg to jeden i ten sam język. Dualizm nazwy wynika prawdopodobnie z faktu, iż język ten został opracowany we współpracy firm Microsoft i nVidia.

Linki zewnętrzne

Źródło: „haslo,Shader