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?

Abhinay Singh Negi
źródło

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.

PaulHK
źródło
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.

Składnia_
źródło
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