Gros plan macro sur la dalle d'une console portable rétro, montrant la trame de pixels

Ein Super-Nintendo-Spiel, unverändert auf einem modernen Handheld dargestellt, wirkt seltsam. Die Pixel sind perfekte Quadrate, die Konturen sind hart, die Farbverläufe des Himmels zerfallen in sichtbare Streifen. Das ist kein Fehler des Emulators: Es ist genau das Bild, das die Konsole erzeugt hat. Verändert hat sich der Rahmen. Diese Spiele wurden vor einem Röhrenfernseher gezeichnet, der den Strahl verteilte, benachbarte Farben mischte und jede zweite Zeile dunkel ließ. Shader dienen dazu, einen Teil dieser Verarbeitung nachzubilden. Sie haben ihren Preis, der auf einer kleinen Maschine deutlich unterschätzt wird.

Was die Röhre tat und Ihr Display nicht tut

Ein Röhrenfernseher zeichnet keine Pixel. Ein Strahl tastet den Bildschirm Zeile für Zeile ab und bringt Phosphore zum Leuchten, deren Helligkeit sofort wieder abfällt. Nichts hat eine scharfe Kante: Ein heller Punkt läuft auf seine Nachbarn über, in 240p bleibt jede zweite Zeile dunkel, und das Phosphorraster zerlegt jede Farbfläche in rote, grüne und blaue Zellen.

Das Signal tat sein Übriges. Über Composite oder HF laufen Farbe und Helligkeit vermischt und beeinflussen sich gegenseitig. Die Studios nutzten das: Die Schachbrettmuster aus jedem zweiten Pixel, heute so gut sichtbar, verschmolzen zu einem durchgehenden Verlauf. Ein Wasserfall auf dem Mega Drive aus blauem und weißem Schachbrett wurde zu einer durchscheinenden Fläche. Das ist eine gestalterische Absicht, kein Zufall. Ein LCD- oder OLED-Display macht das Gegenteil: Jedes Pixel ist ein gleichmäßig ausgeleuchtetes Rechteck, ohne Nachleuchten und ohne Überlauf. Das Bild war noch nie so originalgetreu zu den Daten der Konsole — und genau deshalb wirkt es falsch.

Ein Shader, in einem Satz

Ein Shader ist ein kleines Programm, das der Grafikchip auf das vom Emulator berechnete Bild anwendet, kurz vor der Ausgabe. Es arbeitet Ausgabepixel für Ausgabepixel: Es dunkelt ab, mischt, fügt ein Raster hinzu. Die Emulation selbst bleibt unberührt, und Sie können mitten im Spiel wechseln, ohne etwas zu beschädigen.

Man lädt fast nie einen einzelnen Shader, sondern ein Preset: eine in einer Datei gespeicherte Kette von Durchgängen. Die Libretro-Dokumentation nennt drei Formate: Cg (.cgp), veraltet; GLSL (.glslp) auf der OpenGL-Seite, das Format der kleinen ARM-Maschinen; und slang (.slangp), empfohlen, aber auf einen Vulkan- oder GL-core-Treiber angewiesen. Ein slang-Preset lädt auf einem Treiber, der es nicht unterstützt, schlicht nicht — daher die meisten Fälle von „Es passiert nichts“. Prüfen Sie das je nach Firmware. Merken Sie sich vor allem: Die Zahl der Durchgänge bestimmt den Preis.

Die großen Familien

Die ganzzahlige Skalierung

Das ist kein Shader, sondern die Voraussetzung für alle anderen. Wird das Bild mit einer ganzen Zahl vervielfacht, erhält jedes ursprüngliche Pixel gleich viele Ausgabepixel. Bei einem nicht ganzzahligen Faktor belegen manche Pixel zwei Zeilen und andere nur eine: Die Sprites werden unregelmäßig, und der kleinste Raster-Shader erzeugt Moiré.

Die Bildzeilen

Der Shader dunkelt jede zweite Ausgabezeile ab, teils mit einem Strahlprofil, das sich in hellen Bereichen verbreitert. Das ist die nützlichste Familie für 240p-Spiele, vom NES bis zur PlayStation 1, und für Arcade-Titel. Bei Spielen für Handhelds der damaligen Zeit ergibt sie keinen Sinn, denn diese hatten nie Bildzeilen.

Die Maske

