Shader
Z Wikipedie, otevřené encyklopedie
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 |

