Shader: Różnice pomiędzy wersjami

[wersja przejrzana][wersja przejrzana]
Usunięta treść Dodana treść
m drobne merytoryczne, drobne redakcyjne, poprawa linków
m drobne merytoryczne, drobne redakcyjne, poprawa linków
Linia 1:
'''Shader''' – krótki [[Oprogramowanie|program]] komputerowy, często napisany w specjalnym języku programowania (''shader language''), który w [[Grafika 3D|grafice trójwymiarowej]] opisuje właściwości [[piksel]]i oraz [[Wierzchołek (grafika 3D)|wierzchołków]]. Technologia ta zastąpiła stosowaną wcześniej w [[Karta graficzna|kartach graficznych]] jednostkę [[Transform and Lighting|T&L]].
 
'''Cieniowanie''' pozwala na znacznie bardziej skomplikowane modelowanie oświetlenia i [[Materiał (grafika 3D)|materiału]] na obiekcie niż standardowe modele [[Oświetlenie (grafika komputerowa)|oświetlenia]] i [[teksturowanie]]. Jest jednak dużo bardziej [[ZłożonośćMoc obliczeniowa|wymagające obliczeniowo]] i dlatego dopiero od wprowadzenia bibliotek [[Interfejs programowania aplikacji|API]] DirectX 8 (rok 2000) sprzętowa obsługa cieniowania obecnapojawiła jestsię wwśród możliwości [[karta graficzna|kartachkart graficznych]] [[Komputer osobisty|komputerów osobistych]]. Wcześniej cieniowanie stosowane było tylko w niektórych fotorealistycznych [[Renderowanie|rendererach]] (np. [[Renderman]]), gdzie grafika nie jest jednak generowana w [[Czas rzeczywisty|czasie rzeczywistym]].
 
W stosunku do standardowych modeli oświetlenia, stosowanych do generowania grafiki w czasie rzeczywistym, cieniowanie umożliwia uwzględnienie między innymi:
* [[refrakcja|refrakcji]],
*[[Odbicie (grafika)|odbić]] [[lustroSymetria płaszczyznowa|lustrzanych]],
* oświetlenia [[High dynamic range rendering|HDR]],
* [[modelowanie (3D)#Mapy przemieszczeń|mapy przemieszczeń]] (ang. ''displacement maps''),
* innych efektów, takich jak rozmycie obrazu, zaszumienie, zmiana kolorów, itp.
 
== Rodzaje cieniowania ==
Obecnie, z uwagi na wymagania bibliotek [[DirectX]] w wersji 10, zniknął podział panujący dotychczas na ''Pixel Shader'' 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 takiegoodpowiedniego typu obliczeńzadań, jakiw jestzależności aktualnieod bieżącej potrzebny. Rozwiązanie takie zostało nazwane przez [[ATI Technologies|ATI]] ''Stream Processors'', a przez [[Nvidia|nVidię]] ''Unified Shaders''.
 
Biblioteki graficzne [[Direct3D]] i [[OpenGL]] używają trzech typów cieniowania:
 
=== Vertex Shader ===
'''Cieniowanie wierzchołkowe''' – uruchamiane jest raz dla poszczególnych przetwarzanych wierzchołków. Jego zadaniem jest transformacja położenia wierzchołka w [[Scena (3D)|wirtualnej przestrzeni 3D]] na współrzędne 2D na [[Bufor ramki|ekranie]]. 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), albo [[Rasteryzacja|rasteryzatorrasteryzacja]].
 
=== Geometry Shader ===
'''Cieniowanie geometryczne''' – pozwala na dodawanie lub usuwanie wierzchołków z [[Siatka (grafika 3D)|siatki 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 dla [[Procesor|CPU]]. 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 z niego jest przekazywane dona wejście rasteryzatora.
 
=== Pixel Shader lub Fragment Shader ===
'''Cieniowanie pikseli''' – jest jednostką odpowiadającą za wyliczanie koloru [[piksel]]i. Direct3D używa terminu "''pixel shader"'', a OpenGL – "''fragment shader"''. Piksele na wejście ichtego etapu cieniowania są pobierane z rasteryzatora, który wypełnia wielokąty przesyłane z potoku graficznego. Cieniowanie pikseli jest najczęściej używane do oświetlenia sceny i innych powiązanych efektów, np. [[Mapowanie wypukłości|Bumpbump-mappingu]] lub kolorowania.
 
Poniższa tabela pokazujeprzedstawia, jakktóre wersje jednostek cieniowania odpowiadają poszczególnym wersjom bibliotek DirectX.
 
{| class="wikitable"