10.08.2013 Views

Terrain Processing on Modern GPU - Computer Graphics Group ...

Terrain Processing on Modern GPU - Computer Graphics Group ...

Terrain Processing on Modern GPU - Computer Graphics Group ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

implicitní proměnné pro zpracovávaná primitiva. Pro vrchol je to například pořadí tohoto<br />

vrcholu. Když známe velikost zobrazované mřížky, můžeme z pořadí vrcholu přesně určit, o jaký<br />

vrchol se jedná, a nepotřebujeme tak jeho souřadnice. Zmíněnou proměnnou (VertexID) jsme<br />

nazvali implicitní, protože není potřeba explicitně ji definovat – obdržíme ji v shaderu<br />

automaticky. Takto nemusíme dodávat vůbec žádná data – stačí specifikovat, kolik vrcholů<br />

chceme zpracovat, a ve vertex shaderu se nám uklizuje pro každý vrchol s jediným vstupem, a<br />

tím bude jeho ID.<br />

4.2.3.2 Využití geometry shaderu<br />

Geometry shader, který jsme napsali pro implementaci subdivisi<strong>on</strong> surfaces, je trochu neobvyklý<br />

svou komplexitou. Jeho úloha spočívá v určení, do jaké míry má být vstupní blok rozdělen,<br />

vyzvednutí dat potřebných k takovému dělení a k<strong>on</strong>ečně provedení dělení samotného, tzn.<br />

vygenerování velkého množství vrcholů, které budou každý jeden transformovány jako by byly,<br />

kdyby prošly vertex shaderem. Toto obnáší o několik řádů více instrukcí než „běžný“ vertex<br />

shader (to vychází už z toho, že transformace vrcholu tu může být provedena i tisíckrát). Zdálo se<br />

nám tedy velmi důležité optimalizovat jej tak, aby sám nespotřeboval celou vyrovnávací paměť<br />

instrukcí a aby prováděl opakované výpočty co nejméně krát – to je poměrně složitý úkol, neboť<br />

na jeho druhé straně stojí omezené množství registrů a omezená možnost uchovat všechna<br />

spočítaná data. O to více nás však překvapilo, že i přes toto velké množství aritmetických operací<br />

byl výk<strong>on</strong> geometry shaderu přímo úměrný počtu vygenerovaných vrcholů – ne počtu<br />

vypočítaných vrcholů!<br />

Pokusili jsme se tedy provést více experimentů a nalézt zdroj problému. Ukázalo se, že<br />

problémem je způsob, jakým je výstup z geometry shaderu hardwarově implementovaný. První<br />

experiment byl založený na nahrazení vertex shaderu geometry shaderem. Přesněji řečeno, ve<br />

vertex shaderu jsme pouze předali data dál pro zpracování geometry shaderem, a ten<br />

transformoval všechny vrcholy stejným způsobem, jakým by to udělal vertex shader.<br />

Samozřejmě každý vrchol byl použit pouze v jednom trojúhelníku, takže bylo znemožněno<br />

využití vyrovnávací paměti a znehodnocení výsledků. Výsledky ukázaly, že zpracování vrcholů<br />

geometry shaderem bylo přibližně dvakrát pomalejší pro zvolený kód.<br />

Následoval další experiment, ve kterém jsme měnili velikost výstupu geometry shaderu a<br />

komplexitu prováděného kódu. Zde se ukázalo, že dvakrát větší objem dat generovaných<br />

shaderem znamená téměř dvojnásobné snížení rychlosti. Dodejme, že to není samozřejmé<br />

chování – shader prováděl netriviální výpočty a rozšíření velikosti dat bylo spojeno pouze<br />

s kopírováním již jednou spočítaných dat. Vedle toho jsme se snažili zajistit, aby ani exekuce pixel<br />

shaderu nemohl zásadně ovlivnit výsledky – pixel shader byl triviální a data jsme generovali tak,<br />

aby nebyla vidět, nebo aby se hojně využilo „Early Z“ vyloučení 19. Naopak změny ve složitosti<br />

prováděného kódu se neprojevily k<strong>on</strong>zistentním poklesem výk<strong>on</strong>u.<br />

K<strong>on</strong>ečně poslední experiment byl odvozen z výsledků předchozích. Transformace vrcholů jsme<br />

prováděli pomocí vertex shaderu, ale tentokrát jsme zapojili i geometry shader, který však pouze<br />

19 Early Z se označuje technika vyloučení pixelu ze zpracování na základě jeho negativního z-testu ještě<br />

před tím, než se spustí kód pixel shaderu. Podrobněji je technika popsána například v (103).<br />

65

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!