Die Maske bildet das Phosphorraster nach: eine senkrechte Streifenmaske im Trinitron-Stil oder eine weichere Schlitzmaske. Sie bringt Körnung zurück, kostet aber Helligkeit und verlangt Platz: crt-easymode von EasyMode gibt im Dateikopf an, auf 1080p oder besser zu zielen. Darunter trifft die Maske die Pixel des Displays nicht mehr sauber und wird zu einem Farbsaum.

Krümmung und Geometrie

Das Bild wölben und die Ecken abrunden: der spektakulärste Teil — und der teuerste. Der Shader crt-geom von cgwg, Themaister und DOLLS verbindet Krümmung, Bildzeilen, Maske und abgerundete Ecken. Der Autor von crt-pi, davej, vermerkt in seinem Code, dass die Krümmung erheblich bremst. Auf einem Handheld ist sie die erste Einstellung, die man abschaltet.

Das Composite-Signal

Die NTSC-Filter simulieren die HF-, Composite- oder S-Video-Kette und verschmelzen Schachbrettmuster wieder zu Verläufen. Sie verändern das Bild weit stärker als Scanlines und passen nur zu den Systemen, die über dieses Signal liefen: NES, Mega Drive, Super Nintendo.

Die Flüssigkristallbildschirme

Die Familie handheld macht das Gegenteil der Röhren-Shader: Sie bildet ein Handheld-Display der damaligen Zeit nach, sein Gitter zwischen den Pixeln, seine Subpixel, manchmal das Nachleuchten des ursprünglichen Game Boy. Das ist die richtige Wahl für Game Boy, Game Boy Advance oder Neo Geo Pocket.

Die Pixel-Art-Glättung

HQx, xBR, xBRZ, SABR oder ScaleFX rekonstruieren aus den ursprünglichen Pixeln glatte Konturen. Das Ergebnis spaltet: für die einen aufgeräumte Sprites, für die anderen geschmolzenes Plastik. Es handelt sich um Nachbarschaftsanalysen und damit um mehr Aufwand als das bloße Abdunkeln einer Zeile.

Familie Was sie bewirkt Wann sie sich lohnt Aufwand
Ganzzahlige Skalierung Ein Originalpixel = ein gleichmäßiger Block Immer, vor allem anderen Keiner
Bilinearer Filter Mildert eine nicht ganzzahlige Vergrößerung Als Notbehelf Keiner
Bildzeilen Dunkelt jede zweite Zeile ab 240p-Spiele, Arcade Gering
Maske Bildet das Phosphorraster nach Hochauflösende Bildschirme, TV Gering bis mittel
Krümmung, Geometrie Wölbt das Bild, rundet die Ecken TV, leistungsstarke Maschinen Hoch
NTSC-Filter Verschmilzt Schachbrettmuster, mischt Farben NES, Mega Drive, SNES Mittel bis hoch
Flüssigkristall Gitter, Subpixel, Nachleuchten Game Boy, GBA, Neo Geo Pocket Gering bis mittel
Pixel-Art-Glättung Rekonstruiert saubere Konturen 2D-Sprites, Geschmackssache Mittel bis hoch

Der Leistungspreis, den man gern vergisst

Um 60 Bilder pro Sekunde zu halten, hat die Konsole rund 16,7 Millisekunden pro Bild. Die Emulation verbraucht davon schon einen Teil; der Shader nimmt den Rest, und zwar auf dem Grafikchip, dem schwachen Bauteil der meisten Retro-Handhelds. Wird das Budget überschritten, sehen Sie nicht unbedingt einen Zähler fallen: Zuerst knackt der Ton, dann wird die Konsole warm und die Laufzeit schmilzt.

Zwei Anhaltspunkte geben den Maßstab. Der Shader zfast_crt von Greg Hogan versteht sich als einfacher und schneller CRT-Shader und gibt an, auf einem Raspberry Pi 3 in 1920×1080 mit 60 Bildern pro Sekunde zu laufen. Am anderen Ende bildet crt-royale allein schon eine eigene Kategorie im Libretro-Repository, so lang ist seine Kette von Durchgängen, und das Mega Bezel stapelt Röhrensimulation, Rahmen und Spiegelungen übereinander.

  • Kostenlos: ganzzahlige Skalierung und bilinearer Filter, die der Chip ohne zusätzlichen Code übernimmt.
  • Leicht: die für bescheidene Hardware geschriebenen Shader, allen voran zfast_crt und crt-pi.
  • Mittel: crt-easymode oder crt-geom ohne Krümmung, die Flüssigkristall-Shader.
  • Schwer: die Krümmung, vollständige NTSC-Filter, ScaleFX, NNEDI3, crt-royale, das Mega Bezel.

