Normální mapování - Normal mapping

Normální mapování používané k opětovnému detailu zjednodušených sítí. Tato normální mapa je zakódována v objektovém prostoru.

V 3D počítačové grafice , normální mapování , nebo DOT3 bump mapping , je mapování textur technika používaná pro předstírání osvětlení nárazům a promáčknutí - implementaci bump mapping . Slouží k přidání podrobností bez použití více polygonů . Běžným použitím této techniky je výrazné vylepšení vzhledu a detailů modelu s nízkým polygonem vygenerováním normální mapy z modelu s vysokým polygonem nebo výškové mapy .

Normální mapy se běžně ukládají jako běžné obrázky RGB, kde složky RGB odpovídají souřadnicím X, Y a Z normály povrchu .

Dějiny

V roce 1978 Jim Blinn popsal, jak by mohly být narušeny normály povrchu, aby geometricky ploché plochy měly detailní vzhled. Myšlenka převzetí geometrických detailů z modelu s vysokým polygonem byla představena v „Fitting Smooth Surfaces to Dense Polygon Meshes“ od Krishnamurthy a Levoy, Proc. SIGGRAPH 1996, kde byl tento přístup použit pro vytváření výtlakových map nad sestrami . V roce 1998 byly předloženy dva příspěvky s klíčovými nápady pro přenos detailů pomocí normálních map z vysokých do nízkých polygonových sítí: „Appearance Preserving Simplification“, Cohen et al. SIGGRAPH 1998 a „Obecná metoda pro zachování hodnot atributů na zjednodušených sítích“ od Cignoni et al. IEEE Visualization '98. První z nich představil myšlenku ukládání normálů povrchu přímo do textury, nikoli posunutí, ačkoli to vyžadovalo, aby byl model s nízkými detaily generován konkrétním omezeným algoritmem zjednodušení. Ten představoval jednodušší přístup, který odděluje vysokou a nízkou polygonální síť a umožňuje obnovení jakýchkoli atributů modelu s vysokými detaily (barva, souřadnice textury , posunutí atd.) Způsobem, který nezávisí na tom, jak nízké byl vytvořen detailní model. Kombinace ukládání normálů do textury s obecnějším procesem vytváření stále používá většina aktuálně dostupných nástrojů.

Metoda

Pro výpočet lambertiánského (difuzního) osvětlení povrchu je jednotkový vektor od stínovacího bodu ke zdroji světla tečkovaný jednotkovým vektorem kolmým k tomuto povrchu a výsledkem je intenzita světla na tomto povrchu. Představte si polygonální model koule - můžete pouze přiblížit tvar povrchu. Použitím 3kanálové bitmapy s texturou napříč modelem lze kódovat podrobnější normální vektorové informace. Každý kanál v bitmapě odpovídá prostorové dimenzi (X, Y a Z). To dodává povrchu modelu mnohem více detailů, zejména ve spojení s pokročilými technikami osvětlení.

Prostory

Prostorové rozměry se liší v závislosti na prostoru, ve kterém byla kódována normální mapa. Jednoduchá implementace kóduje normály v prostoru objektů, takže červené, zelené a modré komponenty odpovídají přímo souřadnicím X, Y a Z. V objektovém prostoru je souřadnicový systém konstantní.

Normální mapy objektového prostoru však nelze snadno znovu použít na více modelech, protože orientace povrchů se liší. Protože mapy barevných textur lze znovu použít libovolně a normální mapy mají tendenci odpovídat konkrétní mapě textur, je pro umělce žádoucí, aby normální mapy měly stejnou vlastnost.

Mapa textur (vlevo). Odpovídající normální mapa v tečném prostoru (uprostřed). Normální mapa aplikovaná na kouli v prostoru objektů (vpravo).

Normální opětovné použití mapy je možné kódováním map v tangentovém prostoru . Dotykový prostor je vektorový prostor, který je tečný k povrchu modelu. Souřadnicový systém se plynule mění (na základě derivátů polohy s ohledem na souřadnice textury) po povrchu.

Obrazové znázornění tečného prostoru jednoho bodu na kouli .

Normální mapy tečného prostoru lze identifikovat podle jejich dominantní purpurové barvy, což odpovídá vektoru obrácenému přímo z povrchu. Viz níže .

Výpočet tečného prostoru

Aby bylo možné najít odchylku v normálu, musí být tangenciální prostor správně vypočítán. Normální je nejčastěji narušena ve fragmentovém shaderu po použití modelu a matic zobrazení. Geometrie obvykle poskytuje normální a tečnou. Tečna je součástí tečné roviny a lze ji jednoduše transformovat pomocí lineární části matice (horní 3x3). Normální je však třeba transformovat inverzní transpozicí . Většina aplikací bude chtít bitangens, aby odpovídal transformované geometrii (a souvisejícím UV). Takže namísto vynucování toho, aby bitangens byl kolmý na tangens, je obecně lepší transformovat bitangens stejně jako tangens. Nechť t je tangens, b je bitangens, n je normální, M 3x3 je lineární část matice modelu a V 3x3 je lineární část matice pohledu.

Vykreslování s normálním mapováním.
Vykreslování pomocí normální mapovací techniky. Vlevo několik pevných sítí. Vpravo rovinná plocha s normální mapou vypočítanou ze sítí vlevo.

Jak to funguje

Příklad normální mapy (uprostřed) se scénou, ze které byla vypočítána (vlevo) a výsledkem při aplikaci na rovný povrch (vpravo). Tato mapa je zakódována v tangentovém prostoru.

