Technologie: Unifikované shadery - co to vlastně je

4. 8. 2008

Sdílet

Unifikované Shadery - toto slovní spojení používáme v téměř každé novince o grafických kartách. Všechny dnes vyráběné a prodáváné karty NVIDIA GeForce i ATI Radeon je používají. Ale co to vlastně je?

bitcoin_skoleni

Pixel, Vertex a Geometry Shader


Než se pustíme do samotného vysvětlovaní unifikovaných shaderů, popišme si, co to vlastně shadery jsou. Shadery jsou plně programovatelné součásti grafického čipu (přesněji každé pipeline), které se společně s několika dalšími jednotkami (například ROP) starají o zpracování obrazu, který poté jako hotový posílají do grafické paměti a vidíme jej na monitoru. Jedná se o záležitost podledních několika let, která se v grafických kartách objevuje od startu rozhraní DirectX 8. Shadery dělíme na tři různé skupiny.



První ke slovu při zpracování obrazu se dostávají vertex shadery. Tyto shadery se používají na samotnou kostru obrazu tvořenou z polygonů (trojúhelníků). Při použití vertex shaderu se vezmou jednotlivé polygony (vrcholy trojúhelníků) a provedou se na nich dané efekty. Pomocí vertex shaderů lze například naprogramovat, jak budou různé prohlubně v objektu osvětlené, jak se v nich budou měnit barvy a podobně. Nelze však polygony přidávat či ubírat, kostra objektu je stále stejná. Tento shader je součástí grafických karet od DirectX 8.

Druhou částí jsou pixel shadery. Ty se provádějí během texturování, tedy potahování objektů texturou, kdy kostra získá téměř svoji finální podobu. Pixel shader se pak provede po jednotlivých pixelech na celé textuře (odsud název pixel shader) a provedou se požadované úpravy. Například různé odrazy světla v zrcadle. Protože se efekt provádí na jednotlivých pixelech, je velmi náročný na výkon a obvykle je ze všech tří typů nejvytíženější. Taktéž i on je součástí specifikací od DirectX 8.

Jako poslední přichází geometry shadery, které se zatím moc nevyužívají. To jsou velice specifické shadery, které přišly až s DirectX 10 a používají se hned po vytvoření kostry objektu z polygonů ještě před vertex shadery. Geometry shadery totiž pracují s celou kostrou objektu a jako jediné umí měnit počet polygonů a tvarovat objekt. Můžete tedy v reálném čase pozorovat růst stromů a další činnosti. Toto se dosud muselo řešit několika různými objekty, které se postupně objevovaly a mizely, což bylo značně náročné na výkon.

(Ne)unifikované shadery


Dokud nebyly shadery unifikované, musela být každá část čipu vyhrazena pro daný shader. Typicky to vypadalo tak, že část čipu byla vyhrazena pro pixel a část pro vertex shader (geometry shader v té době nebyl). Pokud bylo zapotřebí vertex shaderu, aktivovala se jen daná část čipu a zbytek nic nedělal. Stejně tak pokud bylo zapotřebí pixel shaderu. Tyto případy však nastávají výjimečně, většinou je zapotřebí část pixel, část vertex a nově část geometry. A přesně to mění unifikované shadery.



Jedná se upravenou část čipu vyhrazenou pro práci shaderů. Tato oblast umí zpracovávat pixel, vertex i geometry shader úlohy, což je obrovská výhoda, protože daná úloha je tak zpracovaná podstatně rychleji, protože dochází k optimálnímu využití shaderů. Jedinou nevýhodou je, že při práci s pixel shader úlohami nejsou unifikované shadery tak efektivní jako primárně určené pixel shadery, ale to více než nahradí možnost dynamicky měnit využití.

- - Tomáš Šulc