Shader: Różnice pomiędzy wersjami

Dodane 146 bajtów ,  13 lat temu
WP:SK, int., źródło
[wersja nieprzejrzana][wersja przejrzana]
m (robot dodaje: fa:سایه‌زن, ko:셰이더 usuwa: tr:Shader)
(WP:SK, int., źródło)
'''Shader''' - krótki [[Oprogramowanie|program]] komputerowy, często napisany w specjalnym języku (''shader language''), który w [[grafika trójwymiarowa|grafice trójwymiarowej]] opisuje właściwości [[piksel|pikseli]]i oraz [[Wierzchołek (grafika 3D)|wierzchołków]]. Technologia ta zastąpiła stosowaną wcześniej jednostkę [[Transform and Lighting|T&L]].
 
Cieniowanie pozwala na znacznie bardziej skomplikowane modelowanie oświetlenia i materiału na obiekcie niż standardowe modele oświetlenia i [[teksturowanie]]. Jest jednak dużo bardziej wymagające obliczeniowo i dlatego dopiero od kilku lat sprzętowa obsługa cieniowania jest obecna w [[karta graficzna|kartach graficznych]] dla komputerów domowych. Wcześniej cieniowanie stosowane było w niektórych fotorealistycznych [[renderer|rendererach]]ach (np. [[Renderman]]), gdzie grafika nie jest generowana w czasie rzeczywistym.
 
W stosunku do standardowych modeli oświetlenia, stosowanych do generowania grafiki w czasie rzeczywistym, cieniowanie umożliwia uwzględnienie między innymi:
* odbić [[lustro|lustrzanych]],
* oświetlenia [[High dynamic range rendering|HDR]],
* mapy przemieszczeń ([[displacement map|displacement maps]]s),
* 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 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 Technologies|ATI]] ''Stream Processors'' a przez [[NVIDIA Corporation|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 wirtualnej przestrzeni 3D na współrzędne 2D na 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|rasteryzator]].
 
=== 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 CPU. Direct3D 10 ma już zawarte wsparcie dla tego typu cieniowania. 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 cieniowanie geometryczne jest używane, to wtedy wyjście z niego jest przekazywane do rasteryzatora.
 
=== Pixel Shader lub Fragment Shader ===
'''Cieniowanie pikseli''' - jest programowalną jednostką odpowiadającą za wyliczanie koloru [[piksel]]i. Direct3D używa terminu "pixel shader", a OpenGL - "fragment shader". Piksele na wejście ich 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. bump-mappingu lub kolorowania.
 
Poniższa tabela pokazuje, jak wersje jednostek cieniowania odpowiadają poszczególnym wersjom DirectX.
|}
 
== Przetwarzanie równoległe ==
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. Oznacza to [[Przetwarzanie równoległe|przetwarzanie równoległe]]. Najnowsze GPU mają [[Architektura wielordzeniowa|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ą: [[CUDA]], [[BrookGPU]] i [[OpenCL]].
 
== Języki cieniowania ==
Współczesne języki cieniowania:
* [[OpenGL_Shading_LanguageOpenGL Shading Language|GLSL]] - OpenGL Shading Language (fragment standardu OpenGL)
* HLSL - High Level Shading Language (język cieniowania biblioteki DirectX)
* [[Cg (język programowania)|Cg]] - C for graphics (opracowany przez firmę nVidia)
W rzeczywistości HLSL oraz Cg to jeden i ten sam język <ref>{{Faktcytuj stronę|url=http://www.fusionindustries.com/default.asp?page=cg-hlsl-faq|tytuł=A Cg & HLSL Shading Language FAQ|data=2003-06-06|język=en|data dostępu=2009-09-22}}</ref>. Dualizm nazwy wynika prawdopodobnie z faktu, iż język ten został opracowany we współpracy firm Microsoft i nVidia.
 
{{Przypisy}}
==Linki zewnętrzne==
 
== Linki zewnętrzne ==
* {{lang|en}} [http://appsrv.cse.cuhk.edu.hk/~ymxie/Geometry_Shader Samouczek o cieniowaniu geometrycznym]
* {{lang|en}} Publikacja nVidii o CUDA, [http://www.nvidia.com/object/IO_37226.html nowym środowisku programistycznym] i kompilatorze do języka programowania do pisania aplikacji naukowych, które są uruchamiane na jednostkach szaderowych na kartach graficznych. Zobacz także [http://developer.nvidia.com/object/cuda.html developer's home page].
* {{lang|en}} [http://www.msi.unilim.fr/~porquet/glexts/GL_EXT_geometry_shader4.txt.html Rozszerzenie OpenGL o możliwość pisania na szadery geometryczne.]
 
[[Kategoria:grafikaGrafika komputerowa]]
 
[[ar:مظلل]]
2020

edycji