Normalne mapowanie - Normal mapping

Image
Mapowanie normalnych używane do ponownego uszczegółowienia uproszczonych siatek. Ta normalna mapa jest zakodowana w przestrzeni obiektów.

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ść.

Image
Mapa tekstury (po lewej). Odpowiednia mapa normalna w przestrzeni stycznej (środek). Mapa normalnych zastosowana do sfery w przestrzeni obiektu (po prawej).

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.

Image
Obrazowe przedstawienie przestrzeni stycznej pojedynczego punktu na kuli .

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.

Renderowanie z normalnym mapowaniem.
Renderowanie przy użyciu normalnej techniki mapowania. Po lewej kilka solidnych oczek. Po prawej płaska powierzchnia z normalną mapą obliczoną z siatek po lewej.

Jak to działa

Image
Przykład normalnej mapy (w środku) ze sceną, z której została obliczona (po lewej) i wynikiem po nałożeniu na płaską powierzchnię (po prawej). Ta mapa jest zakodowana w przestrzeni stycznej.

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ż

Bibliografia

Zewnętrzne linki