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.

Jedním možným řešením nedostatečného výk<strong>on</strong>u je vygenerování dočasné normálové mapy při<br />

načítání dat. Otázkou je, k čemu by takové chování bylo. Ušetřili bychom sice nějaké místo na<br />

disku, ale to nás dnes zpravidla tíží nejméně. My jsme se rozhodli proto vygenerovat normálovou<br />

mapu ve fázi předzpracování současně s mapou reziduí. Vzhledem k tomu, že na tento proces<br />

máme téměř neomezené množství času, zvolili jsme výk<strong>on</strong>ově poměrně náročný postup, který<br />

pro velké terény může trvat i několik hodin. Vychází ze stejného základu jako postup předchozí,<br />

ale namísto aritmetického průměru normál okolních trojúhelníků se berou v úvahu jejich<br />

prostorové úhly, které jsou použity jako váhy pro jednotlivé normály. Postup je navíc pro každý<br />

vzorek několikrát opakován, přičemž při každé iteraci je zohledněno jinak velké okolí (použit<br />

jiný parametr a jsou použity jiné vrcholy). Z takovýchto dílčích normál je opět spočítán vážený<br />

průměr, pro který byly váhy hledány experimentálně, aby bylo dosaženo vizuálně dobrých<br />

výsledků. Tímto postupem zohlední normála širší charakter terénu a ne pouze lokální chování,<br />

zároveň dojde k jistému vyhlazení. Výsledek generování normál ukazuje Obrázek 4.12.<br />

Výsledná normála je vždy vektor v trojrozměrném prostoru. Uchovávat všechny tři jeho<br />

komp<strong>on</strong>enty je však zbytečné. Když totiž vektor normalizujeme, můžeme původní normálu<br />

rek<strong>on</strong>struovat na základě pouze dvou složek a a vztahu<br />

1.<br />

Rovnice má sice dva kořeny, ale my víme, že je vždy kladné (to plyne z orientace terénu). Díky<br />

tomu nám stačí uchovávat dvě komp<strong>on</strong>enty. Na ty používáme stejnou blokovou kompresi jako na<br />

mapu reziduí, pouze na každou složku zvlášť. Jedna normála je tak definována pomocí 8 bitů<br />

(oproti původním 96). Ztrátovost komprese nás v případě normál většinou nezajímá. Ani prvotní<br />

redukce 32bitové reprezentace komp<strong>on</strong>enty do 8bitové není okem rozeznatelná.<br />

4.5 Zpracování neomezeného terénu<br />

Jedním z hlavních cílů, které jsme si v úvodu položili, bylo zobrazování potenciálně nek<strong>on</strong>ečného<br />

terénu, tedy takového, který nemůžeme celý najednou uložit do operační paměti. U některých<br />

implementací dříve zmíněných algoritmů najdeme různá řešení. V (100) najdeme řešení pro LOD<br />

nad obecnými daty, tedy nejen pro terén. Hoppe (18) rozděluje terén na čtvercové bloky a<br />

vytváří progressive mesh nad každým blokem zvlášť. Původní implementace clipmap na texturu<br />

terénu (51) využívala rozdělení na malé čtvercové bloky, které byly stránkovány do paměti celé<br />

najednou, jakmile byla data vyžadována pro zobrazování. Díky progresivnímu načítání od nižších<br />

úrovní detailu bylo vždy zajištěno, že jsou vždy k dispozici alespoň nějaká data pro zobrazování.<br />

Rozdělení na čtverce využil i Pajarola (23) při výstavbě databáze složené z částí terénu, která<br />

byla optimalizována pro rychlé zpracování požadavků na dvourozměrné souvislé úseky.<br />

Lindstrom a Pascucci (37) navrhli řešení více zohledňující koherenci při čtení dat z disku i<br />

z paměti, ve kterém využívají charakteru stromové struktury, která je procházena odshora. V<br />

(101) najdeme jednoduché paralelizované řešení se zdrojovým kódem, které však nezajišťuje<br />

včasnou dostupnost dat.<br />

Protože od počátku uvažujeme kroky takové, aby bylo možné použít algoritmus do počítačové<br />

hry, chtěli jsme se v našem řešení oprostit o těsnou vázanost na terén. Pokud má být takový<br />

80

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

Saved successfully!

Ooh no, something went wrong!