Normalne mapowanie - Normal mapping
W 3D grafiki komputerowej , normalnego mapowania lub mapowania Dot3 Bump , to mapowania tekstur technika stosowana do preparowania oświetlenie uderzeniami i wgnieceniami - implementację mapowania wypukłości . Służy do dodawania szczegółów bez używania większej liczby wielokątów . Powszechnym zastosowaniem tej techniki jest znaczne ulepszenie wyglądu i szczegółów modelu o niskim wieloboku poprzez wygenerowanie mapy normalnych z modelu o wysokim wieloboku lub mapy wysokości .
Mapy normalnych są zwykle przechowywane jako zwykłe obrazy RGB, w których składniki RGB odpowiadają odpowiednio współrzędnym X, Y i Z normalnej powierzchni .
Historia
W 1978 Jim Blinn opisał, w jaki sposób można zaburzyć normalne powierzchni, aby geometrycznie płaskie powierzchnie miały szczegółowy wygląd. Pomysł pobrania detali geometrycznych z modelu wielokątnego został przedstawiony w książce „Dopasowywanie gładkich powierzchni do gęstych siatek wielokątnych” autorstwa Krishnamurthy i Levoy, Proc. SIGGRAPH 1996, gdzie to podejście zostało wykorzystane do tworzenia map przemieszczeń nad nurbami . W 1998 r. przedstawiono dwa artykuły z kluczowymi pomysłami na przeniesienie szczegółów z mapami normalnymi z siatek o wysokim do niskiego wielokąta: „Appearance Preserving Simplification”, autorstwa Cohena i in. SIGGRAPH 1998 oraz „Ogólna metoda zachowania wartości atrybutów na uproszczonych siatkach” autorstwa Cignoni et al. Wizualizacja IEEE '98. Pierwsza z nich wprowadziła ideę przechowywania normalnych powierzchni bezpośrednio w teksturze, a nie przemieszczeń, chociaż wymagała wygenerowania modelu o małej szczegółowości przez określony algorytm uproszczenia z ograniczeniami. Ten ostatni zaprezentował prostsze podejście, które oddziela wysoką i niską siatkę wielokątną i pozwala odtworzyć dowolne atrybuty modelu o dużej szczegółowości (kolor, współrzędne tekstury , przemieszczenia itp.) w sposób niezależny od tego, jak mało utworzono model szczegółowy. Połączenie przechowywania normalnych w teksturze z bardziej ogólnym procesem tworzenia jest nadal używane przez większość dostępnych obecnie narzędzi.
metoda
Aby obliczyć oświetlenie Lamberta (rozproszone) powierzchni, wektor jednostkowy od punktu zacienienia do źródła światła jest przerywany wektorem jednostkowym normalnym do tej powierzchni, a wynikiem jest natężenie światła na tej powierzchni. Wyobraź sobie wielokątny model kuli - możesz jedynie przybliżyć kształt powierzchni. Używając 3-kanałowej mapy bitowej z teksturą w całym modelu, można zakodować bardziej szczegółowe informacje o wektorach normalnych. Każdy kanał w mapie bitowej odpowiada wymiarowi przestrzennemu (X, Y i Z). Dodaje to znacznie więcej szczegółów do powierzchni modelu, zwłaszcza w połączeniu z zaawansowanymi technikami oświetleniowymi.
Przestrzenie
Wymiary przestrzenne różnią się w zależności od przestrzeni, w której zakodowana została mapa normalna. Prosta implementacja koduje normalne w przestrzeni obiektów, tak że składowe czerwony, zielony i niebieski odpowiadają bezpośrednio współrzędnym X, Y i Z. W przestrzeni obiektu układ współrzędnych jest stały.
Jednak mapy normalnych obiekt-przestrzeń nie mogą być łatwo ponownie użyte w wielu modelach, ponieważ orientacja powierzchni jest różna. Ponieważ mapy tekstur kolorów można swobodnie wykorzystywać ponownie, a mapy normalnych mają tendencję do odpowiadania konkretnej mapie tekstur, artyści powinni mieć taką samą właściwość.
Normalne ponowne wykorzystanie map jest możliwe dzięki kodowaniu map w przestrzeni stycznej . Przestrzeń styczna to przestrzeń wektorowa, która jest styczna do powierzchni modelu. Układ współrzędnych zmienia się płynnie (na podstawie pochodnych położenia względem współrzędnych tekstury) na całej powierzchni.
Mapy normalnych przestrzeni stycznych można rozpoznać po ich dominującym fioletowym kolorze, odpowiadającym wektorowi skierowanemu bezpośrednio na powierzchnię. Zobacz poniżej .
Obliczanie przestrzeni stycznej
Aby znaleźć zaburzenie w normalnej przestrzeni stycznej, należy ją poprawnie obliczyć. Najczęściej normalny jest zaburzony w Fragment Shader po zastosowaniu macierzy modelu i widoku. Zazwyczaj geometria zapewnia normalną i styczną. Styczna jest częścią płaszczyzny stycznej i może być łatwo przekształcona za pomocą liniowej części macierzy (górna 3x3). Jednak normalny musi zostać przekształcony przez odwrotną transpozycję . Większość aplikacji będzie wymagać, aby bitangent pasował do przekształconej geometrii (i powiązanych UV). Więc zamiast wymuszać prostopadłość tangensa do stycznej, generalnie preferowane jest przekształcenie tangensa bitowego tak, jak stycznej. Niech t będzie tangensem , b bitangentem, n będzie normalną, M 3x3 będzie liniową częścią macierzy modelu, a V 3x3 będzie liniową częścią macierzy widoku.
Jak to działa
Aby obliczyć oświetlenie Lamberta (rozproszone) powierzchni, wektor jednostkowy od punktu zacienienia do źródła światła jest przerywany wektorem jednostkowym normalnym do tej powierzchni, a wynikiem jest natężenie światła na tej powierzchni. Wyobraź sobie wielokątny model kuli - możesz jedynie przybliżyć kształt powierzchni. Używając 3-kanałowej mapy bitowej z teksturą w całym modelu, można zakodować bardziej szczegółowe informacje o wektorach normalnych. Każdy kanał w mapie bitowej odpowiada wymiarowi przestrzennemu (X, Y i Z). Te wymiary przestrzenne odnoszą się do stałego układu współrzędnych dla map normalnych w przestrzeni obiektowej lub do płynnie zmieniającego się układu współrzędnych (opartego na pochodnych położenia względem współrzędnych tekstury) w przypadku map normalnych w przestrzeni stycznej. Dodaje to znacznie więcej szczegółów do powierzchni modelu, zwłaszcza w połączeniu z zaawansowanymi technikami oświetleniowymi.
Wektory normalnych jednostkowych odpowiadające współrzędnej tekstury u,v są mapowane na mapy normalnych. Obecne są tylko wektory skierowane w stronę widza (z: 0 do -1 dla orientacji leworęcznej ), ponieważ wektory na geometriach skierowane od widza nigdy nie są pokazywane. Mapowanie wygląda następująco:
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
- Normalna skierowana bezpośrednio w stronę widza (0,0,-1) jest odwzorowana na (128,128,255). Stąd części obiektu skierowane bezpośrednio do widza są jasnoniebieskie. Najpopularniejszy kolor na normalnej mapie.
- Normalny wskazujący na prawy górny róg tekstury (1,1,0) jest mapowany na (255,255,128). Dlatego prawy górny róg obiektu jest zwykle jasnożółty. Najjaśniejsza część mapy kolorów.
- Normalny wskazujący na prawo od tekstury (1,0,0) jest mapowany na (255,128,128). Stąd prawa krawędź przedmiotu jest zwykle jasnoczerwona.
- Normalny punkt wskazujący na górę tekstury (0,1,0) jest mapowany na (128,255,128). Stąd górna krawędź przedmiotu jest zwykle jasnozielona.
- Normalny wskazujący na lewo od tekstury (-1,0,0) jest mapowany na (0,128,128). Stąd lewa krawędź przedmiotu jest zwykle ciemna.
- Normalne wskazanie na dół tekstury (0,-1,0) jest mapowane na (128,0,128). Stąd dolna krawędź przedmiotu jest zwykle ciemna w kolorze magenta.
- Normalny punkt wskazujący na lewy dolny róg tekstury (-1,-1,0) jest mapowany na (0,0,128). Stąd lewy dolny róg obiektu jest zwykle ciemnoniebieski. Najciemniejsza część mapy kolorów.
Ponieważ normalna zostanie użyta w obliczeniach iloczynu skalarnego do obliczenia światła rozproszonego, możemy zobaczyć, że {0, 0, –1} zostanie przemapowane na wartości {128, 128, 255}, dając ten rodzaj nieba kolor widoczny na normalnych mapach (niebieska współrzędna (z) to współrzędna perspektywy (głębokość) i płaskie współrzędne RG-xy na ekranie). {0.3, 0.4, –0.866} zostanie przemapowane 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} wartości ( ). Znak współrzędnej Z (kanał niebieski) musi być odwrócony, aby dopasować wektor normalny mapy normalnych do wektora oka (punktu widzenia lub kamery) lub wektora światła. Ponieważ ujemne wartości z oznaczają, że wierzchołek znajduje się przed kamerą (a nie za kamerą), ta konwencja gwarantuje, że powierzchnia świeci z maksymalną siłą dokładnie wtedy, gdy wektor światła i wektor normalny pokrywają się.
Normalne mapowanie w grach wideo
Interaktywne renderowanie normalnych map było pierwotnie możliwe tylko w PixelFlow , maszynie do równoległego renderowania zbudowanej na Uniwersytecie Północnej Karoliny w Chapel Hill . Później możliwe było wykonanie normalnego mapowania na wysokiej klasy stacjach roboczych SGI przy użyciu renderowania wieloprzebiegowego i operacji buforowania ramki lub na słabszym sprzęcie PC z kilkoma sztuczkami przy użyciu tekstur z paletą. Jednak wraz z pojawieniem się shaderów w komputerach osobistych i konsolach do gier, normalne mapowanie stało się szeroko stosowane w komercyjnych grach wideo od końca 2003 roku. Popularność mapowania normalnego w renderowaniu w czasie rzeczywistym wynika z dobrego stosunku jakości do wymagań przetwarzania w porównaniu z innymi dające podobne efekty. Duża część tej wydajności jest możliwa dzięki skalowaniu szczegółów z indeksem odległości , technice, która selektywnie zmniejsza szczegółowość mapy normalnej danej tekstury (por. mipmapping ), co oznacza, że bardziej odległe powierzchnie wymagają mniej złożonej symulacji oświetlenia. Wiele rurociągi autorskie użyciu wysokiej rozdzielczości modeli upieczone w niskiej / średniej rozdzielczości modeli w grze wzbogacony o normalnych mapach.
Podstawowe mapowanie normalnych można zaimplementować na dowolnym sprzęcie obsługującym tekstury z paletą. Pierwszą konsolą do gier, która miała wyspecjalizowany sprzęt do normalnego mapowania, była Sega Dreamcast . Xbox Microsoftu był jednak pierwszą konsolą, która szeroko wykorzystała ten efekt w grach detalicznych. Spośród konsole szóstej generacji , tylko PlayStation 2 „s GPU brakuje wbudowany w normalnym wsparcie mapowania, choć może to być symulowane przy użyciu jednostek sprzętem PlayStation 2 wektor. Gry na Xbox 360 i PlayStation 3 w dużym stopniu opierają się na normalnym mapowaniu i były pierwszą generacją konsoli do gier, która korzystała z mapowania paralaksy . Wykazano, że Nintendo 3DS obsługuje normalne mapowanie, co pokazały Resident Evil: Revelations i Metal Gear Solid: Snake Eater .
Zobacz też
- Odbicie (fizyka)
- Okluzja otoczenia
- Mapa głębokości
- Pieczenie (grafika komputerowa)
- Teselacja (grafika komputerowa)
Bibliografia
Zewnętrzne linki
- Samouczek dotyczący mapowania normalnych Logika pikselowa stojąca za mapowaniem normalnym Dot3
- Darmowy generator NormalMap-Online w przeglądarce
- Normalne mapowanie na sunandblackcat.com
- Normalne mapowanie blendera
- Mapowanie normalne z teksturami z paletą przy użyciu starych rozszerzeń OpenGL.
- Normalna fotografia mapowa Tworzenie normalnych map ręcznie poprzez nakładanie warstw zdjęć cyfrowych
- Objaśnienie mapowania normalnego
- Prosty Normal Mapper Generator map normalnych Open Source