Die zweite Regel fällt schwerer zu akzeptieren: Ein Shader schlägt zuerst dort zu Buche, wo das System ohnehin am Limit läuft. Auf einer Linux-Konsole mit Allwinner H700 oder SigmaStar hat das Super Nintendo Luft, die PlayStation 1 deutlich weniger, die Dreamcast gar keine. Unsere Empfehlungen zu PlayStation-1-Emulatoren gelten für eine Maschine ohne Shader; kommt ein Raster hinzu, kann dasselbe Spiel stottern.

Maschine Was vernünftigerweise möglich ist
Linux-Einstiegsklasse, 8- und 16-Bit-Spiele Ganzzahlige Skalierung, leichte Scanlines, Flüssigkristall
Linux, Spiele für PS1, N64 oder Dreamcast Nur ganzzahlige Skalierung
Android-Mittelklasse, 2D- und PS1-Spiele crt-easymode oder gleichwertig, ohne Krümmung
Android-Oberklasse und Windows Vollständige Presets, Maske inklusive
Konsole am Fernseher Schwere Presets, Krümmung und Rahmen

Warum dasselbe Raster je nach Bildschirm anders wirkt

Eine Bildzeile braucht mindestens zwei Ausgabezeilen pro Originalzeile: eine helle, eine dunkle. Für ein Spiel mit 240 Zeilen sind also mindestens 480 Bildschirmzeilen nötig, und das Ergebnis bleibt grob. Eine Maske verlangt mehr, da sie jedes Pixel in drei Farbzellen zerlegt. Genau das sagt der Dateikopf von crt-easymode mit seinem Ziel 1080p, und die Emulationsdokumentation erinnert daran, dass diese Shader unterhalb einer komfortablen Auflösung nicht richtig funktionieren.

Auf einem kleinen 4:3-Display mit geringer Auflösung nehmen die dunklen Zeilen einen enormen Teil des Bildes ein und dunkeln es spürbar ab, obwohl Helligkeit ohnehin nicht die Stärke dieser Bildschirme ist. Und da die Pixel winzig sind, ist das Raster aus Spielentfernung kaum zu sehen: Sie verlieren Licht, ohne den gewünschten Effekt zu gewinnen.

Alles ändert sich, sobald die Auflösung steigt. Die TrimUI Brick zeigt 1024×768 auf 3,2 Zoll: Ein Spiel mit 240 Zeilen passt dort dreimal hinein, also 720 nutzbare Zeilen, genug für ein sauberes Raster. Auf einem scharfen Android-Bildschirm mit 5,5 Zoll oder auf einem Fernseher über HDMI ergeben schwere Presets wieder Sinn. Unser Vergleich Android oder Linux beschreibt, was jedes System verträgt.

Beurteilen Sie einen Shader aus Spielentfernung, nicht mit der Nase am Bildschirm: Ein aus 15 cm großartiges Ergebnis ist aus 40 cm oft unsichtbar.

Wie man sie aktiviert, unabhängig vom System

Überall dort, wo RetroArch vorhanden ist, ist der Weg derselbe: Schnellmenü im laufenden Spiel, Bereich Shader, ein Preset laden und anschließend für den Kern oder für das Spiel speichern. Speichern für den Kern wendet das Raster auf alle Spiele des Systems an: Das ist fast immer das Richtige. Die übrigen Einstellungen behandelt unser Leitfaden zu den wichtigsten RetroArch-Einstellungen.

Angepasste Firmware fügt in den Anzeigeoptionen mitunter eine eigene Filterliste hinzu, unabhängig von RetroArch: praktisch, ohne Risiko, aber weniger fein. Unser Leitfaden zur Installation angepasster Firmware zeigt, wo diese Menüs zu finden sind. Unter Android ignorieren eigenständige Emulatoren die RetroArch-Presets und bieten jeweils ihre eigene, kürzere Liste.

Ein Shader ändert nichts an der Herkunft Ihrer Spiele: Ausgangspunkt bleiben Ihre eigenen Datenträger oder die legalen Angebote, die auf der Seite Wo man legal spielt aufgeführt sind.

