Mapowanie normalnych

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj
Mapowanie wypukłości pozwala uzyskać podobną wizualną złożonośc modelu, nawet na bardzo uproszczonej geometrii.

Mapowanie normalnych (ang. Normal Mapping lub Dot3 bump mapping) – jedna z wielu technik symulowania wypukłości na płaskich wielokątach, stosowana w grafice trójwymiarowej. Jest rozwinięciem koncepcji mapowania wypukłości (ang. Bump Mapping) oparacowanej przez Jamesa F. Blinna i opisanej w publikacji z 1978 roku[1]. Podstawą działania mapowania normalnych jest zastąpienie wektorów normalnych opisanych przez geometrię, wektorami zapisanymi w specjalnej teksturze - mapie normalnych. Istnieje wiele podobnych technik symulowania wypukłości, jednak odwzorowanie normalnych jest obok parallax occlusion mappingu najczęściej stosowaną techniką we współczesnych grach komputerowych. Głównie za sprawą niewielkiej złożoności obliczeniowej, wymaganej do uzyskania efektu. Mapowanie normalnych pozwala w bardzo efektywny sposób, uzyskać wizualne złudzenie większej złożoności modelu trójwymiarowego niż jest w rzeczywistości. Dzięki temu liczba wielokątów potrzebnych do opisania takiego modelu może być znacznie ograniczona.

Mapy normalnych[edytuj | edytuj kod]

Tekstura oraz wygenerowane na jej podstawie mapy normalnych. W środku mapa normalnych w przestrzeni stycznej, po prawej w przestrzeni obiektu (w tym przypadku opisująca sferę)
Różnica pomiędzy zwykłą oświetloną powierzchnią a powierzchnią z zastosowaną techniką mapowania normalnych.

Do uzyskania opisywanego efektu wykorzystana zostaje tak zwana "mapa normalnych", będąca zapisaną w teksturze informacją o ułożeniu wektorów normalnych. Mówiąc dokładniej - każdy teksel takiej tekstury zamiast informacji o kolorze RGB zawiera współrzędne XYZ, określające kierunek i zwrot wektora normalnego. Model opisany zostaje taką mapą normalnych podobnie jak zwykłą kolorową teksturą, wykorzystując zazwyczaj te same współrzędne określające jej odwzorowanie na owym modelu. Mapa ta oczywiście nie jest wyświetlana, a jedynie służy jako kontener informacji. W fazie określania koloru pikseli dla generowanego obrazu przechowywane wektory normalne zostają odkodowane oraz zastosowane podczas obliczeń oświetlenia dla danego modelu trójwymiarowego. Ze względu na artefakty kompresji stratnej tekstur przy zapisywaniu wektorów, dokładna reprezentacja normalnych w teksturze może być inna (np. DXT5n).

W technice mapowania normalnych stosuje się dwa rodzaje map normalnych, z których każda przechowuje informację o wektorach normalnych w innej przestrzeni.

Mapy normalnych w przestrzni stycznej[edytuj | edytuj kod]

Tego typu mapy normalnych są stosowane przede wszystkim w grach komputerowych i innych symulacjach, w których obiekty podlegają deformacjom (np.: animacja szkieletowa, morph target animation). Wektory normalne w powyższej formie zawierają jedynie informacje o odchyleniu względem wektora normalnego określonego przez geometrię modelu. Domyślnie wektor reprezentujący niezaburzony wektor normalny skierowany jest w kierunku dodatniej osi Z: (0,0,1). W sytuacji, gdyby cała mapa normalnych kodowała taki niezaburzony wektor normalny, model zostałby wyświetlony w niezmienionej formie - jakby technika mapowania normalnych nie została zastosowana. Gdyby którykolwiek teksel mapy normalnych zawierał wektor odchylony od podanego wcześniej, funkcja oświetlenia odbiłaby promień w innym kierunku, niż normalnie.

Do poprawnego działania metoda ta wymaga obliczenia przestrzeni stycznej dla każdego wielokąta.

Charakterystyka:

  • jasne odcienie niebieskiego (łatwiejsze manipulacje w programach graficznych)
  • poprawne działanie w połączeniu z animacją
  • uniwersalność - jedna mapa normalnych może pasować na wiele modeli
  • wolniejszy od konkurencyjnej metody

Mapy normalnych w przestrzni obiektu[edytuj | edytuj kod]

Mapy normalnych w przestrzni obiektu stosuje się przede wszystkim do obiektów nie podlegających odkształceniom, jednak mogących wykonywać obroty czy translację (skalowanie może powodować problemy). Omawiana metoda, w porównaniu do poprzedniej, nie zawiera informacji jedynie o odchyleniu wektorów normalnych od narzuconych przez geometrię, a pełne współrzędne określające ich położenie. Stąd też różnica w kolorach takich map normalnych, gdy są wyświetlane jako obrazy. Mapy normalnych w przestrzeni obiektu zawierają szeroką gamę kolorów, natomiast te w przestrzeni stycznej ograniczoną do odcieni purpury, fioletu czy seledynu (wektory są skierowane w pobliże dodatniej osi Z). Metoda wykorzystująca bieżącą mapę normalnych jest szybsza od poprzedniej, jednak posiada poważne ograniczenia, które uniemożliwiają stosowanie jej w animowanych modelach trójwymiarowych.

Charakterystyka:

  • kolory tęczy (trudniejsze manipulacje w programach graficznych)
  • nie nadaje się do modeli podlegających deformacjom
  • każdy model wymaga wygenerowania indywidualnej mapy normalnych
  • szybszy (nie wymaga obliczeń na przestrzeni stycznej)

Szczegóły[edytuj | edytuj kod]

Podstawowe obliczenia (przestrzeni stycznej) potrzebne do zastosowania techniki są najczęściej wykonywane w programie cienującym wierzchołków (ang. Vertex Shader). Istnieje również możliwość dokonywania owych obliczeń w programie cienującym pikseli (ang. Fragment/Pixel Shader), jednak we współczesnych modelach trójwymiarowych, ilość wierzchołków jest mniejsza niż pikseli które je opisują więc częściej wybierana jest pierwsza opcja.

Technika mapowania normalnych daje poprawny efekt wizualny w sytuacji, gdy nie występuje paralaksa, a więc gdy mapowane wyboje są pomijalnie niskie. Wysokie nierówności powierzchni nie są poprawnie odwzorowane przy patrzeniu na obiekt pod ostrym kątem do powierzchni. Poprawę przy małej częstotliwości wybojów (czyli kiedy mają duże rozmiary) zapewnia mapowanie paralaksy, a przy większej, gdzie występuje już efekt zasłaniania jednych wybojów przez drugie i zaczynają tworzyć się cienie, zaawansowane techniki mapowania paralaksy opracowane po roku 2004.

Zobacz też[edytuj | edytuj kod]

Przypisy

  1. J. F. Blinn, Simulation of wrinkled surfaces. w: Computer Graphics (SIGGRAPH '78 Proceedings), 12(3), str. 286-292, sierpień (1978)