Pro výpočet lambertiánského (difuzního) osvětlení povrchu je jednotkový vektor od stínovacího bodu ke zdroji světla tečkovaný jednotkovým vektorem kolmým k tomuto povrchu a výsledkem je intenzita světla na tomto povrchu. Představte si polygonální model koule - můžete pouze přiblížit tvar povrchu. Použitím 3kanálové bitmapy s texturou napříč modelem lze kódovat podrobnější normální vektorové informace. Každý kanál v bitmapě odpovídá prostorové dimenzi (X, Y a Z). Tyto prostorové rozměry jsou relativní ke konstantnímu souřadnicovému systému pro normální mapy objektového prostoru nebo k plynule se měnícímu souřadnicovému systému (založenému na derivátech polohy vzhledem k souřadnicím textury) v případě normálních map tečného prostoru. To dodává povrchu modelu mnohem více detailů, zejména ve spojení s pokročilými technikami osvětlení.

Jednotkové normální vektory odpovídající souřadnicím textury u, v jsou mapovány na normální mapy. Jsou k dispozici pouze vektory směřující k divákovi (z: 0 až -1 pro levostrannou orientaci ), protože vektory na geometriích směřujících od diváka nejsou nikdy zobrazeny. Mapování je následující:

  X: -1 to +1 :  Red:     0 to 255
  Y: -1 to +1 :  Green:   0 to 255
  Z:  0 to -1 :  Blue:  128 to 255
                  light green    light yellow
  dark cyan       light blue     light red    
  dark blue       dark magenta
  • Normální směřující přímo k divákovi (0,0, -1) je namapováno na (128,128,255). Části objektu přímo obrácené k divákovi jsou proto světle modré. Nejběžnější barva na normální mapě.
  • Normální směřující do pravého horního rohu textury (1,1,0) je namapováno na (255,255,128). Proto je pravý horní roh předmětu obvykle světle žlutý. Nejjasnější část barevné mapy.
  • Normální směřující vpravo od textury (1,0,0) je namapován na (255,128,128). Proto je pravý okraj předmětu obvykle světle červený.
  • Normální směřující na vrchol textury (0,1,0) je namapován na (128,255,128). Proto je horní okraj předmětu obvykle světle zelený.
  • Normální směřující vlevo od textury (-1,0,0) je namapováno na (0,128,128). Proto je levý okraj předmětu obvykle tmavě azurový.
  • Normální směřující na konec textury (0, -1,0) je namapován na (128,0,128). Proto je spodní okraj předmětu obvykle tmavě purpurový.
  • Normální směřující do levého dolního rohu textury (-1, -1,0) je namapováno na (0,0,128). Proto je levý dolní roh objektu obvykle tmavě modrý. Nejtmavší část barevné mapy.

Protože při výpočtu bodového součinu pro výpočet difuzního osvětlení bude použit normál , můžeme vidět, že {0, 0, –1} by bylo přemapováno na hodnoty {128, 128, 255}, což by dalo tento druh nebesky modré barva viditelná na normálních mapách (modrá (z) souřadnice je souřadnice perspektivy (hloubky) a ploché souřadnice RG-xy na obrazovce). {0,3, 0,4, –0,866} by bylo přemapováno na ({0,3, 0,4, –0,866}/2+{0,5, 0,5, 0,5})*255 = {0,15+0,5, 0,2+0,5, -0,433+0,5} *255 = {0,65, 0,7, 0,067}*255 = {166, 179, 17} hodnoty ( ). Znak souřadnice z (modrý kanál) musí být převrácen, aby odpovídal normálnímu vektoru normální mapy s okem (hlediště nebo kamera) nebo světelným vektorem. Jelikož záporné hodnoty z znamenají, že vrchol je před kamerou (spíše než za kamerou), tato konvence zaručuje, že povrch září maximální silou přesně tehdy, když se světelný vektor a normální vektor shodují.

Normální mapování ve videohrách

Interaktivní normální vykreslování mapy bylo původně možné pouze na PixelFlow , paralelním vykreslovacím stroji postaveném na University of North Carolina v Chapel Hill . Později bylo možné provádět normální mapování na špičkových pracovních stanicích SGI pomocí operací s víceprůchodovým vykreslováním a framebufferem nebo na hardwaru PC nižší třídy s některými triky pomocí paletovaných textur. Nicméně s příchodem shaderů v osobních počítačích a herních konzolách se běžné mapování začalo široce používat v komerčních videohrách počínaje koncem roku 2003. Popularita normálního mapování pro vykreslování v reálném čase je dána poměrem jeho dobré kvality k požadavkům na zpracování oproti jiným metodám produkující podobné efekty. Velkou část této účinnosti umožňuje škálování detailů indexovaných podle vzdálenosti , což je technika, která selektivně snižuje detail normální mapy dané textury (viz mipmapping ), což znamená, že vzdálenější povrchy vyžadují méně složitou simulaci osvětlení. Mnoho autorské potrubí obsahují velice modely rozlišením upečené do rozlišením modelů ve hře nízké / střední doplněny o běžných map.

Základní normální mapování lze implementovat do jakéhokoli hardwaru, který podporuje paletizované textury. První herní konzolí, která měla specializovaný normální mapovací hardware, byla Sega Dreamcast . Microsoft Xbox byl však první konzolí, která široce využívala efekt v maloobchodních hrách. Ze šesté generaci konzolí , pouze PlayStation 2 ‚s GPU postrádá vestavěné normální podporu mapování, i když to může být simulované pomocí vektorové jednotky PlayStation 2 Hardware je. Hry pro Xbox 360 a PlayStation 3 do značné míry spoléhají na běžné mapování a byly první generací herních konzolí, která využívala mapování paralaxy . Ukázalo se, že Nintendo 3DS podporuje normální mapování, jak ukazují Resident Evil: Revelations a Metal Gear Solid: Snake Eater .

Viz také

Reference

externí odkazy