Drei Einstellungen, die funktionieren

Die minimalistische

Ganzzahlige Skalierung, Nearest-Neighbor-Filter, kein Shader. Das ist die schärfste Einstellung, die hellste, und die einzige, die nichts kostet. Auf einer Linux-Konsole der Einstiegsklasse, auf einem kleinen Bildschirm oder sobald das emulierte System anspruchsvoll wird, ist sie auch die vernünftigste. Viele Spieler kehren zu ihr zurück.

Die ausgewogene

Ganzzahlige Skalierung plus ein leichter Scanline-Shader, zfast_crt oder crt-pi mit abgeschalteter Krümmung. Sie gewinnen die Körnung zurück, ohne Bilder pro Sekunde zu verlieren, und der Helligkeitsverlust bleibt erträglich, wenn Sie den Bildschirm eine Stufe heller stellen. Das ist der Kompromiss, den wir am häufigsten empfehlen.

Die nostalgische

Vollständiges Röhren-Preset: Bildzeilen, Maske, Krümmung, gegebenenfalls Composite-Filter. Heben Sie es sich für eine Android-Konsole der Oberklasse, eine Windows-Maschine oder ein an den Fernseher angeschlossenes Handheld auf. Prüfen Sie es über zehn Minuten echtes Spiel, nicht auf einem Titelbildschirm: Einbrüche zeigen sich in der Bewegung. Halten Sie ein leichtes Preset als zweite Wahl bereit.

Keine dieser drei Einstellungen ist absolut richtig: Es hängt ganz von der Maschine ab. Unser Vergleichsrechner hilft, Ihre einzuordnen, und unsere Modelle finden Sie in der Kollektion Retro-Handheld-Konsolen.

Kann ein Shader meine Konsole beschädigen?

Nein. Es handelt sich um eine Bildaufbereitung: Sie verändert weder die Firmware noch die Spieldateien und lässt sich mit zwei Handgriffen abschalten. Der einzige tatsächliche Effekt ist ein stärker beanspruchter Grafikchip: eine Konsole, die wärmer wird, und eine kürzere Laufzeit.

Warum lädt mein Preset überhaupt nicht?

Meistens eine Frage des Formats. slang-Presets (.slangp) verlangen einen Vulkan- oder GL-core-Treiber, der den meisten kleinen Linux-Maschinen fehlt; sie brauchen GLSL-Presets (.glslp). Prüfen Sie auch, ob das Shader-Paket heruntergeladen wurde: Es ist nicht immer ab Werk vorhanden.

Braucht man für Game-Boy-Advance-Spiele einen Shader?

Jedenfalls keinen Röhren-Shader: Der GBA hatte nie Bildzeilen. Um sein Bild zurückzuholen, greifen Sie zur Familie der Flüssigkristall-Shader, samt Pixelgitter und Nachleuchten. Viele Spieler bevorzugen dennoch das unbearbeitete, hellere Bild.

Der Shader macht meinen Bildschirm zu dunkel, was tun?

Das liegt in der Natur der Sache: Jede zweite Zeile abzudunkeln nimmt Licht weg, und eine Maske nimmt noch mehr. Senken Sie die Intensität der Zeilen in den Shader-Parametern und erhöhen Sie dann die Helligkeit des Displays. Bleibt das Bild fahl, ist Ihr Bildschirm für diese Familie nicht hell genug.

Kann man je nach emuliertem System einen anderen Shader nutzen?

Ja, und das ist die gute Praxis. In RetroArch speichert man das Preset für den Kern: Röhrenraster auf den Kernen für Super Nintendo oder Mega Drive, Flüssigkristall-Shader auf den Game-Boy-Kernen, nichts auf den anspruchsvollen Systemen. Ein Preset lässt sich auch für ein einzelnes Spiel speichern.

Lohnt sich das auf einem 3,5-Zoll-Bildschirm?

Nur bedingt. In dieser Größe ist ein feines Raster aus Spielentfernung kaum zu sehen und kostet dennoch Helligkeit. Ein leichter Scanline-Shader bleibt bei 8- und 16-Bit-Spielen angenehm; einer Maske fehlen schlicht die Pixel, um zur Geltung zu kommen.

Écran, Réglages, Retroarch, Rubrique-technique, Scanlines, Shaders

Kommentar hinterlassen