Dlaczego mapy nierówności, normalności i przemieszczenia nie powinny być korygowane gamma?

9

Staram się więc to obejść z dość technicznego punktu widzenia.

Gdy dodasz do swojego modułu cieniującego mapę Uderzenie, Normalną lub Przemieszczenie, nie powinny one być korygowane gamma. Ale powinny być rozproszone tekstury. Ale dlaczego?

Gdy zapisujesz plik w 8-bitowej (lub 16-bitowej liczbie całkowitej) w formacie JPEG, PNG lub TIFF, wypalają one gamma 0,4545 (1 / 2,2). Kamera przechwytuje światło z realnego świata (to jest liniowe) a podczas zapisywania zdjęcia w formacie JPEG dodawana jest wartość gamma 1 / 2.2, jako sposób na kompresję informacji do 8-bitów, a następnie podczas oglądania obrazu na monitorze, który dodaje gamma 2,2, dzięki czemu luminancja znów jest liniowa.

Tak więc, gdy używasz rozproszonych tekstur (takich jak zdjęcia), musisz „usunąć” tę gamma 1 / 2.2, aby uczynić ją liniową (zwaną linearyzacją), więc teraz tekstura wygląda ciemniej, ale wartości te są poprawne z matematycznego punktu widzenia, więc renderer będzie dokonać poprawnych obliczeń. Uwaga dodatkowa: oprogramowanie zastosowało współczynnik gamma wyświetlacza 2,2, aby upewnić się, że tekstury wyglądają poprawnie, tylko dla wewnętrznych obliczeń, że są one zlinearyzowane. Ale kiedy tworzę mapę wypukłości w Photoshopie i zapisuję ją jako JPG lub PNG, wówczas gamma 1 / 2.2 jest również wypalana na tym obrazie, więc dlaczego ta mapa wypukłości również nie musi zostać zlinearyzowana?

Jeśli załaduję mapę wypukłości w 3ds Max z gamma wejściową wynoszącą 2,2, tak jak w przypadku tekstury rozproszonej, rozproszenie wygląda dobrze, ale wypukłość wygląda źle, więc muszę ustawić gamma wejściową na 1,0 dla wypukłości, aby aby wyglądało to dobrze, ale jak powiedziałem: dlaczego oba pliki obrazów mają wypaloną gamma 1 / 2.2, prawda?

Kristoffer Helander
źródło

Odpowiedzi:

5

To, że zdjęcie jest przechowywane w przestrzeni gamma, nie ma związku z PNG ani JPEG, lecz z faktem, że jest to zdjęcie.

Aparat wykrywa intensywność 50%, ale zapisze ją jako 187 zamiast 127, ponieważ jest to bardziej efektywne, aby zachować informacje o kolorze, które są ważne dla ludzkiego oka, gdy masz tylko 256 różnych możliwych wartości. Podobnie robi Photoshop, jeśli tak mówisz.

W przypadku map normalnych lub przemieszczeń nie ma takiej potrzeby, więc nie ma powodu, aby używać dla nich przestrzeni gamma (użycie dla nich gamma byłoby w rzeczywistości błędem, ponieważ wpłynęłoby to na rozkład precyzji). Dlatego podczas dekodowania zwykłej tekstury lub tekstury przemieszczenia nie trzeba stosować gamma.

Jeśli jednak normalna mapa jest zakodowana w innym miejscu, jak może to mieć miejsce na przykład w buforze G , musisz zastosować odpowiednią poprawkę.

Julien Guertault
źródło
Jak powiedzieć Photoshopowi, aby zapisał obraz z wypaloną gammą, jak powiedziałeś powyżej: „Podobnie jak Photoshop, jeśli tak powiesz”.
Kristoffer Helander,
To wcale nie wyjaśnia „dlaczego”. To po prostu przypomina „co”.
user1118321,
@ user1118321: Wierzę, że tak. Położyłem nacisk na próbę uczynienia go bardziej zrozumiałym.
Julien Guertault,
Cóż, to prawda, ale tak naprawdę nie wyjaśnia dlaczego. Przyznaję, że mam ten sam problem, wspomnę tylko o braku korzyści lub szkód wyrządzonych przez taką kompresję. Nie ma potrzeby, ale dlaczego dane obrazów są specyficzne ze względu na ludzkie zmysły, podczas gdy nasze rozumowanie przestrzenne ma bardziej liniowy charakter (jeśli chodzi o aplikację 3D)
joojaa
3

JPG, PNG lub jakiekolwiek inne 8-bitowe formaty obrazów nie są ze sobą powiązane z gamma 1 / 2.2. Po prostu przechowują wartości od 0-255. Sposób interpretacji tych danych zależy od oprogramowania, które odczytuje i zapisuje te pliki. Ciekawostką jest to, że większość programów do edycji obrazów domyślnie korzysta z przestrzeni kolorów gamma. Wszystkie pędzle, efekty, filtry, a nawet próbnik kolorów działają w przestrzeni gamma. Wystarczy spojrzeć na odcienie szarości na próbniku kolorów w Photoshopie. Nie są zgodne z rozkładem liniowym.

