23. září 2010

Normal mapping 1. část - teorie

Dnes tedy něco o technice tzv. normal mappingu, která je jedním ze základních pilířů každého moderního herního engine.

Jde o přenesení detailu high-poly modelu na herní low-poly model bez skutečné změny geometrie - za zachování co nejnižších nároků na výkon počítače. Samozřejmě tento přenos detailu není dokonalý, ale je to technika, se kterou lze dosáhnout velmi zajímavých výsledků. Samotná normal-mapa (česky někdy překládaná jako normálová mapa) je RGB textura jako všechny ostatní, ale v jednotlivých R, G a B kanálech se ukládá směr normály povrchu v místě modelu, na kterém je tento pixel namapován. Standardní phong stínování počítá barvu pixelu na objektu interpolací normál vertexů. Pokud použijeme normal mapu, získáme tedy větší kontrolu nad směrem normál na povrchu - můžeme měnit směr pro každý texel.



Jak už bylo řečeno, tato technika má také své slabiny. Mění pouze chování povrchu materiálu při dopadu světla, nikoliv samotnou geometrii modelu. Není tedy schopná změnit siluetu modelu, překrývat sama sebe (např. vysoké výčnělky), ani vytvářet stíny.

[caption id="attachment_59" align="aligncenter" width="482" caption="Normal mapping"]Ukázka normal mappingu[/caption]

Co je to normála?

Normála povrchu určuje směr kolmý k povrchu modelu. Pro počítání stínování se tento vektor využívá spolu s vektory směru světla a kamery pro výpočet výsledné barvy pixelu povrchu objektu. V běžném phong stínování má každý vertex vlastní normálu a povrch polygonu se interpoluje mezi těmito vektory. Pro ostré hrany (často tzv. smooth groups či hard edges) má vertex na takové hraně ležící normály dvě pro každou stranu hrany, neprobíhá zde tedy interpolace a vytváří se ostrá hrana.

Do jednotlivých barevných kanálů bitmapy se tedy ukládá normálový vektor. Pro červenou složku je to X osa (zleva doprava, po souřadnici U), zelená souhlasí s osou Y (shora dolů, souřadnice V) a modrý kanál ukládá informace o ose Z vektoru (po směru pohledu pozorovatele, podobně jako v bump mapě). Do alpha kanálu je pak v některých enginech možné uložit bump mapu pro tzv. parallax mapping - vylepšený normal mapping.

Generování NM

Samotné vytváření normal-mapy z highpoly objektu pro lowpoly objekt využívá stejnou techniku jako některé renderery (ne však herní, zatím) zvanou raytracing. Z lowpoly modelu (který jako jediný vyžaduje UV souřadnice) se vyšle paprsek směrem určeným tzv. cage (klecí). Když paprsek protne highpoly model, je změřen úhel, který s paprskem jeho povrch svírá a tento vektor je zapsán do normal mapy na příslušné místo.

Žádné komentáře:

Okomentovat