3D technologie: Bump Mapping
20.7.2004, Zdeněk Kabát, článek
Po delší době se opět podíváme na 3D technologie používané v současných GPU. Pod drobnohled jsem si tentokrát vzal Bump Mapping, což je řada technik a algoritmů umožňujících pomocí 2D textur simulovat zakřivení povrchu apod. V článku poskytnu detailní popis Emboss, Environment a DOT3 Bump Mappingu (tzn. normálového mapování), okrajově se zmíním i o Displacement Mappingu.
Kapitoly článku:
- 3D technologie: Bump Mapping
- Emboss Bump Mapping
- Environment Bump Mapping
- Normal (DOT3) Bump Mapping
- Displacement Mapping a závěr
Environment Bump Mapping
Autorem Environment-mapped Bump Mappingu (EMBM) je společnost Bitboys a hardwarovou podporu přinesla jako první společnost Matrox, která ho uvedla ve své řadě Millennium G400. Jedná se o velice efektivní metodu, která je ovšem náročnější na systémové zdroje (samozřejmě mluvíme o grafické kartě). Pokusím se tuto techniku vysvětlit co nejjednodušeji.
Environment Bump Mapping potřebuje celkem tři textury - klasickou texturu, bump mapu a environment mapu ("mapu prostředí", ale raději zachovám původní název). Bump mapa je trochu odlišná od textur, které jsme si představovali výše. Odpovídá v podstatě nanášené textuře a každému jejímu texelu přiřazuje danou souřadnici z environment mapy. Po kombinaci bump mapy a environment mapy s původní texturou pak vznikne mapa osvětlení pro daný objekt nebo scénu.
Nejlépe bude ukázat si to na obrázku:
Obr. 6 - Environment-mapped Bump Mapping
Na levé straně obrázku vidíte, co udělá environment mapa s obyčejnou texturou. V podstatě simuluje osvětlení a stíny na textuře, ale tak, že zdrojem osvětlení je environment mapa sama, nikoliv vnější zdroj. Po aplikaci bump mapy se již dostáváme ke kýženému výsledku - bump mapa přiřadí každému texelu danou souřadnici (tedy i intenzitu osvětlení) z environment mapy a vzniká dojem prostoru.
Podívejme se podrobněji na vytváření samotné bump mapy. Bump mapa je dvousložková textura obsahující komponenty DU a DV, která popisují posuny v U a V souřadnici původní textury. Souřadnice každého texelu jsou nejdříve získány interpolací souřadnic vrcholů polygonu (U/V) a poté jsou upraveny od DU/DV hodnoty z bump mapy. Jde de facto o černobílou výškovou mapu, jejíž posuny získáme opět odvozením od sklonu potřebné simulované plochy. Je použita 8-bitová hloubka, která je poté transformována na rozsah [-1,1].
Obr. 7, 8 - Planeta Země s využitím EMBM
EMBM je realizován vždy ve dvou průchodech (při multipassingu). V prvním průchodu se zpracuje bump mapa a environment mapa a skombinují se do nové environment mapy, která již obsahuje model osvětlení pro danou texturu. Tento model se v druhém průchodu spojí s texturou a výsledný objekt je na světě.
Enviroment BM má dvě základní využití - kromě toho, že dokáže vytvářet iluzi členitého povrchu, umí i dynamicky zpracovávat pohybující se povrch jakým je např. vodní hladina. EMBM se také používá velmi často k vytváření reflexivních (odrazivých) ploch. V tom případě nenese environment mapa informace o osvětlení scény, ale texturu, která se bude na daném povrchu odrážet.
Výhody Environment-mapped Bump Mappingu jsou evidentní:
Obr. 9 - Odrazy ve vlnící se hladině
Ovšem musím taktéž zmínit jednu nevýhodu. Tou je, že ani EMBM stále nepracuje s normálovými vektory a je tedy vázáno na informace v environment mapě. Pokud se na scéně bude nacházet několik různě umístěných světelných zdrojů, může dojít k nežádoucím efektům v obraze, hlavně pokud jde o reflexivitu povrchu. Přesto ale mají díky jednoduché použitelnosti EMBM vývojáři rádi a většinou jsou výsledky velmi dobré.
Autorem Environment-mapped Bump Mappingu (EMBM) je společnost Bitboys a hardwarovou podporu přinesla jako první společnost Matrox, která ho uvedla ve své řadě Millennium G400. Jedná se o velice efektivní metodu, která je ovšem náročnější na systémové zdroje (samozřejmě mluvíme o grafické kartě). Pokusím se tuto techniku vysvětlit co nejjednodušeji.
Environment Bump Mapping potřebuje celkem tři textury - klasickou texturu, bump mapu a environment mapu ("mapu prostředí", ale raději zachovám původní název). Bump mapa je trochu odlišná od textur, které jsme si představovali výše. Odpovídá v podstatě nanášené textuře a každému jejímu texelu přiřazuje danou souřadnici z environment mapy. Po kombinaci bump mapy a environment mapy s původní texturou pak vznikne mapa osvětlení pro daný objekt nebo scénu.
Nejlépe bude ukázat si to na obrázku:
Obr. 6 - Environment-mapped Bump Mapping
Na levé straně obrázku vidíte, co udělá environment mapa s obyčejnou texturou. V podstatě simuluje osvětlení a stíny na textuře, ale tak, že zdrojem osvětlení je environment mapa sama, nikoliv vnější zdroj. Po aplikaci bump mapy se již dostáváme ke kýženému výsledku - bump mapa přiřadí každému texelu danou souřadnici (tedy i intenzitu osvětlení) z environment mapy a vzniká dojem prostoru.
Podívejme se podrobněji na vytváření samotné bump mapy. Bump mapa je dvousložková textura obsahující komponenty DU a DV, která popisují posuny v U a V souřadnici původní textury. Souřadnice každého texelu jsou nejdříve získány interpolací souřadnic vrcholů polygonu (U/V) a poté jsou upraveny od DU/DV hodnoty z bump mapy. Jde de facto o černobílou výškovou mapu, jejíž posuny získáme opět odvozením od sklonu potřebné simulované plochy. Je použita 8-bitová hloubka, která je poté transformována na rozsah [-1,1].
Obr. 7, 8 - Planeta Země s využitím EMBM
EMBM je realizován vždy ve dvou průchodech (při multipassingu). V prvním průchodu se zpracuje bump mapa a environment mapa a skombinují se do nové environment mapy, která již obsahuje model osvětlení pro danou texturu. Tento model se v druhém průchodu spojí s texturou a výsledný objekt je na světě.
Enviroment BM má dvě základní využití - kromě toho, že dokáže vytvářet iluzi členitého povrchu, umí i dynamicky zpracovávat pohybující se povrch jakým je např. vodní hladina. EMBM se také používá velmi často k vytváření reflexivních (odrazivých) ploch. V tom případě nenese environment mapa informace o osvětlení scény, ale texturu, která se bude na daném povrchu odrážet.
Výhody Environment-mapped Bump Mappingu jsou evidentní:
- Pomocí jediné bump mapy lze simulovat i náročnější model osvětlení, tedy včetně několika světelných zdrojů apod. Je to zaručeno tím, že všechny informace o osvětlení jsou uloženy v environment mapě a odkazuje se na ně v libovolně upravitelné bump mapě.
- Protože bump mapa odpovídá přesně původní textuře, u pohyblivých scén není třeba, aby se měnila v každém snímku. Jedná se totiž o per-pixel zpracování, kde se nám jak textura, tak bump mapa pohybují s objektem, zatímco environment mapa je zcela nezávislá. Na rozdíl od Emboss BM toto velmi šetří výkon GPU.
- Díky možnosti dynamické bump mapy lze simulovat vlnící se vodní hladinu, která se ovšem v GPU zpracovává jako rovná plocha. Aplikací bump mapy, která se cyklicky mění, se vytváří dojem pohyblivé plochy, a to včetně odrazů. Environment mapa v tomto případě obsahuje i texturu, která se od hladiny odráží, např. stromy, hory apod.
- EMBM může být závislý i nezávislý na úhlu pohledu a může na něj být použito globální i bodové osvětlení. To se dále zpracovává klasicky přes normálové vektory (Gouraudovo stínování).
Obr. 9 - Odrazy ve vlnící se hladině
Ovšem musím taktéž zmínit jednu nevýhodu. Tou je, že ani EMBM stále nepracuje s normálovými vektory a je tedy vázáno na informace v environment mapě. Pokud se na scéně bude nacházet několik různě umístěných světelných zdrojů, může dojít k nežádoucím efektům v obraze, hlavně pokud jde o reflexivitu povrchu. Přesto ale mají díky jednoduché použitelnosti EMBM vývojáři rádi a většinou jsou výsledky velmi dobré.