Terrain Processing on Modern GPU - Computer Graphics Group ...
Terrain Processing on Modern GPU - Computer Graphics Group ...
Terrain Processing on Modern GPU - Computer Graphics Group ...
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