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.

využít ít koherence mezi sousedními hodnotami. Na snížení paměťových nároků by bylo možné<br />

využít různé známé komprimační algoritmy používané na kompresi obrazových dat. Pro nás by<br />

to však znamenalo nutnou dekompresi při rek<strong>on</strong>strukci hodnot, což by výrazně snižovalo snižova<br />

efektivitu navrženého algoritmu. Rozhodli jsme se proto využít blokovou kompresi, kompresi, která která je dnes<br />

implementovaná hardwarově na každém <strong>GPU</strong> a a pro pro shader využívající využívající komprimovanou<br />

komprimovanou<br />

strukturu se dekomprese provádí zcela transparentně bez výk<strong>on</strong>nostních ztrát.<br />

Bloková loková komprese je založena na koherenci hodnot sousedních vzorků. Čtvercový blok 16<br />

vzorků je vždy zpracováván najednou a je z něj vytvořeno bitové pole reprezentující hodnoty<br />

všech vzorků v bloku. Při kompresi se v bloku najdou mezní hodnoty (minimum a maximum) m a<br />

mezi těmito mezemi je lineární interpolací nalezeno několik dalších dalších mezihodnot. mezihodnot. Každému z 16<br />

vzorků bloku je pak přiřazen index jedné z hodnot, které je nejblíže. . Blok je následně uložen jako<br />

bitové pole, do kterého se uvedou hodnoty maxima a min minima ima a indexy všech 16 vzorků. V praxi<br />

se používá 8 hodnot pro jeden blok, které je možné indexovat pomocí 3 bitů. bitů. Meze jsou jsou vyjádřeny<br />

osmibitovým číslem, takže dohromady zabere jeden blok 8 bytů ( (16·3 3 + 2·8 2 bitů), což jsou<br />

průměrně 4 bity na vzorek vzorek. Hodnoty ve vstupní výškové mapě jsou vyjádřeny pomocí 32 bitů,<br />

takže jsme dosáhli kompresního poměru téměř téměř 8:1. Samozřejmě jde jde o ztrátovou kompresi, proto<br />

nemůžeme stejně radikální postup postup použít použít vždy, resp. ne vždy bude takto zvolený postup postup podávat<br />

podávat<br />

uspokojivé ivé výsledky. Ztrátovost blokové komprese na na osmibitové výškové mapě ukazuje<br />

Obrázek 4.11. Další výsledky s kompresí jsou shrnuty v odstavci 4.6.1.<br />

Obrázek 4.11: : Bloková komprese použitá na osmibitovou výškovou mapu mapu (vlevo) (vlevo) zanesla zanesla do<br />

do<br />

obrázku chyby, které jsou znázorněny jasem ppo<br />

o 64násobném přesvětlení (vpravo). Velikost<br />

maximální odchylky činí 0.8%.<br />

4.4.2 Generování normálové mapy<br />

Aby bylo možné terén korektně vystínovat, je je třeba třeba definovat normálové vektory v v místech, kde<br />

je počítán lokální světelný model. Protože původním vstupem našeho šeho programu (před fází<br />

předzpracování) je výšková mapa, nejsou informace o normálách povrchu zpravidla zpravidla k dispozici.<br />

Z uniformně vzorkovaného terénu je možné rek<strong>on</strong>struovat rek<strong>on</strong>struovat přibližnou přibližnou hodnotu normálového<br />

vektoru na základě diferencí sousedních hodnot. To je možné provádět během zobrazování, nebo<br />

77

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

Saved successfully!

Ooh no, something went wrong!