PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warum mehr als 60000 Farben verwenden?


Funky Bob
2004-12-19, 19:40:39
Ich habe mich gefragt, warum mehr als 600000Farben nötig sind, oder einige meinen/wissen/glauben das 64Bit noch viel besser aussehen würde? Ich habe in Biologie gelernt, dass das menschliche Auge mit seinen Stäbchen und Zapfen ca. 600000 verschiedene Farbtöne erkennen kann.

Warum also mehr? 16,7Mio bei 24Bit sollten doch reichen oder (Nebenfrage: Warum liesst man überall 32Bit wären 16,7Mio Farben? 2^24 ergeben doch schon 16,7Mio, oder sind da noch keine Grautöne etc enthalten?). Ich könnte mir höchstens vorstellen, das mit 32Bit die Farben praktisch genauer berechnet wurden und stimmiger wirken, auch wenn man die Farbe an sich niht erkennen kann, oder?

Gast
2004-12-19, 20:25:49
computer arbeiten nun mal gerne mit "datenhäppchen" mit fixen größen, wie z.b. 1byte (8bit), oder 2byte (16bit), 4byte (32bit), usw. An die von dir genannten ~600000 farben kämen 2^19 = 524288 am nächsten, aber mit genau 19bit zu arbeiten wäre ziemlich seltsam und sogar ineffizienter als mit mit den obengenannten fixen datengrössen. Vor langer zeit als speicher und rechengeschwindigkeit noch ein riesiges problem waren, wurden auch farbmodi mit 1, 2 und 4bit genutzt. Aber alle berechnungen die ein computer macht (sei es um eine farbe zu bestimmen oder sonstwas) haben eine limitierte präzision, bei jeder operation geht also etwas verloren, und da kommt man mit weniger präzision (sprich weniger bits) schnell an die grenzen. heutzutage stellen 32 bit kein problem mehr dar und diese werden genutzt eben weil computer auf das arbeiten mit größen die 2er potenzen optimiert sind, und 32bit sind nunmal 4bytes (eine 2er potenz), im gegensatz zu 3bytes bei 24bit.

Der 32bit farbmodus hat tatsächlich nur ~16.7mio farben, weil nur 24bit davon für farbe genutzt werden; es werden aber trotzdem 32bit für jeden pixel genutzt, weil man die verbleibenden 8bit z.b. für einen alphakanal nutzen kann (ein transparenzwert für den pixel). Bei der endgültigen ausgabe auf den bildschirm, (wenn das fertige bild also schon im speicher liegt), werden die verbleibenden 8bit allerdings nicht mehr genutzt, da ein alphakanal hier keinen sinn mehr hat (es hätte keinen sinn dem bildschirm mitzuteilen, wie transparent ein pixel ist). Man muß allerdings den unterschied zwischen der präzision die zur berechnung von farbwerten, und die präzision welche das endgültige bild hat, beachten. Grafikkarten arbeiten intern schon seit jahren mit mehr als 32bit um farbwerte so präzise wie möglich errechnen zu können, aber das endgültige bild wird in einem format mit 32bit, von dem nur 24bit für farbe genutzt werden gespeichert (es gibt natürlich abweichungen hiervon, aber das ist jetzt nicht der sinn diese posts), und dieses format ist vorläufig für die meisten bereiche ausreichend. In der video/bildbearbeitung kann man aber schon an die grenzen dieser 24/32bit kommen, was sich dann in sichtbarem colorbanding äußert.

Gast
2004-12-19, 23:06:19
16 millionen farben hört sich zwar viel an, aber da das auge viel empfindlicher auf helligkeits unterschiede reagiert, kann es manchaml schon mal knapp werden.
ein reiner grauverlauf besteht z.b. bei 24bit nur aus 256 verschiedenen stufen (rgb alle jeweils gleiche farbwerte, also nur 2hoch8 verschiedene grauwerte)..
wenn man dann nur einen teilbereisch darstellt und das auf einer grossen flächen , dann kann man schonmal die einzelnen stufen erkennen..

Xmas
2004-12-20, 02:22:38
Ich habe mich gefragt, warum mehr als 600000Farben nötig sind, oder einige meinen/wissen/glauben das 64Bit noch viel besser aussehen würde? Ich habe in Biologie gelernt, dass das menschliche Auge mit seinen Stäbchen und Zapfen ca. 600000 verschiedene Farbtöne erkennen kann.

Warum also mehr? 16,7Mio bei 24Bit sollten doch reichen oder (Nebenfrage: Warum liesst man überall 32Bit wären 16,7Mio Farben? 2^24 ergeben doch schon 16,7Mio, oder sind da noch keine Grautöne etc enthalten?). Ich könnte mir höchstens vorstellen, das mit 32Bit die Farben praktisch genauer berechnet wurden und stimmiger wirken, auch wenn man die Farbe an sich niht erkennen kann, oder?
"32 Bit" setzen sich zusammen aus je 8 Bit für Rot, Grün, Blau und Alpha bzw. einem Füllbyte. Letzteres wird häufig nur verwendet, weil mit 32Bit pro Pixel die Adressierung einfacher ist. Wie der Gast vor mir schon sagte, bedeutet das bei einem Helligkeits-Verlauf eines bestimmten Farbtons gerade einmal 256 Schritte. Was noch erschwerend hinzukommt, ist dass häufig von einem linearen Farbraum ausgegangen wird. Das menschliche Auge nimmt in den dunklen Bereichen Helligkeitsunterschiede allerdings viel besser wahr als in hellen Bereichen.
Schon alleine deswegen sind mehr als 8 Bit pro Kanal und eine nichtlineare Speicherung der Farbinformationen (z.B. sRGB oder Floating Point) wünschenswert.

Ein weiterer Punkt ist, dass man ja nicht nur den finalen Framebuffer braucht, sondern auch Zwischenergebnisse der Farbberechnungen irgendwo ablegen will. Bei den meisten Rechenoperationen geht aber etwas Präzision verloren, deshalb sollte man eine höhere Präzision benutzen als zur finalen Ausgabe erforderlich ist.
Außerdem hat ein Monitor eine maximale Helligkeit. Bei 8 Bit pro Farbkanal bildet man nur einen Wertebereich von 0.0 (Schwarz) bis 1.0 (maximale Helligkeit des Monitors) ab. In der Realität ist Lichtintensität aber nach oben hin nicht limitiert. Selbiges muss für Berechnungen gelten, welche realitätsnahe Bilder erstellen sollen.

Aus diesen Gründen ist FP16 (pro Farbkanal) ein so interessantes Rendertarget-Format, leider eben von aktueller Hardware noch nicht vollständig orthogonal und performant unterstützt.