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
Většina z Vás bude mít alespoň tušení, co to Bump Mapping je. Jedná se o renderovací techniku, používanou jak v offline, tak v realtime 3D aplikacích, která bez zvýšení počtu polygonů simuluje náročnější povrchy. Se stejným geometrickým detailem totiž pomocí různých technik, jako jsou černobílé nebo normálové textury, upravuje způsob osvětlení. Normála (čili směrnice povrchu) je pak lehce poupravena, což způsobí jinak vypočítané odrazy světla a tím navozuje dojem většího prostoru.
Bump Mapping je technika vhodná pro vytváření povrchů lehce nerovných těles, ideální případ je např. golfový míček, pomeranč, cihlová zeď apod. Pokud už se na povrchu nacházejí větší nerovnosti, lze použít náročnější techniky jako je Displacement Mapping. Ten je ovšem hardwarově podporován až od DirectX 9.0c, tedy Shader Modelu 3.0.
Největším přínosem Bump Mappingu je nižší náročnost na grafické jádro. Ať už se jedná o starší GPU, které jednoduše nemusely zpracovávat takové množství polygonů, nebo o nové GPU, kde navíc odpadá práce ve vertex shaderech. Známe mnoho různých implementací Bump Mappingu, např. Environment, Emboss, DOT3, Diffuse&Specular, Blend či Normal Bump Mapping, v článku se podíváme na ty nejdůležitější.
Pozn.: Následující technologický popis vznikl hlavně díky dvěma článkům na serverech Delphi3D a Tweak3D. Díky nim se mi doufám podařilo vytvořit přehled technik Bump Mappingu v češtině, který nyní přinášíme našim čtenářům.
Phongovo a Gouraudovo stínování
Aby bylo jasnější, jak Bump Mapping pracuje, vysvětlíme si velice stručně tzv. Phongovo a Gouraudovo stínování. Obojí jsou techniky používané pro výpočet osvětlení jednoho daného polygonu na prostorovém modelu. Na rozdíl od plochého stínování (flat shading), které vytváří podle úhlu dopadu světla uniformní barvu celého polygonu, Phongovo a Gouraudovo stínování tvoří hladké přechody, díky nimž nejsou hrany mezi polygony tak výrazné, případně nejsou vůbec znatelné.
Dnešní GPU používají v převážné většině Gouraudovo stínování, které je, jak jsem říkal, rychlejší. Phongovo stínování se používá hlavně v offline renderingu a různých CAM/CAD aplikacích. V následujícím textu se budu na Gouraudovo stínování odkazovat.
Původní Bump Mapping
Jako první přišel s nápadem Bump Mappingu Jim Blinn v roce 1978. Jako základ pro vytváření nerovností jen pomocí osvětlení použil černobílou výškovou mapu a pro výpočet konečné normály ji skombinoval s derivacemi souřadnic vrcholu (či jiných parametrů). Čím vyšší byla hodnota derivace, tím strmější byl simulovaný povrch. Nyní se ovšem používají složitější techniky, na které se podíváme dále.
Bump Mapping je technika vhodná pro vytváření povrchů lehce nerovných těles, ideální případ je např. golfový míček, pomeranč, cihlová zeď apod. Pokud už se na povrchu nacházejí větší nerovnosti, lze použít náročnější techniky jako je Displacement Mapping. Ten je ovšem hardwarově podporován až od DirectX 9.0c, tedy Shader Modelu 3.0.
Největším přínosem Bump Mappingu je nižší náročnost na grafické jádro. Ať už se jedná o starší GPU, které jednoduše nemusely zpracovávat takové množství polygonů, nebo o nové GPU, kde navíc odpadá práce ve vertex shaderech. Známe mnoho různých implementací Bump Mappingu, např. Environment, Emboss, DOT3, Diffuse&Specular, Blend či Normal Bump Mapping, v článku se podíváme na ty nejdůležitější.
Pozn.: Následující technologický popis vznikl hlavně díky dvěma článkům na serverech Delphi3D a Tweak3D. Díky nim se mi doufám podařilo vytvořit přehled technik Bump Mappingu v češtině, který nyní přinášíme našim čtenářům.
Phongovo a Gouraudovo stínování
Aby bylo jasnější, jak Bump Mapping pracuje, vysvětlíme si velice stručně tzv. Phongovo a Gouraudovo stínování. Obojí jsou techniky používané pro výpočet osvětlení jednoho daného polygonu na prostorovém modelu. Na rozdíl od plochého stínování (flat shading), které vytváří podle úhlu dopadu světla uniformní barvu celého polygonu, Phongovo a Gouraudovo stínování tvoří hladké přechody, díky nimž nejsou hrany mezi polygony tak výrazné, případně nejsou vůbec znatelné.
- Gouraudovo stínování (Gouraud shading) je rychlejší, ale méně účinná technika prolínání barev v polygonu (blending). Pracuje na per-vertex základě, zpracovává tedy vrcholy. Pro každý vrchol je vypočtena průměrná normála podle normálových vektorů přiléhajících polygonů. Dále je podle osvětlení a těchto normál určena barva a intenzita pro každý vrchol. Finální osvětlení celého polygonu se získá bilineární interpolací hodnot na jednotlivých vrcholech. Tato metoda je sice rychlejší než Phongovo stínování, ale může vytvářet jisté artefakty, hlavně poblíž míst s nejvyšší intenzitou odraženého světla.
- Phongovo stínování (Phong shading) je na rozdíl od Gourauda založeno na per-pixel technice. Vytvořil ho Bui Tuong-Phong v roce 1975 jako vylepšenou verzi Gouraudova stínování, která eliminuje chyby vznikající na hranách polygonů. Phongovo stínování totiž přidává na hrany polygonů další normály, které vznikají interpolací normál v jeho vrcholech. V současnosti je Phong provozován jen softwarově, protože neexistuje GPU s jeho nativní implementací.
Dnešní GPU používají v převážné většině Gouraudovo stínování, které je, jak jsem říkal, rychlejší. Phongovo stínování se používá hlavně v offline renderingu a různých CAM/CAD aplikacích. V následujícím textu se budu na Gouraudovo stínování odkazovat.
Původní Bump Mapping
Jako první přišel s nápadem Bump Mappingu Jim Blinn v roce 1978. Jako základ pro vytváření nerovností jen pomocí osvětlení použil černobílou výškovou mapu a pro výpočet konečné normály ji skombinoval s derivacemi souřadnic vrcholu (či jiných parametrů). Čím vyšší byla hodnota derivace, tím strmější byl simulovaný povrch. Nyní se ovšem používají složitější techniky, na které se podíváme dále.