Ponieważ temat kolorów w emulatorze Atari powraca jak bumerang
(pisałem o tym także
tutaj), a początkujący użytkownicy emulatora wciąż zdają się
być zdumieni faktem, że nie odzwierciedla on kolorów uzyskiwanych
na prawdziwym sprzęcie, postanowiłem zaprezentować wszystkie
posiadane przeze mnie palety i garść informacji na ich temat.
Po pierwsze i najważniejsze - nie ma czegoś takiego jak wzorcowa
paleta kolorów Atari. Nasz 8-bitowiec powstał w czasach, gdy
komputer domowy nie był wykorzystywany do prac poligraficznych,
profesjonalnego druku, nie wykorzystywali go do pracy zawodowi
graficy czy twórcy filmów. Dlatego projektanci Atari, jak zresztą i
innych komputerów domowych, nie musieli się zbytnio przejmować, w
jaki sposób maszynka odwzorowuje barwy. Swoje zrobiły też
modyfikacje i rozwój sprzętu - od serii 400/800, przez XL, aż do XE
- stosowane były różne elementy odpowiedzialne za wyświetlanie
grafiki (np. CTIA, a potem GTIA), różne sposoby podłączania ekranu
(np. luma chroma, composite chroma). W efekcie obraz może się
kolorystycznie różnić (i najczęściej się różni) na przykład na
modelu 800XL i 65XE.
Dochodzi do tego analogowość sygnału oraz odbiornika
(monitora/telewizora), który może przecież być regulowany: jasność,
kontrast, nasycenie kolorów - to wszystko ma wpływ na to, co
widzimy na ekranie. No i jeszcze system, w którym działa telewizor
- PAL czy NTSC...
Dlatego poszukiwania idealnej palety, która pasowałaby do każdej
sytuacji jest z góry skazane na porażkę - bo jedna będzie bardziej
zgodna z serią XL, inna z serią XE, a jeszcze inna... z konkretnym
modelem Atari, który ty posiadasz. Albo z twoimi ustawieniami
monitora. I tak właśnie wygląda świat emulatorów Atari - mamy do
dyspozycji wiele różnych palet, ponieważ każdemu z ich autorów
wydaje się, że jego jest najlepsza, najwierniej oddaje
rzeczywistość.
Na podstawie doświadczeń mogę jednak stwierdzić, że mimo, że żadna
paleta nie jest idealna, to są jednak gorsze i lepsze palety. Jedną
z lepszych wydaje się być paleta laoo.act. Jej autor, kolega
Waldek "Laoo" Pawlaszek poszedł drogą "zmierzenia" kolorów
swojego Atari. Napisał program testowy Paletka.xex, który generuje
barwne paski na Atari, potem wykonał zrzut z tunera telewizyjnego
na swoim pececie i dobrał odpowiednie kolory RGB. Tak to wyglądało
na tunerze (pomniejszyłem na potrzeby serwisu, ale obrazek nie
został poddany kompresji, więc w miarę wiernie oddaje
oryginał):
No to teraz porównajmy z paletami RGB, stosowanymi na pececie.
Udało mi się uzbierać następujące palety (pliki ACT):
- Default.act (emulatora Atari800Win PLus)
- g2f.act (programu Graph2Font)
- Gray.act (odcienie szarości)
- Green.act (odcienie zielonego)
- Jakub.act
- laoo.act
- OlivierPAL.act (tylko dla systemu PAL)
- OlivierNTSC.act (tylko dla systemu NTSC)
- Real.act
- Xformer.act (emulatora X-Former)
Wszystkie pliki palet są w jednym
archiwum.
default.act
g2f.act
jakub.act
laoo.act
olivierPAL.act
real.act
xformer.act
green.act
grey.act
A tak wyglądają one bezpośrednim starciu zrzucone z programu
graficznego G2F:
default.act / xformer.act /
jakub.act
real.act / laoo.act / g2f.act
OlivierPAL/green.act / grey.act
W stosunku do tego co prezentowałem poprzednio doszła jedna paleta,
przygotowana przez kolegę
Pseudografx-a na podstawie
algorytmu
Oliviera Galiberta. Olivier opracował dwa
matematyczne modele zamiany kolorów na RGB - osobny dla systemu PAL
i NTSC:
PAL
void gtia_pal_to_rgb(u8 val, u8 *rr, u8 *gg, u8 *bb)
{
int cr = (val >> 4) & 15;
int lm = val & 15;
int crlv = cr ? 50 : 0;
double phase = ((cr-1)*25.7 - 15) * (2 * M_PI / 360);
double y = 255*(lm+1)/16;
double i = crlv*cos(phase);
double q = crlv*sin(phase);
double r = y + 0.956*i + 0.621*q;
double g = y - 0.272*i - 0.647*q;
double b = y - 1.107*i + 1.704*q;
*rr = clamp( r);
*gg = clamp(g);
*bb = clamp(b);
}
NTSC
void gtia_ntsc_to_rgb(u8 val, u8 *rr, u8 *gg, u8 *bb)
{
int cr = (val >> 4) & 15;
int lm = val & 15;
int crlv = cr ? 50 : 0;
double phase = ((cr-1)*25 - 58) * (2 * M_PI / 360);
double y = 255*(lm+1)/16;
double i = crlv*cos(phase);
double q = crlv*sin(phase);
double r = y + 0.956*i + 0.621*q;
double g = y - 0.272*i - 0.647*q;
double b = y - 1.107*i + 1.704*q;
*rr = clamp( r);
*gg = clamp(g);
*bb = clamp(b);
}
Jak widać na obrazkach powyżej, to co oglądamy na pececie odległe
jest od prawdziwego sprzętu, a już takie palety jak emulatora
X-Former oraz właśnie domyślna paleta emulatora Atari800Win PLus są
zupełnie do niczego. Tą ostatnią łatwo zmienić, o czym kolejny raz
przypominam:
- w menu „View” należy wybrać opcję „Palette...”
- w okienku „Palette Options”, widocznym poniżej, za pomocą
„Browse” wczytujemy zewnętrzną paletę
- włączamy ją przez odznaczenie opcji „Use external
palette”
- możemy też regulować nasycenie kolorów i poziom ich jasności
(„Adjustment”)
Także w programie
Graph2Font w menu „View” mamy opcję
„Palette...” i okienko identyczne jak w emulatorze. Również tutaj
można korzystać z tych samych plików z paletami. Ja polecam
laoo.act, OlivierPAL.act oraz g2f.act.
-----
Uzupełnienie z tego samego dnia: kolega
Zdenek "Pseudografx"
Eisenhammer przygotował też drugą wersję palety, na podstawie
algorytmu Oliviera dla NTSC. Jest już dostępna w zaktualizowanym
pliku
archiwum (ten
sam link co wyżej), podobnie jak program paletka.xex Laoo, która
generuje nam spectrum barw Atari oraz zrzut z tunera paletka.png. A
tak wygląda OlivierNTSC.act:
olivierNTSC.act