Konsekwencją jest to, że Photoshop nie dokonuje konwersji między gamma a liniową przestrzenią kolorów podczas otwierania lub zapisywania obrazu (domyślnie), tylko podczas jego wyświetlania. Oznacza to, że możesz równie łatwo używać go do tworzenia lub edycji danych liniowych, takich jak mapa wysokości, jak możesz edytować zdjęcia. Mapa wypukłości nie wygląda poprawnie po załadowaniu z korekcją gamma, ponieważ nie została z nią zapisana.

Quinchilion
źródło
Oto wideo na YouTube, wyjaśniające również, że przechowywana wartość na obrazie to 1 / 2.2 (ale upraszcza ją i po prostu mówi, że jest to pierwiastek kwadratowy, jest to zastrzeżenie w tekście.) Kolor komputera jest zepsuty - link
Kristoffer Helander,
@KristofferHelander Tak, ale mówi, że tylko kamera przechowuje wartości jako pierwiastki kwadratowe i tylko ekran, który je kwadratuje. Oprogramowanie do edycji obrazu, takie jak Photoshop, po prostu otwórz i zapisz obraz bez konwersji, co spowoduje powstanie artefaktów pokazanych na filmie podczas próby mieszania kolorów.
Quinchilion
Popraw mnie, jeśli się mylę. Kiedy rysuję w Photoshopie rampę gradientu, która wygląda mi liniowo na ekranie, wartości w tej rampie są w rzeczywistości liniowe. Ale Photoshop dodaje gamma oglądania 1 / 2.2, ponieważ monitor dodaje gamma 2.2, więc wartości pikseli na obrazie są liniowe, a także wyglądają liniowo. Ale ta gamma 1 / 2.2 jest tylko gamma wyświetlającą, której Photoshop używa do wyświetlania obrazu, nie jest ona wypalana na obrazie, a zatem w oprogramowaniu 3D nie trzeba wykonywać korekcji gamma obrazu (użyj gamma 1.0), ponieważ wartości są już liniowe?
Kristoffer Helander,
@KristofferHelander goo.gl/yqkeUP Dolny gradient przedstawia jasność fizyczną. Jeśli Photoshop zastosuje współczynnik gamma 1 / 2.2 do rysowania gradientu lub wyświetlania obrazu, zobaczysz dolny gradient. Zamiast tego widzisz górną, która przypadkowo wydaje się liniowa, ale nie jest. Nie działałby również do przeglądania zdjęć. Aparat zastosował wartość 1 / 2.2 podczas zapisywania zdjęcia, a następnie Photoshop zastosuje kolejną wartość 1 / 2.2, ale wyświetlacz doda tylko raz gamma wynoszącą 2,2. To nie wyglądałoby dobrze.
Quinchilion
Jeśli wypełnię dokument w Photoshopie w połowie czerwoną stroną (255,0,0), a drugą połowę zieloną (0,255,0), a następnie użyję rozmycia gaussowskiego, powstały gradient stanie się brązowawy, a nie żółty w środku, jak pokazano w tym filmie, który opublikowałem. Dlaczego? Jeśli piksele na obrazie są liniowe, dlaczego matematyka się psuje? Nie rozumiem, w jaki sposób mapa przemieszczenia pomalowana w Photoshopie jest liniowa i dobrze nadaje się do renderowania, ale jednocześnie rozmycie pikseli jest pomieszane z niewłaściwą gamma, a kolory stają się ciemne i brązowawe?
Kristoffer Helander
3

Wprowadzenie

To zależy od sposobu tworzenia mapy! Zanim przejdziesz dalej, rozważ następujące kwestie i pozwól mu się zatopić:

  1. Obraz jest wyświetlany z korekcją gamma dla korzyści twoich oczu
  2. Dane to nadal tylko dane. Korekcja gamma dotyczy części wyświetlacza, a nie części danych.

Teraz mapa wypukłości jest dość trudna do narysowania za pomocą aplikacji do malowania. Ponieważ trudno go zobaczyć, nawet jeśli byłeś poprawnie liniowy. W rezultacie używasz takich rzeczy, jak patrzenie na wartości. Teraz jest haczyk:

  • Jeśli zdecydujesz, że 128 jest w połowie intensywności, to jest to rzeczywistość. Ponieważ to właśnie kodujesz w strumieniu danych. Dane są tym, czym je interpretujesz, ponieważ nie są przeznaczone dla ludzkich oczu i monitora. Kogo obchodzi, w jaki sposób monitor pokazuje wartości jako sposób interpretacji danych, w których są edytowane.

