DirectX 11 - seznámení s budoucností
16.2.2009, Petr Štefek, recenze
V dnešním článku nahlédneme pod pokličku budoucího rozhraní DirectX 11, které je do značné míry vskutku revolučním API, jež bude zajímavé jak pro vývojáře, tak pro nás uživatele. Blýská se nám tedy na lepší časy?
Kapitoly článku:
- DirectX 11 - seznámení s budoucností
- DirectX 11 - co nás čeká za novinky?
- DirectX 11 - zázrak jménem Compute Shader (CS)
- Tesselace – staronová technika v akci
- Tesselator - krok zpět nebo logické vyústění?
- Závěr - blýská se na lepší časy?
Microsoft a AMD (ATI) považují tesselaci za klíčovou vlastnost DirectX 11. Společnost ATI se v minulosti nijak netajila tím, že v této funkci vidí budoucnost. Je ovšem tesselátor opravdu takovým pokrokem a progresivní novinkou? Musíme si uvědomit, že Tesselator jako takový má pevnou funkci (stejně jako měly v minulosti VS/PS) a není plně programovatelný, což je v dnešní 3D grafice trendem. Samozřejmě, vstup a výstup TS může být modifikován skrz Hull Shader a Domain Shader, ale hlavní součást této úrovně pipeline není tak flexibilní. Geometry Shader je naproti tomu jednotkou plně programovatelnou a rovněž schopnou tesselace. Problém ovšem je, že nemá dostatek výkonu k provádění tesselace v měřítku jaké dnešní hry potřebují, a tak bylo sáhnuto k jistému kroku zpět.
Rozdíly mezi plně programovatelnou a fixní funkcí hardware se udávají bojem mezí výkonem, který požadujeme pro tyto účely a flexibilitou/použitelností. Na začátku grafických akcelerátorů byly jednotky s pevně danými úkoly samozřejmostí, ale jak šel čas, přestalo být efektivní přidávat do grafického čipu další jednotky s fixní (tím pádem omezenou) funkcí. Jinak řečeno, tranzistory vyhrazené pro specializované jednotky jsou efektivní pouze pokud jich vývojáři naplno využijí. Pokud se tak nestane, tak jsou s trochou nadsázky mrtvými částmi čipu, jejichž výkon by mohl být využit jinde. Z tohoto důvodu vznikla unifikovaná architektura čipů, kde jsou výpočetní jednotky přidělovány dle potřeby a nezůstávají nevyužity ladem. To ovšem neznamená, že v době trendu plné programovatelnosti a maximální flexibility, nemají jednotky s fixní funkcí své místo.
Tesselátor jako takový je tedy stále postižen tím, že tranzistory, které „okupuje“, nejsou využitelné, dokud vývojáři nedokáží efektivně využít jeho možností. Tesselator je s trochou nadsázky „spící“ částí grafického čipu (DX11), tedy alespoň prozatím. Výkon je tím oč tu běží a TS s fixně danou funkcí a určitým počtem tranzistorů ho vývojářům nabídne. Neznamená to ovšem, že bychom se vraceli zpět do éry čipů s pevně danými jednotkami. V budoucnu se spíše dočkáme modifikací a plné programovatelnosti Tesselatoru.
V současné době na současném hardware musí grafici vytvořit několik různých verzí jediného objektu s různým LOD (Level of detail – česky řečeno s jinou úrovní detailů) v závislosti na vzdálenosti od pozorovatele (kamery), a to vyžaduje mnoho práce navíc. Navíc je zde simulace plastičnosti skrze normálové mapy na každý takovýto model a problém je na světě. Navíc jsou zde omezení pokud se týká speciálních efektů, které jsou uskutečnitelné pouze s objekty s reálně komplexnější geometrií a ne jen její simulací.
Tesselace je prozatím nejlepší cestou jak získat pro objekty ve hře komplexní geometrii bez težkého dopadu na výkon. V současné době simulujeme komplexnější geometrii skrz textury a techniky jako bump mapping nebo paralax mapping (existují samozřejmě i jiné techniky). Na objektech s komplexnější geometrií budou normálové mapy k užitku samozřejmě také, ale již nebude tolik práce s geometrickými detaily. Další devizou této skutečnosti je, že skrz jediný průchod pipeline stihnete samotnout tesselaci i aplikovat displacement mapping. Odpadne také spousta práce s modely s různým LOD, neboť tuto nutnost odstraní funkce Hull Shaderu a Domain Shaderu.
Pokud tesselace přejde rychle do praxe, tak to bude mít jednoznačně pozitivní vliv na vizuální kvalitu her, které se budou čím dál tím více podobat CG filmům, jako je například Final Fantasy. Teoreticky je možné, že díky velkému kvantu DirectX 10 hardware schopnému fungovat pod DirectX 11 nebudou zprvu využívat možnosti tohoto API naplno (CS a TS) a plné rozvinutí může příjít až za pár let, kdy bude na trhu dostatečné množství DirectX 11 hardware. Vývojáři se v současné době ještě ani nedostali zdaleka na limity DirectX 10 hardware, který se pomalu stává standardem. Bohužel uživatelé stále setrvávájí u DirectX 9 kvůli oblibě dnes již letitého operačního systému Windows XP, který je v této oblasti limitován.
Rozdíly mezi plně programovatelnou a fixní funkcí hardware se udávají bojem mezí výkonem, který požadujeme pro tyto účely a flexibilitou/použitelností. Na začátku grafických akcelerátorů byly jednotky s pevně danými úkoly samozřejmostí, ale jak šel čas, přestalo být efektivní přidávat do grafického čipu další jednotky s fixní (tím pádem omezenou) funkcí. Jinak řečeno, tranzistory vyhrazené pro specializované jednotky jsou efektivní pouze pokud jich vývojáři naplno využijí. Pokud se tak nestane, tak jsou s trochou nadsázky mrtvými částmi čipu, jejichž výkon by mohl být využit jinde. Z tohoto důvodu vznikla unifikovaná architektura čipů, kde jsou výpočetní jednotky přidělovány dle potřeby a nezůstávají nevyužity ladem. To ovšem neznamená, že v době trendu plné programovatelnosti a maximální flexibility, nemají jednotky s fixní funkcí své místo.
Tesselátor jako takový je tedy stále postižen tím, že tranzistory, které „okupuje“, nejsou využitelné, dokud vývojáři nedokáží efektivně využít jeho možností. Tesselator je s trochou nadsázky „spící“ částí grafického čipu (DX11), tedy alespoň prozatím. Výkon je tím oč tu běží a TS s fixně danou funkcí a určitým počtem tranzistorů ho vývojářům nabídne. Neznamená to ovšem, že bychom se vraceli zpět do éry čipů s pevně danými jednotkami. V budoucnu se spíše dočkáme modifikací a plné programovatelnosti Tesselatoru.
V současné době na současném hardware musí grafici vytvořit několik různých verzí jediného objektu s různým LOD (Level of detail – česky řečeno s jinou úrovní detailů) v závislosti na vzdálenosti od pozorovatele (kamery), a to vyžaduje mnoho práce navíc. Navíc je zde simulace plastičnosti skrze normálové mapy na každý takovýto model a problém je na světě. Navíc jsou zde omezení pokud se týká speciálních efektů, které jsou uskutečnitelné pouze s objekty s reálně komplexnější geometrií a ne jen její simulací.
Tesselace je prozatím nejlepší cestou jak získat pro objekty ve hře komplexní geometrii bez težkého dopadu na výkon. V současné době simulujeme komplexnější geometrii skrz textury a techniky jako bump mapping nebo paralax mapping (existují samozřejmě i jiné techniky). Na objektech s komplexnější geometrií budou normálové mapy k užitku samozřejmě také, ale již nebude tolik práce s geometrickými detaily. Další devizou této skutečnosti je, že skrz jediný průchod pipeline stihnete samotnout tesselaci i aplikovat displacement mapping. Odpadne také spousta práce s modely s různým LOD, neboť tuto nutnost odstraní funkce Hull Shaderu a Domain Shaderu.