Dies ist eine Art Spin-off vom Neuer Retro-Computer im 8-Bit Style Thread. Ich habe für mich entschieden, den Themenbereich nur noch rein theoretisch/hypothetisch zu betrachten und keine Realisierung jedweder Art in Betracht zu ziehen. Wer aus dem Thread Inspirationen für eigene Hardware oder Emulatoren ziehen will, kann das gerne tun – für mich ist das Nachdenken und Diskutieren über das Thema der eigentlich Zweck – der Weg ist also das Ziel.
Ein Teilaspekt eines Retro- oder Home-Computers ist seine Farbdarstellung. Üblicherweise lief und läuft das über Farbpaletten, da für eine sog. Echtfarbdarstellung (8 Bit je Kanal) der Speicherplatz fehlt(e). Wenn man heutzutage einen Homecomputer im alten Stil (oder Spiele mit ähnlicher Anmutung) entwickeln will, ist neben dem Speicherplatz aber auch die spezifische Anmutung ein Grund dafür, auf eine reduzierte Farbpalette zu setzen. Da heutzutage nicht wirklich die Hardware die Einschränkungen vorgibt (bzw. man immer eine "Hardware" erfinden kann, die den Wünschen und Anforderungen entspricht), muss man sich Gedanken darüber machen, wie viele Farben denn die Palette enthalten soll – und natürlich im Anschluss, welche.
Typische Paletten aus den 80ern umfassen 8, 16, 64, 128, 256 oder sogar 4096 Farben. Bei 8 Farben war es üblich, neben schwarz und weiß, einfach rot, grün und blau (RGB) und deren Komplementär-Farben (cyan, gelb und magenta) zu wählen. Schon waren 8 (recht knallige) Farb-Plätze belegt. Bei 16 Farben wurde man dann teils schon "kreativer". Bei CGA und dem ZX Spectrum hat man einfach die ersten 8 Farben in dunkler wiederholt (Sonderbehandlung für manche Farben), beim C64 wurden die zusätzlichen Farben wahrscheinlich eher nach Wirkung, Nützlichkeit und Geschmack ausgewählt.
Bei mehr als 16 Farben wurden sie grundsätzlich mathematisch generiert und nicht manuell ausgewählt. Dafür kamen entweder die TV-Farbräume von NTSC und PAL (vereinfacht gesagt: YUV) in Betracht oder (später) RGB. Beliebt war es, eine Grundpalette von 16 Farben in 8 Helligkeits-Stufen durchzugehen, so z.B. beim Commodore C16 (TED) und beim Atari VCS.
Das sind beim TED schön viele Farben (16 x 8 = 128 (- 7 x schwarz)), allerdings ist hier meiner Meinung nach viel Potential verschenkt worden, da (neben 8 Schwarztönen) viele Farben (z.B. im mittleren Grün- und dunklen Blau-Bereich) kaum unterscheidbar sind. Andere Farben können beim Pixeln trotzdem noch fehlen (ich könnte mir das im Braun-Bereich vorstellen). Klar, bei so vielen Farben muss man sie berechnen und kann sie nicht mehr per Hand und Auge "picken". Aber hier hat man das Gefühl, dass 2/3 der Farben nutzlos sind und es zudem fehlende Farben gibt (und das bei 121 Farben). Natürlich kann so eine Palette mehr als die 16-Farben-Palette des C64 – aber sie "unterperformt" gegenüber den theoretischen Möglichkeiten.
Ein weiteres Manko solcher Paletten: Im Bereich von geringer Sättigung, also bei den hellsten und dunkelsten Farbtönen (nah bei weiß und schwarz) kann unser Auge Farben nur schlecht auseinanderhalten, während das im hochgesättigten Bereich relativ einfach ist. Diese Paletten verteilen aber die Farben gleichmäßig, egal wie gesättigt sie sind. Im ganz hellen und dunklen Bereich würden aber weniger Farben ausreichen – die Farb-Plätze könnte man an anderer Stelle besser nutzen.
Und eine letzte Schwachstelle: Man findet hier keine Farben zu gut gesättigten, die weniger gesättigt – aber nicht heller oder dunkler – sind.
Ich weiß natürlich, dass es damals technische Beschränkungen gab und man Farben (beim C64, Apple II oder VCS) nicht einfach mal ganz locker aus der sRGB-Palette aussuchen konnte, sondern teils analog erzeugen musste. Aber ich will ja auch gar nicht unsere Altvorderen dissen, sondern mir Gedanken machen, wie man es HEUTE anders und besser machen könnte. Wir haben heute andere Möglichkeiten – und wenn man heute eine Palette zusammenstellen will, sollte man die meines Erachtens nutzen, um keine Farben zu verschenken und sie möglichst gut im darstellbaren Farbraum zu verteilen.
Was ist nun gedanklicher Ansatz, den ich hier zeigen und diskutieren möchte?
Ich stelle mir vor, dass man in einem Farbraum die Farben dreidimensional "auswählt" (nach Vorgaben berechnen lässt). Das kann man natürlich im RGB-Farbraum tun (und wurde auch schon getan, z.B. beim Amstrad CPC oder 64/256-Farb-Paletten) oder man wählt einen Farbraum, der nach menschlichen Farbseh-Fähigkeiten gewichtet ist – das wäre dann (vereinfacht gesagt) Lab (auch L*a*b* oder CIELAB). Der Vorteil bei Lab ist, dass man bei Farben mit gleichen Abstand diesen auch gleich weit empfindet. Bei RGB ist es so, dass z.B. im Grünbereich viele Farben vom menschlichen Auge gar nicht unterschieden werden können, während es bei gleichem Abstand in anderen Farbbereichen möglich ist. Und mir geht es ja darum, mit einer möglichst kleinen Palette möglichst viele Anwendungs-Szenarien abzudecken und nicht doch wieder 5 Töne in der Palette mit Farben zu verschwenden, die niemand wirklich benötigt bzw. kaum unterschieden kann. Je kleiner die Palette ist, desto wichtiger kann dieser Punkt sein.
Der Lab-Farbraum deckt "alle" Farben ab und ist damit automatisch größer als jeder geräteabhängige Farbraum (wie z.B. sRGB). Er wird üblicherweise für jegliche Farb-Umwandlungen von einem Farbraum in einen anderen als Zwischenstation verwendet, z.B. wenn ein Betriebssystem oder eine Software von sRGB in CMYK oder Adobe RGB umrechnen will. Lab arbeitet mit dem Gegenfarben-Modell, es gibt also zwei Farbachsen: Rot-grün und Blau-gelb. Die Dritte Achse definiert die Helligkeit zwischen weiß und schwarz. Idealisiert bildet der Raum eine art Kugel.
Aber wie suche ich nun eine bestimmte Anzahl von Farben darin aus? Zum einen möchte ich am Ende Farben haben, die auf (vielen guten) Sichtgeräten darstellbar sind. Da hat man sich ja als Referenz-Standard vor Jahren schon auf sRGB eingeschossen. Viele moderne Monitore und TVs können sRGB (zumindest annähernd) vollständig darstellen. Also würde ich als Basis für Berechnungen im Lab-Farbraum eine kleinere "Kugel-Schicht" wählen, die vollständig innerhalb des sRGB-Farbraums liegt. Und innerhalb dieses Raums sollte man dann versuchen, möglichst "gleichmäßig" eine gewünschte Anzahl von Farben zu definieren. Mein aktueller Ansatz sieht folgendermaßen aus:
Der hier gezeigte Raum ist ein Lab-Unterfarbraum, der innerhalb der sRGB-Möglichkeiten liegt. Die Nord-Süd-Achse deckt alle Helligkeiten ab und je näher man der Achse kommt, desto weniger Sättigung ist vorhanden. Direkt auf der Achse liegen die Grau-Töne. Ich zeige hier auf der "Nordhalbkugel" eine Möglichkeit, wie man 32 Farben "auswählen" könnte (die schwarzen, runden Punkte zeigen Farben, die Rauten Grautöne an). Jede Halbkugel teile ich in 4 "Schichten" ein (8 für die ganze Kugel), wobei die Extrem-Schichten im Norden und Süden jeweils nur eine Farbe enthalten (Schwarz und weiß). Die weiteren Schichten enthalten unterschiedlich viele Farben in 1 bis 2 "Umlaufbahnen". In der Nähe der "kräftigen Farben" liegen sehr viele Farbpunkte, bei den weniger gesättigten weniger (da ohnehin vom menschlichen Auge schlechter unterscheidbar). Die jeweiligen Anzahlen sind der Grafik zu entnehmen. Auf der Südhalbkugel würde man genauso verfahren, sodass am Ende 64 Farben herauskämen.
Mit der Anzahl der Schichten, Kreise und Punkte je Kreis habe ich natürlich versucht, auf Computer-typische Werte zu kommen. Insgesamt sind es hier 64 Farben in 8 Helligkeitsstufen und mit 8 Grautönen (inkl. schwarz und weiß). Auf dem Äußeren Kreis mit dem größten Durchmesser liegen 8 Farben im 45°-Abstand, zu den Extremen hin werden es immer weniger.
Wenn man jetzt experimentieren wollte, was die Verteilung (Schichten-Zahl, Abstände, Anzahl der Kreise je Schicht und Anzahl der Punkte je Kreis) und die Anzahl der Ziel-Farben angeht, müsste man das ganze natürlich "in Software gießen" und sich dann mit unterschiedlichen Parametern Ergebnis-Paletten ausspucken lassen. Wenn jemand Spaß daran haben sollte, fände ich das natürlich klasse.
Das Ganze ist, wie gesagt, erstmal nur eine Theorie. Sollte sie wirklich zielführend sein, könnte man damit unterschiedlich große Paletten berechnen lassen und diese für zukünftige Retro-Computer (eine Commander X16-Alternative oder was auch immer) oder Pixel-Spiele/Engines im Retro-Style einsetzen.