reklama
Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

3D technologie: Displacement Mapping

29.7.2004, Zdeněk Kabát, článek
3D technologie: Displacement Mapping
Minulý týden jsme Vám přinesli popis 3D techniky Bump Mapping, která se používá v grafických čipech již hezkou řádku let. Dnes přichází řada na úplnou novinku v online renderingu, a tou je Displacement Mapping. Tato metoda je hardwarově podporována od Shader Modelu 3.0 a pomocí 2D textury fyzicky upravuje geometrický detail objektu.
Kapitoly článku:
Implementace Displacement Mappingu

Pokud jste četli minulý článek o Bump Mappingu, konkrétně kapitolu o normálovém mapování, musíte mít již představu o tom, jak pracuje Displacement Mapping. Stejně jako u normálového mapování zde máme 2D texturu, tentokrát displacement mapu (8- nebo 16-bitová). Ta obsahuje, podle úrovně detailů, informace o posunech každého vrcholu podél určitého vektoru, čili normály. Jedná se tedy o per-vertex metodu (nikoliv per-pixel jako u normálového mapování).


Obr. 4 - Aplikace displacement mapy na plochu
Klikněte pro zvětšení

V případě, že by displacement mapa přesně odpovídala danému modelu, nedošlo by k žádnému zvýšení geometrického detailu. Proto musí být každý polygon rozčleněn na menší trojúhelníky, jejichž vrcholy jsou tedy i novými vrcholy daného objektu. Každý tento vrchol na objektu, jak původní, tak i nově vzniklý, se poté přemístí podle hodnoty uložené v displacement mapě.

Takto vysvětleno by se zdál DM jako triviální záležitost. Problém, resp. největší množství práce tkví v tom, že jednotlivé trojúhelníky je třeba rozdělit na menší, aby bylo možné Displacement Mapping aplikovat. K tomu se používají různé algoritmy, kterých je hned několik. Podívejme se na to ten nejdůležitější.

Adaptive tessellation

Jeden způsob rozdělení scény je adaptivní mozaikování (adaptive tessellation). Zatímco fixed tessellation rozdělí všechny trojúhelníky na dané scéně rovnoměrně, adaptivní metoda šetří mnohem více grafické jádro. Díky této technice, která je opět součástí specifikace DirectX 9.0, jsou polygony v blízkosti pozorovatele rozděleny nejvíce, zatímco vzdálené trojúhelníky naopak své detaily sníží (tzv. depth-adaptive tessellation).


Obr. 5 - Depth-adaptive tessellation
Klikněte pro zvětšení

Aplikace Displacement Mappingu

Abychom mohli techniku Displacement Mappingu použít, potřebujeme tato zdrojová data:
  • Displacement mapa (pro posun vrcholů)
  • Normálová mapa (pro výpočet osvětlení)
  • Model s nízkými detaily
  • Texturové mapování pro aplikaci map

Model s nízkými detaily musí být vytvořen tak, aby byla následná aplikace displacement mappingu co nejjednodušší. Lidská postava může takto obsahovat kolem 100 polygonů, což samozřejmě závisí na tom, jak detailní chceme výsledný model. Tento nízko-polygonový model bývá odvozen od vysoko-polygonového a to automaticky či poloautomaticky.

Vytvoření displacement mapy a normálové mapy

Kromě displacement mapy se zároveň vytváří i normálová mapa, která ještě dokáže zvýšit detaily osvětlení. Normálová mapa je obvykle podrobnější, protože obsahuje data pro každý pixel, zatímco displacement mapa pro každý vrchol (samozřejmě i pro nově vytvořené). Navíc je normálová mapa 24-bitová (8 bitů pro každou souřadnici XYZ), ale displacement mapa jen 8- nebo 16-bitová. Je to způsobeno tím, že neobsahuje vektorová, ale skalární data.


Obr. 6 - Normálová mapa, displacement mapa a textura aplikované na nízko-polygonový model
Klikněte pro zvětšení

Obě tyto mapy lze vytvořit ručně v nějakém profesionálním softwaru. Častější ovšem bývá jejich odvození od vysoko-polygonového modelu. Díky unikátnímu mapování odpovídá každý texel detailního modelu právě jednomu texelu na nízko-polygonovém modelu. Z nízkodetailního modelu je vyslán paprsek, který se v určitém bodě protne s detailním modelem. Vektor tohoto paprsku je poté zapsán do normálové mapy, zatímco jeho délka do displacement mapy.

I zde jsou ale jistá omezení. Protože se jedná o výškovou mapu, nemohou se do displacement mapy kódovat různé záhyby apod., kde by jednomu bodu na mapě de facto odpovídaly dva texely původního modelu. Proto musí nakonec model projít několika "lidskými" úpravami, kde programátoři pozmění data v mapách.
reklama