Wykonanie mapy nierówności / przemieszczeń

Ok, więc teraz opisałem, że dane można interpretować. Ale dlaczego miałbyś interpretować dane jako liniowe? Ponieważ wtedy możesz lepiej zaprojektować swój profil boczny. Zobacz, co możesz zrobić, to pomyśleć o 100% kryciu pędzla jako docelowej wysokości, którą chcesz wyrzeźbić lub nałożyć na warstwę. Następnie możesz użyć narzędzia krzywe do zaprojektowania kształtu pędzla stempla (ponieważ uważasz, że dane są liniowe).

wprowadź opis zdjęcia tutaj

Zdjęcie 1 : Pieczęć przyssawki.

Teraz, jeśli zrobisz coś takiego, twój obraz będzie liniowy, pomimo tego, co wszyscy ci mówią. Zdecydowałeś się odrzucić reguły dotyczące obrazów, które mówią inaczej. I dlatego obraz jest liniowy , autor wybiera liniowość, aby łatwiej było z nim pracować.

wprowadź opis zdjęcia tutaj

Obraz 2 : Ten sam obraz został przesunięty i zinterpretowany liniowo (uwaga: trochę skalowałem wysokość, aby dopasować do mojego domyślnego rozmiaru bb), działając zgodnie z przeznaczeniem.

Technicznie liniowy jest lepszy.

Mapa syntetyczna nie przynosi korzyści w postaci kompresji niektórych wartości kosztem innych. Liniowy jest z natury lepszy, ponieważ w ten sposób rozprzestrzenianie się guza jest lepsze. Dlatego marnowałbyś zasoby, kodując je w sposób poprawiony gamma.

Po drugie, obraz nie musi określać, w jakiej przestrzeni kolorów jest. Po prostu edytory obrazów przyjmą, że jest zakodowany w sRGB. Nie masz powodu, aby dokonywać takiej samej interpretacji, brak informacji oznacza po prostu: „Nikt nie zadał sobie trudu, aby zapisać to, co myśleli”. Więc może należy wskazać, że powinieneś oznaczyć go liniowo. Ale oto rub ... twój komputer nie ma łatwo dostępnego profilu liniowego.

Co z Photoshopem i rozmyciem?

To jest trudne. Photoshop stara się wykonać sporo pracy, aby upewnić się, że nie musisz nic wiedzieć o tych rzeczach. I tu strzelasz sobie w stopę. Se Photoshop nie jest przeznaczony do tworzenia tekstur, służy do edycji obrazów, a nie losowych danych. Ponieważ rozmycie na obrazie jest inne liniowe i nieliniowe, nie będzie działać w oparciu o nieprawidłowe dane.

Ale możesz zrobić jedną z 2 rzeczy, aby to naprawić:

  1. Wyłącz korekcję gamma rozmycia
  2. ustaw przestrzeń roboczą na profil liniowy

Wniosek

Powodem, dla którego masz z tym problem, jest

  1. Nie wiesz, co myślą inni ludzie, po prostu nie wiesz, czy należy je poprawić, czy nie.
  2. że używasz aplikacji, która traktuje obrazy jako obrazy

Punkt pierwszy jest szczególnie mylący. Wiem tylko, że WSZYSTKIE moje mapy wypukłości i przemieszczeń są w rzeczywistości liniowe. Ale nie wiem, jakie są twoje mapy. Szanse są liniowe, ponieważ prawie powszechnie rozumie się, że dane są liniowe. Nawet ludzie, którzy nie wiedzą o gamma, z jakiegoś powodu robią to liniowo w przypadku nierówności / przemieszczenia (ponieważ jest to łatwe i takie są twoje obrazy, dopóki ktoś nie powie inaczej).

joojaa
źródło
Dziękujemy za wkład - wow! :) Zajmę się tym, kiedy będę mieć więcej wolnego czasu. Wrócę do ciebie, dzięki!
Kristoffer Helander
Even people who do not know about gamma tend to do it linear for bump/displacement for some reasonPrawdopodobnie dlatego, że te mapy są generowane.
Tara,
3

W rzeczywistości, jeśli twoja mapa wypukłości lub przemieszczenia została zapisana z tą korekcją gamma 0,45, to jest źle. Mapy te zawierają informacje geometryczne, a nie kolor, i jako takie powinny być po prostu zakodowane liniowo.

W przypadku pokrewnego problemu i poprawki dla Adobe Photoshop zobacz ten slajd: https://docs.google.com/presentation/d/1vS5nAAnXbZ8Pt6-dXxy-xEXDkjfjXTmNnthNGccorl0/edit#slide=id.g14b3e28660_0_8

IneQuation
źródło
Jest to szczególnie prawdziwe w przypadku normalnej mapy, jeśli spodziewasz się, że długość wektora będzie wynosić 1.
PaulHK