Próbuję uchwycić pojęcie normalnego mapowania, ale nie rozumiem kilku rzeczy. Krótko mówiąc, nie jestem pewien, czy normalna mapa zależy od punktu widzenia, czy nie (tj. Czy dostaniesz inną normalną mapę tego samego obiektu, gdy się wokół niego obracasz). Po drugie, nie rozumiem, dlaczego niebieskawy kolor jest dominującym kolorem na normalnych mapach.
To, co myślę o normalnych i ich stosunku do kolorów RGB, jest następujące. Kula jednostkowa reprezentuje dowolną możliwą normalną jednostkę - innymi słowy, składowe X, Y i Z wektora normalnego jednostki mieszczą się w zakresie od -1 do 1. Wszystkie składowe koloru RGB mają zakres od 0 do 255. Dlatego ma to sens odwzorować -1 (składnik normalny) na 0 (składnik koloru), od 0 do 127 lub 128 oraz od 1 do 255. Każda wartość pomiędzy jest po prostu interpolowana liniowo.
Zastosowanie tego odwzorowania do normalnych dowolnego obiektu 3D daje bardzo kolorowy obraz, wcale nie przeważnie niebieski. Na przykład, biorąc kostkę, wszystkie sześć twarzy miałoby inny, ale jednolity kolor. Na przykład twarz z normalną (1,0,0) to (255,128,128), twarz z normalną (0,0, -1) to (128, 128, 8) i tak dalej.
Jednak z jakiegoś powodu normalne mapy znalezionego sześcianu są całkowicie niebieskawe, tj. (128 128 285). Ale oczywiście normalne nie wszystkie są w dodatnim kierunku Z, tj. (0,0,1). Jak to działa?
[Edytować]
Ok, więc podejście opisane powyżej wydaje się być nazywane normalną mapą przestrzeni obiektów lub normalną mapą przestrzeni świata . Druga nazywana jest normalną mapą przestrzeni stycznej . Rozumiem, jak takiej normalnej mapy przestrzeni stycznej można użyć do zmodyfikowania normalnych geometrii, ale wciąż nie jestem całkowicie pewien, w jaki sposób jest ona obliczana (patrz mój komentarz do odpowiedzi Nicola Bolasa).
[Edytuj 2]
Powinienem chyba wspomnieć, że pracuję z częściowymi powierzchniami parametrycznymi. Powierzchnie te składają się z zestawu łat powierzchniowych , przy czym każda łata jest powiązana z własną przestrzenią parametryczną (u, v) = [0,1] x [0,1]. W dowolnym punkcie powierzchni normalną można dokładnie obliczyć. Najwyraźniej wektory T ( styczna ) i B ( dwu-styczna ) - wymagane do rozciągnięcia przestrzeni stycznej - nie są po prostu częściowymi pochodnymi łatki powierzchniowej w kierunku u i v ...
źródło
Odpowiedzi:
Mapowanie tekstury to mapowanie między punktami na powierzchni 3D i odpowiadającymi im punktami na obrazie tekstury. Jeśli masz odwzorowanie tekstury 1: 1, to każdy punkt na powierzchni 3D jest odwzorowywany na konkretny i unikalny punkt na obrazie tekstury (choć odwrotność nie musi być prawdziwa. Niektóre lokalizacje tekstury niekoniecznie muszą być mapowane na lokalizacje na powierzchni).
Dzięki takiemu odwzorowaniu można przejść przez powierzchnię 3D i zapisać każdą odrębną normalną w odpowiednim miejscu w teksturze.
OK dobrze, zróbmy to. Przejdziemy przez powierzchnię 3D i wygenerujemy normalne obiekty-przestrzeń mapowane lokalizacje, a następnie przykleimy je do tekstury. Kiedy więc chcemy renderować, po prostu pobieramy normalną przestrzeń przedmiotową z tekstury i gotowe. Dobrze?
Cóż, to by zadziałało. Ale oznacza to również, że normalne tekstury mogą być używane tylko z tym konkretnym przedmiotem. Oznacza to również, że normalne tekstury mogą być używane tylko z tym obiektem i tym konkretnym mapowaniem tekstury . Jeśli więc chcesz w jakiś sposób obrócić mapowanie tekstur lub zmienić je za pomocą transformacji UV, nie masz szczęścia.
Ogólnie rzecz biorąc, ludzie używają normalnych map, gdzie normalne są w „przestrzeni stycznej”. Przestrzeń styczna to przestrzeń względem odwzorowanego punktu na powierzchni 3D, gdzie niezmodyfikowana normalna znajduje się w kierunku + Z, a osie X i Y wskazują wzdłuż osi U i V względem powierzchni.
Przestrzeń styczna zasadniczo reguluje wartości normalne. W przestrzeni stycznej normalna (0, 0, 1) zawsze oznacza „niemodyfikowany”; jest to normalna wartość interpolacji normalnej wierzchołka. Prowadzi to do wielu użytecznych rzeczy, które możesz zrobić , a jedną z najważniejszych jest przechowywanie ich w mniejszej ilości danych.
Ponieważ Z zawsze będzie dodatni, możesz więc obliczyć go w swoim module cieniującym z komponentów X i Y. Ponieważ trzeba tylko 2 wartości, więc można użyć (w OpenGL formatu obrazu nomenklatury )
GL_RG8
, format 2-bajtowy-per-pixel zamiastGL_RGBA8
, 4-bajtowy-per-pixel (GL_RGB8
nadal będzie 4-bajtów na piksel , ponieważ procesory graficzne będą wypełniać każdy piksel do 4 bajtów). Co więcej, możesz skompresować te dwie wartości , co prowadzi do formatu 1-bajt na piksel. Zmniejszyłeś więc rozmiar tekstury do 75% normalnej mapy obiektów i przestrzeni.Zanim zaczniesz mówić o jakiejkolwiek normalnej mapie, musisz najpierw dowiedzieć się, co ona przechowuje. Czy jest to zwykła mapa w przestrzeni przedmiotowej, normalna mapa w przestrzeni stycznej, czy coś innego?
źródło
Normalne mapy są mapowane przy użyciu tak zwanej przestrzeni stycznej, która jest zasadniczo przestrzenią lokalną opartą na przestrzeni tekstur modelu. To powinno odpowiedzieć na oba pytania.
To nie zależy od punktu widzenia, ponieważ ta przestrzeń nie ma nic wspólnego z kamerą. Na normalnej mapie Z to kierunek w górę. Jeśli spojrzysz na normalne modelu, większość normalnych wektorów będzie wskazywać bezpośrednio na siatce. Powierzchnia siatki jest przestrzenią tekstury, o której mówiłem, więc w tym lokalnym układzie współrzędnych góra jest skierowana na zewnątrz.
źródło
Przewiń w dół na tej stronie
Spójrz na prawy rysunek czarno-biały w zestawach danych - jest to (lub przynajmniej kiedyś) znane jako rysunek jeża, rendering powierzchni z rysowaniem każdej z jego normalnych
Tak więc, aby zrozumieć tradycyjną mapę normalną, pomyśl o zdenerwowanym jeżu z wystającymi wszystkimi kolcami - każdy z tych kolców jest normalny względem powierzchni jeża pod nim -
Jeśli chodzi o pytanie dotyczące kuli, jeśli żylibyście wyłącznie w przestrzeni parametrycznej, tak jak w przypadku znaczników promienia, to nieskończony zestaw normalnych do kuli stworzyłby po prostu większą kulę - w przestrzeni mozaikowanej, tj. W świecie, w którym komputer narzucałby nam chcemy czasu rzeczywistego, wtedy masz kolczaste przybliżenie kuli.
Teraz ten przykład koncentruje się na normalnej mapie OBIEKT - definiuje normalne w odniesieniu do obiektu, i jest to niezmienne przy każdym obrocie, translacji lub skalowaniu - obiektu, kamery lub czegokolwiek innego - jak wspomniano wcześniej, jest to tylko jeden rodzaj normalnej mapy, ale jest najczęstszy
źródło
Myślę, że możesz mieć jakieś nieporozumienia na temat normalnych map. Zasadniczo jest to sposób na symulację wyglądu czegoś wyboistego, gdy w rzeczywistości geometria jest całkowicie płaska.
Kolory normalnej mapy są interpretowane przez moduł cieniujący i przetwarzane na podstawie intensywności i kierunku światła, a także widoku z kamery. Oznacza to, że możesz mieć na przykład ceglaną podłogę, która jest całkowicie płaska, z płaską fakturą, ale ponieważ ma normalną mapę o tym samym kształcie cegły, kiedy się wokół niej rozejrzysz, światło będzie się odbijało z boku z cegieł, dzięki czemu wygląda bardziej 3D niż jest.
To oczywiście tylko złudzenie, ale jest znacznie tańsze niż posiadanie złożonej geometrii. I nie, kolory normalnej mapy się nie zmieniają. W rzeczywistości reprezentują tylko wartości do porównania w module cieniującym. Jestem pewien, że ktoś tutaj będzie mógł podać ci więcej szczegółów.
źródło