Shader

Z Wikipedie, otevřené encyklopedie

Skočit na: Navigace, Hledání

Shader je počítačový program určený pro zpracování přímo na grafické kartě. Takový program se píše nejčastěji v jazycích CG (nVidia, univerzální), HLSL (Microsoft, pro DirectX), GLSL (pro OpenGL) a později je překladačem přeložen do assembleru přímo pro danou grafickou kartu. Tyto jazyky jsou si navzájem dosti podobné a podobají se jazyku C. V současné době jsou tři typy shaderů: vertex, pixel a geometry.

Obsah

[editovat] Vertex shader

Program, který se provede na každém vrcholu (vertexu) vstupní geometrie. Nejčastěji provádí transformaci (násobí vrchol World, View a Projection maticemi) a výsledkem je pozice na obrazovce (screen space) - tedy převádí 3D model do 2D plochy. S vrcholy může ale také provádět různé pohyby, např. pro hladinu vody. Vždy ale do programu vstoupí jeden vrchol, je upraven a zase vystoupí, nelze tedy vrcholy přidávat či odebírat.

[editovat] Pixel shader

Jakmile jsou vrcholy transformovány, získáme pixely na obrazovce, na které je nutno nanést texturu, případně s nimi jinak manipulovat. K tomu slouží pixel shader, který se provede na každém pixelu na obrazovce. Protože jsou tyto operace náročné na hardware, bývají pixel shadery často jednodušší a maximálně optimalizované.

[editovat] Geometry shader

Umožňuje přidávat a odebírat vrcholy a tím upravovat geometrii. Využití např. pro vytvoření ostnů na modelu dinosaura nebo zarůstání plotu trávou v reálném čase. Pro výpočty se používají univerzální (unifikované) jednotky, díky čemuž dochází teoreticky stále ke 100% vytížení jádra. Tyto shadery zatím běží pouze na DirectX 10 a verzích na něm stavěných pod Windows Vista (stejně tak pod Windows 7) v REF. V současnosti podporují DirectX 10 grafické karty NVidia GeForce řady 8 a vyšší, ATI Radeon HD2000 řada a vyšší a v poslední době také grafické karty jiných výrobců (Intel, S3 atd.). DirectX 10.1 podporuje řada Radeon HD3000 a S3 Chrome 400 a vyšší.

[editovat] Historie shaderů v DirectX

Verze DirectX Pixel shader Vertex shader
8.0 1.0 / 1.1 1.0
8.1 1.2 / 1.3 / 1.4 1.0
9.0 2.0 2.0
9.0a 2_A 2.x
9.0b 2_B 2.x
9.0c 3.0 3.0
10.0 4.0 4.0
10.1 4.1 4.1