Was ist das? Wie geht das?

Effekte


Vielleicht hätten wir dieses Tutorium besser "Ausnutzen von optischen Täuschungen" nennen sollen, denn darum soll es hier vor allem gehen.

Eine ganze Reihe der erst im Laufe der Jahre entdeckten C64-Features beruht auf optischen Täuschungen, die bekannteste darunter ist die wundersame Vermehrung der 16 eigentlich unveränderlichen C64-Farben auf bare 136 Farben im IFLI-Modus. Weniger bekannt (aber genauso erstaunlich) ist die Erzeugung von ziemlich echten 3D-Bildern mithilfe von Stereogrammen. Andere optische Illusionen nutzt GoDot beim Antialiasing und beim Erzeugen von Bewegtbildern.

Dieses Tutorium fasst zusammen und erläutert vielleicht genauer, was hier bei den einzelnen beteiligten GoDot-Modulen bereits nachzulesen ist. Wir erzeugen:


Die Illusion von vielen Farben

1. Mischfarben erzeugen

Bild 1
16 Farben
Multicolor-Darstellung eines IFLI-Bildes: nicht mehr als 16 Farben
 
Bild 2
16 Farben?
Multicolor nach RevealIFLI: 16 Farben, bereits mit Illusion von mehr
 
Bild 3
47 Farben
IFLI (abgespeichert mit PNG): das Auge sieht hier 47 Farben

Um das Auge zu überlisten, bedarf es nicht viel: Man muss nur zwei unterschiedliche Dinge klein genug machen und nahe zueinander stellen. Schon sieht es so aus, als habe man ein einziges Ding mit einer neuen Qualität. Im ersten Beispiel kann man das deutlich nachvollziehen, Bild 2 und Bild 3 sehen sich doch recht ähnlich, oder? Bild 2 scheint viel mehr Farben zu enthalten als nur 16. Stimmt aber nicht. Die Kästchen mit dem weißen Punkt links oben sind die 16 "unverfälschten" C64-Farben. Bei den anderen Kästchen in Bild 2 erkennt man bei genauem Hinsehen, dass sie aus zwei Farben aufgebaut sind, die abwechselnd untereinander stehen, jede Rasterzeile ist anders gefärbt als die darüber.

RevealIFLI enthüllt hier (genau wie der Name schon sagt), wie ein IFLI-Bild aufgebaut ist: Es besteht aus zwei kompletten Bildern mit jeweils unterschiedlicher Einfärbung. Bei der IFLI-Bildschirmdarstellung werden diese beiden Bilder in schneller Abfolge so angezeigt, dass sie sich in einem Pixel überlagern. Man sieht an dieser Pixelposition also mal die eine Einfärbung, mal die andere. Das geschieht so schnell, dass im Auge die Illusion entsteht, es handele sich um neue, ganz andere Farben. So macht man aus 16 Farben viel mehr, verdeutlicht in Bild 3. Hier ein Anwendungsbeipiel (Bilder 4 bis 6):

Bild 4
16 Farben
Multicolor-Darstellung eines IFLI-Bildes: nicht mehr als 16 Farben
 
Bild 5
16 Farben?
Multicolor nach RevealIFLI: 16 Farben, bereits mit Illusion von mehr
 
Bild 6
71 Farben
IFLI: hier sind 71 Farben enthalten

Und wie geht das jetzt? Nehmen wir mal ein Bild, bei dem wir zwei Farben abdunkeln wollen. Wie wär's mit dem Raspberry-Pi-Logo (rot und grün bieten sich an):

Bild 7
Vorlage
Hier sollen rot und grün einfach dunkler erscheinen.
 
Bild 8
Scanline-Maske
Mit dieser Maske (aus schwarzen und weißen Linien) arbeiten wir.
 
Bild 9
roter Anteil markiert
Der rote Anteil des Logos ist nun markiert.

Man braucht hierfür den Lader 4Bit&Mask und zwei Masken, die miteinander verknüpft werden müssen. Die eine (Bild 8) dient dazu, die abdunkelnde Farbe in Scanline-Form ins Bild einarbeiten zu können. Im ersten Schritt löscht man zunächst den Canvas (das ganze Bild) in dieser Farbe, z.B. in schwarz (ClipWorks/ClrClp/schwarz/Inside). Dann zieht man in weiß mit PixelEdit in die allererste Kachel vier waagerechte Linien ein, definiert dann in ClipWorks diese eine Kachel als Clip (0,0,1,1) und rollt diesen mit TileClip (weitere Einstellungen egal) auf dem ganzen Canvas aus. Nach dem Rendern in Hires erhält man damit Bild 8. Sichern in Undo Rendered oder als Bitmap (wenn man keine REU besitzt oder wenn man die Maske bei anderen Bildern weiterverwenden möchte).

