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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Udělali jsme proto ještě krátké testy na jiných dělících schématech a s podobně neuspokojivými<br />

výsledky jsme se jali hledat nové schéma, které by nám vyhovovalo. Předně jsme chtěli udržet<br />

velikost nosiče takovou, aby se řídící vrcholy vešly do mřížky 4×4, jakou používá Loopovo<br />

schéma. Od něj jsme tedy vyšli s definicí jediného pravidla pro hranový vrchol a pokoušeli se<br />

pravidlo pozměnit tak, aby se terén méně smršťoval. Připomeňme, že pravidlo přiřazuje<br />

hranovému vrcholu hodnotu<br />

3<br />

8 1<br />

8 ,<br />

kde reprezentuje k<strong>on</strong>cový vrchol dané hrany a je protilehlý vrchol v trojúhelníku<br />

obsahujícím danou hranu (viz Obrázek 3.3). Je snadné nahlédnout, že problém je ukryt ve třech<br />

osminách z obou k<strong>on</strong>cových vrcholů, které dohromady představují hodnotu nižší, než jakou<br />

získáme běžnou lineární interpolací. Jedna osmina protilehlých vrcholů pak vrchol zpravidla<br />

ještě více „stáhne“. První logická změna tedy byla použít pět osmin pro k<strong>on</strong>ce hran a odečíst<br />

jednu osminu protilehlých vrcholů. Výsledek byl lepší, ale stále velmi neuspokojivý. Ani větším<br />

experimentováním se nám nepodařilo nalézt na základě takto jednoduchého schématu žádnou<br />

výrazně lepší funkci.<br />

Další postup byl založen na triangulaci mřížky, se kterou pracujeme. Snažili jsme se totiž vesměs<br />

aplikovat trojúhelníkové schéma na mřížku, která je od základu pravoúhlá (rodělená po<br />

diag<strong>on</strong>álách). To nás přivedlo k definování schématu, které by více respektovalo naše pravidelné<br />

dělení plochy a bylo citelnější k rozdílným úhlům trojúhelníku. Na základě pokusů se nám<br />

podařilo nalézt schéma, které pro nižší úrovně dělení dávalo poměrně pěkné výsledky blízké<br />

těm, které jsme získali užitím butterfly schématu. Dvě pravidla tohoto schémata znázorňuje<br />

Obrázek 4.5. Pravidlo pro horiz<strong>on</strong>tální hrany používá stejné koeficienty jako pravidlo pro<br />

vertikální.<br />

3<br />

8<br />

1<br />

8<br />

3<br />

8<br />

1<br />

<br />

16<br />

Obrázek 4.5: Masky námi zvoleného dělícího schématu. Vlevo maska pro diag<strong>on</strong>álu, vpravo maska<br />

pro horiz<strong>on</strong>tální a vertikální hranu.<br />

Když naše pravidlo pozvolna k<strong>on</strong>vergovalo k vizuálně zajímavým výsledkům, rozhodli jsme se<br />

rozšířit geometry shader, ve kterém jsme dělící schéma implementovali, tak, aby prováděl<br />

adaptivní dělení na základě metriky chyby definované pohledem pozorovatele. Zde jsme narazili<br />

na jedno velmi zásadní omezení současného návrhu geometry shaderů, které se nám ani<br />

následně s jeho znalostí nepodařilo najít v žádné dokumentaci (nicméně nám bylo potvrzeno<br />

zástupci firem Microsoft a AMD). Toto omezení definuje limit pro objem dat, která je možno<br />

9<br />

16<br />

9<br />

16<br />

1<br />

16<br />

62

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

Saved successfully!

Ooh no, something went wrong!