możesz pójść o krok dalej: renderuj obraz tak, jak uchwyciłby go ludzkie oko, a nawet człowiek.
Istnieją dwa sposoby interpretacji tego. Zrobię oba.
Interpretacja 1: Renderuj obraz, który wygląda percepcyjnie realistycznie.
Pod koniec dnia twój obraz nadal musi gdzieś zostać wyświetlony . Oto klucz: chcesz wyrenderować swój obraz w taki sposób, że gdy * wyświetlisz * ten obraz na konkretnym urządzeniu wyświetlającym, będzie on wytwarzał takie samo wrażenie, jak oryginalny obraz radiometryczny.
Oto jak rozpakować ten pomysł.
W prawdziwym świecie widma radiometryczne (tj. Rzeczywiste rozkłady światła) dostają się do oka i stymulują około 1 cztery receptory światła. Pobudzenie receptorów wywołuje wrażenie koloru, które kojarzymy z obrazami.
Podczas renderowania nie mamy arbitralnej kontroli nad produkowanymi przez nas widmami. Na szczęście, ponieważ (zwykle) mamy tylko trzy stożki, z których każdy wytwarza tylko wartość skalarną, widzenie kolorów można odtworzyć przy użyciu dokładnie trzech kolorów podstawowych. Najważniejsze jest to, że możesz wywołać dowolne wrażenie koloru, używając liniowej kombinacji tylko trzech długości fali (do kilku kolorów, które mogą być ujemne, w takim przypadku po prostu używasz różnych kolorów podstawowych).
Nie masz wyboru podstawowych. Prawie wszystkie kolorowe urządzenia wyświetlające używają standardu sRGB, który zapewnia trzy podstawowe (które zwykle nie mają jednej długości fali). W porządku, bo okazuje się, że wszystko jest abstrakcyjne i nie musisz się tym przejmować.
Aby wyjaśnić bałagan, który jest percepcyjnie dokładnym renderowaniem, oto algorytm:
- Renderuj obraz przy użyciu poprawnych obliczeń radiometrycznych. Śledzisz poszczególne długości fali światła lub wiązki długości fal. Cokolwiek. Na koniec masz obraz, który reprezentuje widmo odebrane w każdym punkcie.
- Przy każdym pikselu bierzesz renderowane widmo i konwertujesz je do przestrzeni kolorów CIE XYZ . Działa to jako integracja iloczynu widma ze standardowymi funkcjami obserwatora (patrz definicja CIE XYZ) .
- To daje trzy wartości skalarne, którymi są kolory CIE XYZ.
- Użyj transformacji macierzowej, aby przekonwertować to na liniowy RGB, a następnie użyj transformacji liniowej / mocy, aby przekonwertować liniowy RGB na sRGB .
- Konwertuj z zmiennoprzecinkowego na uint8 i zapisuj, blokując wartości poza zakresem (monitor nie może ich reprezentować).
- Wyślij piksele uint8 do bufora ramki.
- Wyświetlacz przyjmuje kolory sRGB, dokonuje odwrotnej transformacji, aby uzyskać trzy podstawowe wartości o szczególnej intensywności. Każdy skaluje wyjście dowolnego elementu obrazu, za który jest odpowiedzialny. Elementy obrazu świecą, tworząc spektrum. To spektrum będzie (mam nadzieję) metamerem dla pierwotnego renderowanego spektrum.
- Widmo postrzegasz tak, jak widmo renderowane.
Interpretacja 2: Próba symulacji danych końcowych, które ludzkie oko może otrzymać do celów wizualizacji lub kompensacji za wyświetlacze LDR.
Ten, jak sądzę, ma mniej użyteczne znaczenie. Zasadniczo próbujesz stworzyć obraz, który poprawia sposób postrzegania go przez mózg dla zabawy / zysku.
Na przykład w tym roku na SIGGRAPH był artykuł, w którym symulowano powidoki i redukcję kolorów, aby obrazy wyglądały inaczej percepcyjnie. Oczywiście jedynym powodem, dla którego to robią, jest to, że wszystkie wyświetlacze, z którymi pracujemy, to zakres niskiej dynamiki (LDR). Chodzi o to, aby zasymulować efekty, które ktoś może zobaczyć, gdy zostanie wystawiony na rzeczywisty obraz o wysokiej dynamice (HDR) jako rzeczywiste dane obrazu.
W praktyce okazuje się, że nie działa to zbyt dobrze. Na przykład powidoki widzimy powidoki z powodu bardzo jasnego bodźca wyczerpującego kolorowe komórki. Jeśli zamiast tego spróbujesz stymulować efekt za pomocą fałszywego powidoku, może to wyglądać podobnie - ale ponieważ jest to zupełnie inny mechanizm, nie jest zbyt przekonujący.
Tego rodzaju grafika jest w literaturze niedoświadczona, jeśli chcesz spróbować. Wspomniany artykuł jest przykładem mniej więcej najnowocześniejszego podejścia, jakie mamy. Myślę jednak, że obecny konsensus jest taki, że naprawdę nie warto próbować symulować (przynajmniej w tym momencie), ponieważ w najlepszym razie zbliżasz się do rzeczywistych efektów widzenia, zastępując różne, i że to nie jest tak naprawdę praca.
1 pręt + 3 * stożki, zwykły przypadek. Przybliżone, ponieważ ludzie mogą mieć zaledwie zerowe funkcjonalne receptory światła aż do domniemanych maksimum siedmiu (przy czym najwyższa kiedykolwiek zaobserwowana to pięć).