Dlaczego normalne mapy mają kolor niebieski i fioletowy?


11

Uczę się o normalnym mapowaniu. Zrozumiałem, że wartości RGB są konwertowane na XYZ, ale moje pytanie brzmi: w jaki sposób jest konwertowany i dlaczego normalna mapa jest niebieska i fioletowa?

Odpowiedzi:


12

Ponieważ normalna mapa obejmuje wektory od -1 do 1, sensowne jest rozciągnięcie tego zakresu na 0-> 1, aby wszystko mieściło się w zakresie RGB.

Dlatego zwykle stosujemy transformację normalnie, aby przekształcić ją w coś, co możemy zobaczyć.

vec3 colour = vec3(0.5) + normal * 0.5;

Kolor niebieski wynika z tego, że normalne mapy mają być używane względem pierwotnej (trójkąt / etc) normalnej z domyślnym kierunkiem (0,0,1), aby wskazać brak odchylenia od normalnej trójkąta. Zwykle moduł cieniujący fragmentów musi obracać tę normalną w stosunku do bieżącej normalnej na piksel w czasie wykonywania.


Czy ten kod vec3 colour = vec3(0.5) + normal * 0.5;konwertuje RGB na XYZ?
Abhinay Singh Negi

1
@AbhinaySInghNegi nie, kolor to RGB, a normalny to XYZ, więc konwertuje XYZ na RGB. Jeśli chcesz RGB na XYZ, użyjvec3 normal = (colour - vec3(0.5)) * 2.0;
bram0101

20

Tylko normalne mapy przestrzeni stycznej są głównie niebieskie. Wynika to z faktu, że kolor niebieski reprezentuje normę (0,0,1), która byłaby niezmienioną normą, gdy trójkąt leży w płaszczyźnie xiy, tj. Prostopadle do powierzchni. Styczna, x i styczna podwójna, y (określana również jako b-normalna) są kodowane w kanałach czerwonym i zielonym i tworzą one przestrzeń normalną dla stycznej do punktu na powierzchni trójkąta.

Jeśli mapa normalnej przestrzeni stycznej miałaby kodować kolor tylko na czerwono (1,0, 0,0, 0,0), wygenerowałoby to normalną przestrzeń stycznej równoległą do powierzchni trójkąta. Nigdy nie jest to widoczne, ponieważ oznaczałoby to, że trójkąt byłby kiedykolwiek oświetlony tylko w 90 stopniach od powierzchni i wektora widoku, w którym to momencie i tak nie byłbyś w stanie zobaczyć trójkąta.

Normalne mapy przestrzeni kosmicznej kodują normalną jednostkę na kuli, więc mogą być przede wszystkim różnymi kolorami po kodowaniu od [-1, 1] do [0, 1] na kanał.

Porównanie można zobaczyć tutaj:

wprowadź opis zdjęcia tutaj

W praktyce normalne mapy są zwykle kodowane w formacie 2-kanałowym, takim jak BC5, który faktycznie przechowuje tylko xiy przy rekonstrukcji z, ponieważ wiemy, że jest to wektor jednostkowy. Pozwala to zachować wyższą precyzję przy większej liczbie bitów bez zwiększania rozmiaru pliku.


Przestrzenie styczne nie są jednoznacznie sparametryzowane, ale widzę wokół siebie dużo obrazów siatki i normalnej mapy w przestrzeni stycznej. Czy istnieje konwencjonalny sposób definiowania podstawy przestrzeni stycznej?
Alec Jacobson
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.