Im zweiten Schritt lädt man das eigentliche Bild, Bild 7, und sichert es sofort in Undo 4Bit, wenn eine REU vorhanden ist. Dann kümmern wir uns mit QuickMask/rot/Make um die abzudunkelnde Farbe. Es entsteht eine Maske, die rot komplett durchlassen würde. Um sie mit den Scanlines aus Bild 8 zu verknüpfen, rufen wir nun 4Bit&Mask auf und laden per Mrge Mask from Undo (oder eben from Disk) die Scanline-Maske, die unmittelbar invertiert werden muss (Invert Mask). Damit haben wir Bild 9, die fertige Maske für die Farbe rot. Es genügt ein Get 4Bit from Undo (oder from Disk) und der rote Anteil des Bildes ist abgearbeitet und weist jetzt schwarze Zwischenlinien auf. Dieses vorläufige Ergebnis muss im dritten Schritt wieder gesichert werden, und dann folgt der gleiche Vorgang komplett noch einmal für den Grünanteil (grün ausmaskieren, die Maske mit der Scanline-Maske verknüpfen, den Canvas in schwarz löschen und die Maske auf das gesicherte Bild anwenden).

Hier das Endergebnis (und zwei weitere Beispiele aus der aktuellen C64-Grafik-Szene, bei denen dieser Farbeffekt zum Einsatz kommt):

Bild 10
Ergebnis
Und so sieht am Ende das Ergebnis aus.
 
Bild 11
Anwendung
Scanline-Färbung in Anwendung (von ilesj/triad).
 
Bild 12
Anwendung
Noch eine Scanline-Färbung in Anwendung (auch von ilesj/triad).
 

Diese Technik kann man auf alle Grafikmodi anwenden, allerdings lassen sich dann die Ergebnisse u.U. optimal nur noch in IFLI (Multicolor) oder FLI (Hires) anzeigen, da ja die Anzahl der Farben pro Kachel erhöht wird. Übrigens beruht die Farbenvielfalt, mit der das Programm IPaint und die Basic-Erweiterung Basic8 für den VDC des C128 werben ("3876 eindeutige Farben"), genau auf dem hier beschriebenen Farbeffekt.

nach oben

2. Künstliche Scanlines erzeugen

Man kann Bild 8 auch so verwenden, dass ein (beliebiges) Bild mit künstlichen Scanlines versehen wird. Das funktioniert noch einfacher als oben beschrieben, man braucht dazu im Prinzip nur BalancingCol und natürlich 4Bit&Mask. Nehmen wir ein Foto von meinem Auto (Bild 13, im IFLI-Modus)...

Bild 13
Ausgangsbild
Ein Bild im IFLI-Modus.
 
Bild 14
abdunkeln
Das dunkeln wir ab (Brightness: -3, Contrast: -6)...
 
Bild 15
Ergebnis
...und erhalten ein Bild mit künstlichen Scanlines.
 

...dunkeln es mit BalancingCol (Einstellung: Brightness -3, Contrast -6) ein bisschen ab (Bild 14), laden mit 4Bit&Mask die Maske aus Bild 8 und holen das Originalbild mit Get 4Bit from Disk wieder dazu. Schon kommt dabei Bild 15 heraus, ein Bild mit künstlichen Scanlines. Wer die Scanlines gern dunkler hätte, verdoppelt die Balancingwerte für Bild 14 auf Brightness -6 und Contrast -12. Ist auch OK. Einige Farben werden von BalancingCol nicht sofort beeinflusst (rot und blau z.B.) Für die geht man dann, wenn nötig, (zusätzlich) so vor wie unter Punkt 1 ("Mischfarben erzeugen") beschrieben.

nach oben


Die Illusion von räumlicher Tiefe

Wenn du nur ein Auge hast oder eins deiner Augen in seiner Sehfähigkeit beeinträchtigt ist, bleibt dir dieser Effekt verborgen. Du wirst nur helle und dunkle Punkte sehen.

Es geht um Einzelbild-Stereogramme (Single Image Stereograms). Wenn du also kannst, richte deinen Blick in die Ferne und schaue durch diesen Punktehaufen hindurch, nur dann siehst du das 3D-Bild:

GoDot-Logo
Bild 16: Mit ein bisschen Übung sieht man den Schriftzug "GoDot" und zwei gegenläufige Treppen in rot und blau.
Sirds-Vorlage
Bild 17: Die Vorlage (Graustufenbild). Der Schriftzug
in der Mitte ist zu dunkel, um ihn hier zu erkennen.

Wer es erkennen kann, sieht in der gleichen Entfernung, wie man davor sitzt, eine Fläche (alles, was in der Vorlage schwarz ist) und aus dieser Fläche erheben sich oben und unten zwei farbige Treppen nach rechts und links. Dazwischen, knapp über der Hintergrundfläche, schwebt der Schriftzug "GoDot".

Und gleich noch ein Versuch, diesmal monochrom:

GoDot-Logo
Bild 18: Der gleiche Schriftzug ("GoDot") über einem kreisförmigen Abgrund.
Sirds-Vorlage
Bild 19: Wiederum die Vorlage (Graustufenbild).

