Hello, Guest the thread was called703 times and contains 6 replays

last post from Mac Bacon at the

Wie sind bei dem Amiga Grafiken die Farbabstufungen?

  • In dem Amiga Spielen haben viele 16x16 Grafiken Farbabstufungen, also z.B. helles grün bis dunkles grün.


    Beispiel:


    Variante A (z.B. Spherical):

    • grün 1: R: 102 G: 136 B: 102 (Hex: 668866)
    • grün 2: R: 68 G: 102 B: 68 (Hex: 446644)
    • grün 3: R: 34 G: 68 B: 34 (Hex: 224422)

    Variante B (z.B. Rockford):

    • grün 1: R: 153 G: 187 B: 153 (Hex: 99bb99)
    • grün 2: R: 85 G: 170 B: 85 (Hex: 55aa55)
    • grün 3: R: 34 G: 136 B: 34 (Hex: 228822)
    • grün 4: R: 0 G: 119 B: 0 (Hex: 007700)

    Variante C (z.B. Bubble Bobble):

    • grau 1: R: 204 G: 204 B: 204 (Hex: cccccc)
    • grau 2: R: 128 G: 128 B: 128 (Hex: 808080)
    • grau 3: R: 102 G: 102 B: 102 (Hex: 666666)

    Bei Spherical sind die Abstände der Farbwerte immer + oder - 32 und bei dem Hex Zahlen ist immer + oder - 22.

    Bei Rockford, Bubble Bobble usw. ist es anders.

    Wieso wird nicht immer + oder - 8, 16 oder 34 genommen? Wie kommt man z.B. bei Bubble Bobble von 204 auf 128 und dann auf 102? Wenn ich 5 x +16 auf 128 Rechne, komme ich auf 208, nicht auf 204.

  • Wieso wird nicht immer + oder - 8, 16 oder 34 genommen? Wie kommt man z.B. bei Bubble Bobble von 204 auf 128 und dann auf 102? Wenn ich 5 x +16 auf 128 Rechne, komme ich auf 208, nicht auf 204.

    Beim klassischen Amiga (OCS) muß man unterscheiden zwischen den RGB-Werten, die der Programmierer/Grafikkünstler festlegt, und denen, die von der Hardware oder dem Emulator erzeugt werden. (Ich vermute mal, Du entnimmst die Werte einem vom Emulator generierten Snapshot.) Für den Programmierer bzw. Grafikkünstler hält der Amiga nämlich pro Rot, Blau und Grün nur 4 Bits und damit Werte zwischen 0 und 15 ($f) bereit. (16 * 16 * 16 = 4096 = maximale Anzahl von darstellbaren Farben auf dem Amiga) Die von Dir angegebenen Werte weisen jedoch 8 Bits auf, von denen die unteren 4 jeweils eine Kopie der oberen 4 sind (merkwürdigerweise mit Ausnahme von $808080), was bedeutet, daß die unteren 4 Bits jemand anders hinzugefügt haben muß, da sie vom Programm her überhaupt nicht vorgesehen sind. Bei der Kalkulation sollte man also die unteren 4 Bits nicht mitberechnen, sondern muß von RGB-Werten ausgehen wie z. B. $c0c0c0, $808080, $606060 für Bubble Bobble, d. h. jeweils ein Vielfaches von 16 ($10). Dann sieht man auch, daß die Abstufungen beim Amiga nicht auf Werten wie 8 oder 34 etc beruhen, sondern lediglich auf +2, -1 etc. nur halt mit 16 multipliziert.

  • Wieso wird nicht immer + oder - 8, 16 oder 34 genommen? Wie kommt man z.B. bei Bubble Bobble von 204 auf 128 und dann auf 102? Wenn ich 5 x +16 auf 128 Rechne, komme ich auf 208, nicht auf 204.

    Beim klassischen Amiga (OCS) muß man unterscheiden zwischen den RGB-Werten, die der Programmierer/Grafikkünstler festlegt, und denen, die von der Hardware oder dem Emulator erzeugt werden. (Ich vermute mal, Du entnimmst die Werte einem vom Emulator generierten Snapshot.) Für den Programmierer bzw. Grafikkünstler hält der Amiga nämlich pro Rot, Blau und Grün nur 4 Bits und damit Werte zwischen 0 und 15 ($f) bereit. (16 * 16 * 16 = 4096 = maximale Anzahl von darstellbaren Farben auf dem Amiga) Die von Dir angegebenen Werte weisen jedoch 8 Bits auf, von denen die unteren 4 jeweils eine Kopie der oberen 4 sind (merkwürdigerweise mit Ausnahme von $808080), was bedeutet, daß die unteren 4 Bits jemand anders hinzugefügt haben muß, da sie vom Programm her überhaupt nicht vorgesehen sind. Bei der Kalkulation sollte man also die unteren 4 Bits nicht mitberechnen, sondern muß von RGB-Werten ausgehen wie z. B. $c0c0c0, $808080, $606060 für Bubble Bobble, d. h. jeweils ein Vielfaches von 16 ($10). Dann sieht man auch, daß die Abstufungen beim Amiga nicht auf Werten wie 8 oder 34 etc beruhen, sondern lediglich auf +2, -1 etc. nur halt mit 16 multipliziert.

    Ich habe es hier von entnommen: http://hol.abime.net/pic_full/…0201-0300/224_screen5.png, die Grafik mit dem Graustufen.


    Ist das bei dem Bits wie folgt?


    Beispiel:


    4 Bit:

    • grün 1: R: 102 G: 136 B: 102 (Hex: 668866)
    • grün 2: R: 98 G: 132 B: 98 (Hex: 628462)
    • grün 3: R: 94 G: 128 B: 94 (Hex: 5e805e)

    8 Bit

    • grün 1: R: 102 G: 136 B: 102 (Hex: 668866)
    • grün 2: R: 94 G: 128 B: 94 (Hex: 5e805e)
    • grün 3: R: 86 G: 120 B: 86 (Hex: 567856)

    16 Bit

    • grün 1: R: 102 G: 136 B: 102 (Hex: 668866)
    • grün 2: R: 86 G: 120 B: 86 (Hex: 567856)
    • grün 3: R: 70 G: 104 B: 70 (Hex: 466846)
  • Woher hast Du denn diese Werte? Wo wählst Du "4/8/16 Bit" aus? Im Augenblick nehme ich an, dass Du einfach an unterschiedlichen Stellen der Grafik die Farben hast anzeigen lassen, denn "grün 3" bei "4 Bit " hat den gleichen Hexwert wie "grün 2" bei "8 Bit", und "grün 3" bei "8 Bit" hat den gleichen Hexwert wie "grün 2" bei "16 Bit".


    Wie M.J. schon schrub: Der Amiga erzeugt nur vier Bits (das entspricht einer Hexziffer) pro Farbkanal. 0x000 ist also Schwarz (kein Rot, kein Blau, kein Grün), 0xfff ist Weiß (volles Rot, volles Blau, volles Grün). Wenn nun ein Emulator diese Farben auf aktueller Hardware ausgeben soll, also mit 24 Bit Farbtiefe, muss jeder der drei Kanäle von vier Bits auf acht Bits aufgepumpt werden:


    Man könnte einfach immer vier Nullbits anhängen:

    Amiga 0xRGB -> PC 0xR0G0B0

    Dann wäre Weiß aber nicht richtig Weiß (0xffffff), sondern nur ein sehr helles Grau (0xf0f0f0).


    Man könnte einfach immer vier Einsbits anhängen:

    Amiga 0xRGB -> PC 0xRfGfBf

    Dann wäre Schwarz aber nicht richtig Schwarz (0x000000), sondern nur ein sehr dunkles Grau (0x0f0f0f).


    Also hängt man jedes Farbnibble einfach zweimal direkt hintereinander:

    Amiga 0xRGB -> PC 0xRRGGBB

    Weiß bleibt also Weiß (0xffffff), Schwarz bleibt Schwarz (0x000000), alles ist gut.


  • Bei Screenshots aus emulierten Spielen sind die Farbwerte etwas anders.


    Beispiel:


    PC (emuliert):

    • grün 1: R: 102 G: 136 B: 102 (Hex: 668866)
    • grün 2: R: 68 G: 102 B: 68 (Hex: 446644)
    • grün 3: R: 34 G: 68 B: 34 (Hex: 224422)

    Amiga (Original):

    • grün 1: R: 102 G: 136 B: 102 (Hex: 668866)
    • grün 2: R: 70 G: 104 B: 70 (Hex: 466846)
    • grün 3: R: 34 G: 68 B: 34 (Hex: 264826)

    ^ Die 3 Grüntöne sind von einer Grafik aus einen Amiga Spiel.

  • 3 Rockford (3).png


    ^ Bei dem Abstufungen bleibt der Wert FF bestehen, also wie folgt

    • lila 1: R: 187 G: 187 B: 255 (Hex: bbbbff)
    • lila 2: R: 153 G: 119 B: 255 (Hex: 9977ff)
    • lila 3: R: 136 G: 68 B: 255 (Hex: 8844ff)
    • lila 4: R: 153 G: 0 B: 255 (Hex: 9900ff)

    ^ Wieso bleibt bei bestimmten Abstufungen z.B. der Wert ff bestehen? Müsste es nicht in dem Beispiel so gehen: ff, ef, df und cf?


    Wenn Grafiken in Amiga Spielen Farbabstufungen haben, bleibt kein Wert z.B. bei ff oder 255 stehen. Stimmts?

  • Amiga (Original):

    grün 1: R: 102 G: 136 B: 102 (Hex: 668866)
    grün 2: R: 70 G: 104 B: 70 (Hex: 466846)
    grün 3: R: 34 G: 68 B: 34 (Hex: 264826)

    ^ Die 3 Grüntöne sind von einer Grafik aus einen Amiga Spiel.

    Das mag ja sein, aber woher hast Du diese Werte? Die echte Amiga-Hardware gibt Farbsignale mit 12 Bit Farbtiefe an einen echten Monitor aus, und irgendwie wurden die jetzt zu den 24-Bit-Werten gewandelt, die in Deinem Beitrag stehen - aber solange nicht klar ist, wer wo wie diese Konvertierung durchgeführt hat, ist das doch nur Rätselraten. Aus der Original-Amiga-Hardware fallen hinten keine Screenshots mit 24 Bit Farbtiefe raus.


    Dass diese Werte weder dem "R0G0B0"-Schema noch dem "RRGGBB"-Schema entsprechen, könnte möglicherweise daran liegen, dass Bildformate wie PNG z.B. auch eingebettete Gammakorrekturen speichern können, was die Farben dann verfälschen (bzw. "korrigieren") kann. Oder vielleicht hat einer der verwendeten Emulatoren auch einfach einen Bug in der Grafik-Wandlung. Aber das ist jetzt nur wild herumspekuliert - wirklich klären kann man das erst, wenn die Verarbeitungskette bekannt ist.

    Bei dem Abstufungen bleibt der Wert FF bestehen, also wie folgt

    lila 1: R: 187 G: 187 B: 255 (Hex: bbbbff)
    lila 2: R: 153 G: 119 B: 255 (Hex: 9977ff)
    lila 3: R: 136 G: 68 B: 255 (Hex: 8844ff)
    lila 4: R: 153 G: 0 B: 255 (Hex: 9900ff)

    ^ Wieso bleibt bei bestimmten Abstufungen z.B. der Wert ff bestehen? Müsste es nicht in dem Beispiel so gehen: ff, ef, df und cf?

    Warum sollte es?

    Wenn überhaupt, wären die Werte ff, ee, dd und cc (damit das Schema mit der Nibble-Verdoppelung eingehalten wird), aber ich verstehe schon nicht, wie Du hier auf "müsste" kommst.

    Wenn Grafiken in Amiga Spielen Farbabstufungen haben, bleibt kein Wert z.B. bei ff oder 255 stehen. Stimmts?

    Ich wüsste nicht, warum das so sein sollte. Die drei Farbkanäle sind doch unabhängig voneinander; bei einem Farbverlauf von Schwarz über Grau zu Weiß werden alle drei Kanäle verändert - aber bei einem Verlauf von Schwarz zu Knallrot können die Kanäle für Grün und Blau permanent "0" bleiben. Und beiben Grün und Blau stattdessen permanent "f", ist es eben ein Verlauf von Cyan zu Weiß.