Jeszcze o kolorach by Kaz 2009-03-26 01:38:50

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):
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:



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
XaVeR 2009-03-26 07:03:38

Dzieki za podsumowanie. Dopiero to sklonilo mnie do przyjrzenia sie bardziej paletom barw atari. Faktycznie. Roznice widac dosc sporą.

sikor 2009-03-26 07:07:57

Dodam jeszcze, że praktycznie w każdej małej atarce, od spodu obudowy znajduje się malutka dziurka... Jest tam miejsce na śrubokręcik (cienki, płaski) i dostęp do potencjometra, którym ustawiamy kolory. Z autopsji pamiętam, że najlepsze efekty uzyskiwało się, gdy ustawiliśmy sobie soczysty błękitny kolor na głównym ekranie BASICA.
Jeszcze jedno: zmiany kolorów ustawiamy na włączonym Atari. Czasem lepiej ściągnąć obudowę i dostać się do potencjometru od środka - jest tylko jeden ;) I klawiaturę możemy odpiąć - do samej operacji nie jest nam potrzebna ;)

PG 2009-03-26 07:30:58

Just to complement your list, I have posted the NTSC version of Olivier's (btw. his first name is not Oliver) palette on AtariAge forums:
http://www.atariage.com/forums/index.php?showtopic=107853&st=40

zoltan 2009-03-26 07:48:02

Czy wam też emulator Atari800Win PLus 4.0 nie zapamiętuje, że jest zaznaczona opcja "Apply adjustment"? Znaczy - działa to zaraz po zaznaczeniu, ale po zamknięciu i ponownym odpaleniu emulatora kolory są takie same, jak bez "Apply adjustment", mimo że opcja jest nadal zaznaczona. Skutkuje dopiero odznaczenie i ponowne zaznaczenie opcji...

golem14 2009-03-26 08:50:47

No Kaz - ponownie doskonała robota! Warto czasami temat przypomnieć. Dodać trzeba jeszcze, iż Program Robbo Kreator Poklika ma od wersji 1.1 możliwość używania palet (szczegóły w wątku na Forum).

laoo 2009-03-26 09:30:13

To ja dodam, że jeśli ktoś chciał sprawdzić sobie paletę swojej atarki naocznie, to wspomniany program można znaleźć tu: http://pawlaszek.pl/paletka.xex (można by zresztą dodać go nawet do archiwum z paletami).

George 2009-03-26 10:04:29

Piękne zestawienie!
Oczywiście kolory to rzecz gustu - na przykład paleta barw laoo.act ma wąski przedział dla kolorów niebieskich przez co główny ekran Basica nie jest R=0,G=0,B=1 :)
To już nie Atari! ;)

Kaz 2009-03-26 12:09:12

Thanks Zdenek! I will fix the mistyping error and will put NTSC pallete into archiv file.
Laoo - twoj program dolaczylem tylko do emulatora Atari800Win, ktory jest do sciagniecia z linkow, ale zaraz tez zaktualizuje plik archiwum z paletami, bo to dobry pomysl.

Kaz 2009-03-26 12:27:52

Nowinka uzupełniona i poprawiona. Plik archiwum zawiera teraz dodatkowo OlivierNTSC.act oraz paletka.xex i paletka.png.

gedzior84 2009-03-26 16:44:14

Faktycznie, paletka Laoo, jest chyba najbardziej wiarygodna :) Na niej wszystko zdaje sie wygladac jak nalezy

0xF 2009-03-27 16:45:43

W Atari800 mamy program colors.xex (jak paletka, tylko z czarnymi ramkami) oraz act2html.pl, który grupuje te same barwy poszczególnych palet - dzięki temu można je lepiej porównać. Paleta laoo jest niestety za ciemna, a g2f jest praktycznie identyczna z jakub używaną domyślnie w Atari800 i niestety zbyt jasną. Default to paleta NTSC.

Kaz 2009-03-27 17:57:20

Dodam tylko, ze palete jakub.act stworzyl Jakub Bogusz.