Czy wszystko da się wygooglować? Albo przynajmniej – czy będzie się dało za parę lat,
gdy sztuczna inteligencja będzie zdecydowanie bardziej rozwinięta niż ostatni czat GPT-4?
Niestety, okazuje się, że wobec niektórych pytań nawet wyszukiwarka Google okazuje się całkowicie bezradna.
Doświadczyłem tego ostatnio, chcąc się dowiedzieć, jakiego koloru nie pokażą nam ekrany komputerów.
Bo okazuje się, że ekrany nie wyświetlają wszystkich barw, które możemy zobaczyć ludzkim okiem, a tylko niektóre.
I to nie dlatego, że są źle robione, ale z pewnych głębszych, bardzo interesujących przyczyn. Ale zacznijmy opowieść od początku.
Jak zapewne większość Czytelników wie, barwy na ekranie komputerów, telewizorów, komórek i innych urządzeń
wyświetlane są w systemie RGB (od ang. Red, Green, Blue, czyli kolorów czerwonego, zielonego i niebieskiego).
Każdy piksel na ekranie ma dla każdej z trzech barw podaną intensywność w skali od 0 do 255.
Przykładowo trójka intensywności RGB to kolor czerwony, to niebieski, to żółty,
to czarny, a to ciemnoniebieski. Przyzwyczailiśmy się do myślenia, że każdy kolor można
reprezentować za pomocą trzech składowych: czerwonej, zielonej i niebieskiej, ale warto zadać sobie pytanie, skąd się to bierze.
Przecież światło widzialne składa się z fal o różnych częstotliwościach i na przykład fala o długości 580 nm, którą ludzkie oko odbiera jako
kolor żółty, nie jest w żadnym sensie sumą fal o częstotliwościach 650 nm (czerwony dla ludzkiego oka) i 550 nm (zielony dla ludzkiego oka).
A jednak kolor żółty reprezentujemy jako trójkę , czyli jako sumę kolorów zielonego i czerwonego. Dlaczego?
Zapewne doświadczeni Czytelnicy wiedzą lub domyślają się, że rozwiązanie zagadki tkwi w tym, jak nasze oczy odbierają kolory.
Mianowicie: w ludzkim oku, na siatkówce, znajdują się światłoczułe komórki zwane czopkami.
Większość ludzi ma trzy rodzaje czopków, wrażliwych na nieco różne długości fali. Czopki D (od: długofalowe) są najbardziej
wrażliwe na światło czerwone, czopki Ś (średniofalowe) są najbardziej wrażliwe na światło zielone, a czopki K (krótkofalowe) są
najbardziej wrażliwe na światło niebieskie. Nasz odbiór barwy światła zależy od tego, jak mocno pobudzone są czopki różnych rodzajów,
i tylko w ten sposób jesteśmy w stanie odróżniać jedne kolory od drugich. A więc rozważane przez nas dla przykładu światło barwy żółtej
pobudza mocno czopki typów D i Ś (czerwone i zielone), a mniej czopki typu K (niebieskie).
Wyświetlany przez monitor kolor również pobudza mocno czopki D i Ś, a słabo czopki K. Dlatego nasze oko widzi ten kolor
jako żółty, mimo że nie ma on nic wspólnego z monochromatycznym światłem żółtym.
Po tym wstępie wróćmy jednak do początkowego pytania:
czy monitory oparte na systemie RGB wyświetlają wszystkie kolory widoczne dla ludzkiego oka?
A raczej poprawniej byłoby zapytać: czy te monitory są w stanie zasymulować dowolną możliwą reakcję czopków naszego oka na
padające światło? Odpowiedź, jak już powiedzieliśmy na wstępie, brzmi: nie. Co więcej, każdy monitor działający na podobnej
zasadzie, to znaczy wyświetlający trzy lub dowolną inną liczbę podstawowych kolorów, będzie mieć tę samą wadę.
Żeby zrozumieć przyczynę tego zjawiska, przyjrzyjmy się dokładniej reakcjom naszego oka.
Każde światło jakoś pobudza trzy typy naszych czopków – powiedzmy, że światło o widmie powoduje sygnał od czopków czerwonych (D)
w nasileniu , od czopków zielonych (Ś) w nasileniu , a od czopków niebieskich (K) w nasileniu .
A więc całość reakcji na światło to trójwymiarowy wektor . Warto zadać pytanie: jak wygląda zbiór wszystkich
możliwych do uzyskania wektorów – reakcji na światło. Oznaczmy go przez (stożek reakcji), a zatem jest falą elektromagnetyczną. Przypomnijmy, że czopki D, Ś i K reagują nie tylko na światło czerwone, zielone i niebieskie, ale na wiele różnych częstotliwości światła, tylko w różnym natężeniu.
Czyli na przykład światło niebieskie pobudza wszystkie czopki, tyle że najbardziej niebieskie, a czerwone
i zielone mniej. Dlatego zbiór okazuje się mieć ciekawe geometryczne własności i nie jest po prostu zbiorem wszystkich możliwych
wektorów o nieujemnych wartościach .
Zauważmy najpierw, że zbiór spełnia dwie własności: (1) jeśli , , to również , oraz (2) jeśli , to również .
Istotnie, jeśli wektor jest reakcją na jakieś światło , to wektor będzie reakcją na światło , czyli światło o tym samym spektrum, tylko razy mocniejsze. Natomiast jeśli jest reakcją na światło , a jest reakcją na światło , to będzie reakcją na światło świecące razem ze światłem , czyli na światło .
To oznacza, że zbiór istotnie spełnia warunki (1) i (2) sformułowane powyżej, zbiory takie nazywamy stożkami. Żeby sobie wyobrazić, jak taki stożek może
wyglądać, przyjrzyjmy się zbiorowi , czyli trójkątowi rozpiętemu pomiędzy punktami ,
oraz . Każdy stożek ma tę własność, że jego przecięcie z trójkątem jest zbiorem wypukłym, bo jeśli ,
to również dla dowolnego . Co więcej, każdy zbiór wypukły zawarty w trójkącie
jednoznacznie wyznacza stożek: ten stożek to po prostu wektory ze zbioru pomnożone przez jakąś liczbę . A zatem
żeby wyobrażać sobie stożki, wystarczy patrzeć na ich przecięcia z trójkątem . Na rysunkach 1 i 2 przedstawione są dwa
przykłady stożków: i .
Stożki i różnią się od siebie fundamentalnie. Przecięcie stożka i trójkąta to czworokąt: jego wierzchołkami
są wektory . Natomiast przecięcie stożka i trójkąta to koło. Zauważmy, że każdy punkt stożka może być wygenerowany z wektorów poprzez aplikację reguł (1) oraz (2). Istotnie, możemy w ten sposób łatwo przedstawić każdy punkt we wnętrzu czworokąta jako średnią ważoną wektorów , a potem ten wektor dowolnie wydłużyć lub skrócić. W takiej sytuacji mówimy, że stożek jest skończenie generowany, bo da się go wygenerować za pomocą reguł (1) i (2) ze skończonej liczby wektorów. Można łatwo zauważyć, że stożek jest skończenie generowany wtedy i tylko wtedy, gdy jego przecięcie z trójkątem jest po prostu wielokątem. Wtedy jest on generowany przez wierzchołki tego wielokąta. Z drugiej strony, jeśli skończona liczba wektorów generuje stożek , to powstaje on jako otoczka wypukła punktów , która następnie zostaje przeskalowana (możemy skracać lub wydłużać wektory, używając reguły (1)). Czyli stożek nie jest skończenie generowany,
bo jego przecięcie z trójkątem to koło, a nie wielokąt. Intuicyjnie jest to jasne: żeby go wygenerować musielibyśmy użyć wszystkich wektorów na brzegu koła , a tych jest nieskończenie wiele.
Jaki ma to związek z wyświetlaniem barw przez monitor? Otóż okazuje się, że zbiór wszystkich możliwych reakcji oka ludzkiego na światło jest nieco zaokrąglony, a zatem nie jest skończenie generowany.
Jaki z tego wniosek? Ano taki, że nie możemy
go wygenerować ze skończenie wielu możliwych reakcji przez dodawanie i mnożenie. A przecież to dokładnie próbuje zrobić monitor.
Światło to kolor czerwony, wywołuje on jakiś wektor reakcji w naszych oczach. Światło zielone wywołuje jakiś inny wektor reakcji , a światło niebieskie jeszcze inny wektor reakcji . W związku z tym wszystkie możliwe reakcje, które monitor może wywołać w naszych oczach, to stożek generowany przez trzy elementy: wektory , oraz
(tak naprawdę jeszcze dodatkowo ograniczony, bo monitor ma tylko 256 różnych nasileń światła i nie może też świecić dowolnie mocno, ale to z naszej perspektywy nieistotne). W szczególności niektóre możliwe reakcje z nie dadzą się wywołać przez monitor. I to nie tylko taki, który ma trzy rodzaje pikseli, ale również taki, który miałby 10 albo 1000 rodzajów pikseli. Wciąż znajdą się jakieś reakcje na brzegu stożka reakcji , których nie da się wywołać przez sumowanie tych 1000 rodzajów pikseli!
Specjaliści od grafiki starają się radzić sobie z tym fenomenem, jak mogą. Tworzą w szczególności różne skończenie generowane możliwe stożki barw: sRGB, AdobeRGB, ProPhotoRGB i inne, które lepiej lub gorzej przybliżają .
Ale nigdy nie zrobią tego idealnie, bo jest to niemożliwe!
Na koniec zapytajmy: to jakich kolorów nie przedstawia dobrze monitor? Generalnie stożkowi sRGB brakuje wielu
kolorów na pograniczu niebieskiego i zielonego, przykładowo kolorów w okolicy cyjanowego. Tę sprawę polecam jednak badać na żywo,
bo nie wszystko da się dostrzec w świecie wirtualnym.