Shader
Z Wikipedii
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.
Pozwala na dużo bardziej skomplikowane modelowanie oświetlenia i materiału na obiekcie niż standardowe modele oświetlenia i teksturowanie. Jest jednak dużo bardziej wymagający obliczeniowo i dlatego dopiero od kilku lat sprzętowa obsługa shaderów jest obecna w kartach graficznych dla komputerów domowych. Wcześniej shadery 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, shadery dają możliwość uwzględnienia między innymi:
- refrakcji
- odbić lustrzanych
- oświetlenia HDRI
- mapy przemieszczeń (displacement maps)
- innych efektów takich jak rozmycie obrazu, zaszumienie, zmiana kolorów, itp.
Spis treści |
[edytuj] 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. Poniższa tabela przedstawia wymagania stawiane tym jednostkom w poszczególnych wersjach 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 |
[edytuj] Pixel shader
Pixel Shader jest programowalną jednostką odpowiadającą za wyliczanie koloru pikseli.
[edytuj] Vertex shader
Vertex Shader jest jednostką odpowiadającą za wyliczanie położenia wierzchołków wielokątów w przestrzeni. Jednostka Vertex Shader zastąpiła stosowaną wcześniej jednostkę T&L.
[edytuj] Języki cieniowania
Współczesne języki cieniowania:
- GLSL - OpenGL Shading Language (fragment standardu OpenGL)
- HLSL - High Level Shading Language (język cieniowania biblioteki DirectX)
- Cg - C for graphics (opracowany przez firmę nVidia)