Was braucht man dazu? Nur einen einzigen Modifier: SIRDS!

Jedenfalls für die monochrome Variante. Bei der Farbversion (Bild 16) muss man etwas tiefer in die GoDot-Werkzeugkiste greifen, denn Farbe ist bei den beiden Stereogramm-Modifiern von Peter Steinseifer (aus dem Jahr 1993) nicht vorgesehen. Wie geht also Farbe? So:

GoDot legt das Stereogramm als monochrome Bitmap in seinem Anzeigespeicher ab. Die 4Bit-Daten mit den Informationen über die Darstellungstiefe (die in der jeweiligen Graustufe kodiert ist) bleiben davon unberührt. Mit ihnen werden nur die 3D-Eigenschaften gesteuert, Farben gibt es hier nicht (sie sind also in diesem Zusammenhang nur Stellvertreter für Graustufen, z.B. wenn man Display betätigen würde). Um zu färben, brauchen wir daher das Ergebnis, das erzeugte Stereogramm. Da es aber monochrom ist (ohne Farbinformationen), müssen wir es zunächst in einen Modus konvertieren, der Farben zulässt. Dazu bietet GoDot den Modifier MaskTo4Bit an. Nach Anwendung wird in Hires, Colors: 16 neu gerendert. Das entstehende Bild entspricht exakt dem monochromen Stereogramm.

Noch etwas wird benötigt, und zwar bereits im Vorhinein, bevor das Stereogramm begonnen wird: Wir müssen wissen, an welchen Stellen das Bild neu eingefärbt werden soll. Soll es das ganze Bild sein? (In Bild 16 sind die weißen Pixel zu hellgrau umgefärbt.) Oder nur ein paar Ausschnitte? (Wie die beiden Farbstreifen im Bild.) Das muss nacheinander geschehen, zuerst färbt man das ganze Bild, dann die Ausschnitte. Fürs Umfärben verwenden wir Histogram/Swap, bei den Ausschnitten kommt ClipWorks/Clip dazu.

Also: Histogram aufrufen, vorhandene Farbe mit gewünschter neuer tauschen (Swap), rendern. Bei den einzufärbenden Ausschnitten nun vor dem Rendern in ClipWorks den neuen Clip festlegen. Da wir dabei nur die Pixel des Sterogramms sehen, müssen wir uns ganz am Anfang der Kampagne die Ausschnittsdaten der Stellen, die gefärbt werden sollen, aufschreiben. Diese Daten am besten hinter Row, Col, Wid und Hgt von Hand eingeben (Wid und Hgt zuerst). In Bild 16 waren das Row: 3, Col: 2, Wid: 36, Hgt: 3 für den oberen (roten) Ausschnitt und dann Row: 19 für den unteren (blauen). Da das jetzige Bild in der Anzeige nicht den Zustand des 4Bit-Speichers wiedergibt, darf man sich das Stereogramm jetzt nur noch mit Redisp anschauen.

Will man ein so eingefärbtes Stereogramm abspeichern, überträgt man es zunächst mit Rendered2Raw in den 4Bit-Bereich, danach kann man es in einem beliebigen Format auf Diskette sichern. Rendered2Raw berücksichtigt beim Konvertieren der Anzeige (anders als das monochrome MaskTo4Bit) die sichtbaren Farben.

Tipps: · Zwischen hellen und dunklen Pixeln im Stereogramm muss ausreichend Kontrast bestehen, sonst verliert sich der 3D-Effekt beim Ansehen. · Sehr helle Einfärbungen in einem ansonsten dunklen Stereogramm stören den 3D-Eindruck, man kann seine Augen schlechter synchronisieren. · Das Gleiche gilt für die Einfärbungen an sich: Zu viele kleine Farbstellen verhinden den 3D-Blick. · Die Einfärbungen sollten Stellen markieren, die bereits in der Graustufenvorlage "hervorgehoben" sind (wie z.B. die Treppen in Bild 16).

nach oben


Die Illusion von Bewegung

a) Farb-Animation

Farbanimation
Farbanimation mit Amica Paint (von der Original-Disk)
Ein Feature von Amica Paint
(Wird von GoDot bisher nicht unterstützt.)

Hier Beispiele auf dem Amiga.


b) Zeichensatz-Animation

Zeichensatzanimation
Zeichensatzanimation (Bild: C64-Wiki, aus dem Spiel "Cauldron")
Feature in ungezählten C64-Spielen (z.B. beim [Parallax-] Scrolling)
(Wird von GoDot bisher nicht unterstützt.)

Beispiele auf Twitter: eins, noch eins, ein drittes.


c) Sprite-Animation

Siehe hier oder hier.

d) Animation des ganzen Bildes

Siehe hier.

nach oben


Die Illusion von sanften Übergängen

nach oben


zurück

Arndt Dettke
support@godot64.de