Dank der Eingabeverzögerung fühlt sich die Steuerung von Super Mario World auf dem Super Nintendo Emulator unter Recalbox nicht so an wie früher. Permanent springe ich zu spät ab und lande im Nichts.

Ist der Grund für das frühzeitige Game Over wirklich eine Verzögerung bei der Eingabe von Befehlen über das Joypad. Oder bin ich einfach alt geworden? 

Um herauszufinden, ob und wo wie groß die Latenz ist, habe ich die Zeit zwischen dem Drücken des Knopfes auf dem Controller bis zur Reaktion auf dem Bildschirm gemessen.

Wie wird die Eingabeverzögerung gemessen?

Ab dem Apple iPhones 7 kann man im Slow-Motion Aufnahmemodus bis zu 240 Bilder pro Sekunde aufnehmen. Ich habe gleichzeitig den Fernseher und den Druck auf den Joypad-Button gefilmt und die Bilder zwischen diesen beiden Ereignissen im Schnittprogramm gezählt. Beispielsweise habe ich 84 Frames beim SNES 9x Next Emulator gezählt. Das Joypad wurde seitlich gefilmt, damit ich sehen konnte, ob der Button schon gedrückt wurde oder nicht. Durch mehrere Durchläufe habe ich diese Ergebnisse verifiziert. Bluetooth und Wifi waren auf der Raspberry Pi nicht aktiviert bei den Tests.

Die Eingabeverzögerung in Millisekunden kann man ausrechnen, in dem wir die Variable F in der folgenden  Formel mit den gezählten Frames des iPhone Videos ersetzen:

(1000 milliseconds in a second ÷ 480 frames per second) × F
= (2.08333333333 × F) ms

Beispielrechnung
2.0833333333 × 84 frames =
~ 171 ms

Wieso durch 480 und nicht durch 240?

Wenn ich eine Sekunde einer Stoppuhr mit der Slow-Mo-Funktion vom iPhone filme, dann zeigt Final Cut Pro für genau diese Länge 480 Frames an. Eine Sekunde bzw. 1000ms in der Realität entsprechen also 480 Frames bei mir im Schnittprogramm. Die Frames sind einfach doppelt vorhanden.

Ich weiß nicht warum das so aber es ist so. Man kann also nicht einfach die 240 Frames pro Sekunde nehmen sondern eben die 480 Bilder pro Sekunde. Meine Vermutung ist, dass dies technisch bedingt ist.

Wie groß ist die Eingabeverzögerung in Millisekunden?

Die so ermittelten Werte habe ich verglichen mit denen von Sonic Mania auf der PS4 und dem Systemmenü von Recalbox. Das neue 2D-Jump&Run von SEGA hat die geringste mir bekannte Latenz auf der PS4. Das Menü der Recalbox kam mir immer sehr responsiv vor. Trotzdem wollte ich es genauer wissen. Zusätzlich habe ich die Recalbox mit einem PlayStation 4 Joypad (kaufen) per USB-Kabel und mit dem Wireless Controller der Xbox 360 (kaufen) getestet und gegenübergestellt.

LatzenzEmulator oder System
~71 msOriginal Super Nintendo
an CRT TV mit Super Mario World
~83 msPS4
Sonic Mania
~83 msRecalbox – Raspberry Pi 3
System Menu
~96 msSNES Classic Mini
Super Mario World
~112 msVirtual ConsoleWii U
Super Mario World
~138 msPS Now – Streaming PS4
Bubsy: The Woolies Strike Back
~152 msRecalbox – Raspberry Pi 3
PocketSNES (Super Nintendo)
~160 msRecalbox – Raspberry Pi 3
picodrive (MegaDrive)
~171 msRecalbox – Raspberry Pi 3
Snes9x next (Super Nintendo)

Die ermittelte Zahlen sind Mittelwerte und zeigen, dass der Raspberry Pi 3 mit Recalbox bei der Emulation eine deutliche Eingabeverzögerung von einer sechstel Sekunde hat. Dies ist gegenüber der PlayStation 4 und dem Menü der Recalbox mehr als doppelt so hoch.

Dazu kommen noch Unterschiede bei den emulierten Systemen picodrive (MegaDrive) und Snes9x next (Super Nintendo). Der SNES Emulator ist bis zu 11 ms langsamer als die Emulation des MegaDrive. Zu guter Letzt zeigt sich auch die Latenz des kabellosen Xbox 360 Gamepads mit Original MS Wireless Adapter (hier kaufen) in Form von bis zu 5 ms.

Das echte Super Nintendo an einem Röhrenmonitor hat, wie erwartet, das geringste Lag mit 71 ms. Das Super Nintendo Mini hat dabei „nur“ fast 100 ms Verzögerung bei den Eingaben vom Joypad gezeigt.

Grafische Auswertung der  Eingabeverzögerung von Emulatoren

Vergleich des Input Lag von Recalbox auf einem Raspberry Pi
Vergleich des Input Lag von Recalbox auf einem Raspberry Pi. Geringere Werte sind besser.

Woher kommt die Eingabeverzögerung?

Mein Fernseher, der Samsung KS7090 (kaufen), hat bei 1080p mit 60hz eine Verzögerung von 21 ms bis das Bild über HDMI im Game Mode angezeigt wird. Woher kommt aber das restliche Lag?

Meine Vermutung ist, dass es ein Mix aus der Emulation und der geringen Leistung des Raspberry Pi 3 ist. Der SNES Emulator Pocketsnes lässt einige Effekte (Mode7) weg aber soll eine geringere Eingabeverzögerung haben.  Bei meinen Tests war der Unterschied unter 22ms zwischen den beiden. Ein schneller PC könnte hier bessere Ergebnisse erzielen. Vermutlich wäre ein SNES Classic Mini oder eine gehackte Wii (U) in dieser Hinsicht besser aufgestellt, weil die Emulatoren direkt vom Hersteller kommen.

Haben kabellose Controller ein Lag?

Ja, haben sie. Es ist zwar mit bis zu 5 ms sehr gering aber es ist vorhanden. Der original PS4 Controller (kaufen) hat den Vorteil, dass man ihn mit einem langen Micro USB-Kabel ohne Lag betreiben kann. Ich persönlich nutze die kabellosen Xbox 360 Controller mit dem original Xbox 360 Wireless Adapter für Windows (kaufen). Der funktioniert natürlich auch direkt am Raspberry Pi. Zudem sind die Controller von Microsoft und Sony nicht mal teurer als der Chinaschrott von 8Bitdo (günstig kaufen).

Wenn ihr schon gedrückt habt und Sonic macht das hier, dann habt ihr ein extremes Lag-Problem

Danksagungen

Danke an Philipp, Christian und Mo für die tatkräftige Hilfe beim Ausrechnen der Beobachtungen. Einen noch größeren Dank an Ingo für das beharrliche Hinterfragen und das Bereitstellen des echtes Super Nintendos mit CRT Monitor.

Was kann man gegen die Eingabeverzögerung machen?

Selbst das Einschalten des Game Mode am TV und die Verwendung von Controllern mit Kabeln hat wenig genutzt.   Es liegt in diesem Fall an der Hard- und Software. Da das Menü aber genau so schnell reagiert wie die PS4 unter optimalen Bedingungen, liegt das Problem definitiv in der Emulation und nicht an der Ein- bzw. Ausgabehardware wie Joypads oder TV.

Am Ende wird die Eingabeverzögerung von einer sechstel Sekunde vielen Person nicht auffallen. Viele Menschen sind sehr glücklich damit und werden das nie bemerken. Nur wer früher wirklich viel auf original Hardware gespielt hat wird merken, dass es sich nicht so anfühlt wie damals. Oder man gewöhnt sich eben dran. Mir wird leider diese erlernte Feinmotorik mit dem falschen Timing zum Verhängnis. Es dauert einfach sehr lange, bis ich mich wieder entsprechend „kalibriert“ habe.

Messaufbau mit echtem Super Nintendo und Röhrenmonitor.

Emulatoren auf dem Raspberry Pi hat eine spürbare Latenz

An meinem Fernseher haben folgende Geräte absteigend die geringste Latenz, wenn ich Super Mario World spielen möchte:

  1. SNES Classic Mini
  2. Wii U Virtual Console
  3. Recalbox (PocketSNES)
  4. Recalbox (Snes9x Next)

Die Recalbox baut man sich mit einem Raspberry Pi nach dieser Anleitung zusammen. Das SNES Classic Mini kann man hier günstig bestellen.

Beteilige dich an der Unterhaltung

52 Kommentare

  1. Okay, das wird, so wie man es bei Recalbox kennt, wohl noch mehrere Monate dauern ^^

    1. Batocera und RecalBox haben laut Web Alert App Updates erhalten, seit heute erhältlich.
      Erstaunlich, trotz Sommer und Fußball.

      Der Absturz des alten ES Menüs wurde behoben, RetroArch hat ein Update bekommen, Emus für Laserdisc und X68000 sind erhältlich, WLAN/BT läuft besser.
      Wenn Laserdisc images nur nicht so riesig wären…

  2. Moin Marc,
    wird es nicht langsam mal Zeit für ein Update?
    Recalbox hat ja jetzt schon länger RetroArch 1.7.3 (inkl. Run-Ahead) und batocera.linux inzwischen RetroArch 1.7.4 und bei der PC-Version sogar PS2 Emulation :)

    Wäre interessant zu sehen, was die Run-Ahead Funktion genau an Verbesserung bringt beim Input-Lag ;)

    1. Ich hatte das schon ausprobiert. Den Test wird das nicht bestehen weil der Emulator ja „zurückgespult“ wird. Aber der Effekt ist sicherlich vorhanden. Bei Super Mario World funktionierte das auch. Aber für andere Spiele hat der Pi einfach zu wenig Power um diese Funktion dauerhaft einzuschalten.

    2. Was meinst du genau mit: „Den Test wird das nicht bestehen weil der Emulator ja „zurückgespult“ wird.“?

      Und du könntest ja sonst auch die PC-Version von recalbox/batocera verwenden zum Testen (wenn du dich nicht nur auf Super Mario World beschränken wilst bei dem Test).

    3. Es fühlt sich nur so an als ob er in dem Moment des Button-Drucks die Aktion ausführen würde weil der Emulator in der realen Zeit die Aktion so anzeigt als wäre der Sprung vorher gewesen. Die Inputs der Buttons werden separat aufgenommen und dann in einer zweiten Instanz des Emulators zurück in der Zeit dargestellt. Das funktioniert gut aber braucht die doppelte Leistung.

      Am PC hat man besser Optionen als diese Technik. Da steht ja auch im Recalbox Forum. Der PC hat einfach am wenigsten Inputlag. Besonders bei anderen Emulatoren die mehr Power benötigen als snes9x mit run-ahead. Der Pi ist leider insgesamt zu lahm und am pc möchte ich persönlich nicht spielen.

    4. „Das funktioniert gut“
      Ja, und darauf kommt es doch an ;-)

      „Der Pi ist leider insgesamt zu lahm“
      Also für Super Mario World reicht es, den Pi ein wenig zu übertakten und die Rewind-Funktion zu deaktivieren.
      Batocera läuft zudem etwas performanter als Recalbox (mit Batocera kann man bei Super Mario World das Run-Ahead sogar mit nem Pi2 verwenden, bei Recalbox muss es min. der Pi3 sein), vermutlich weil der Recalbox-Webmanager, der die ganze Zeit im Hintergrund mitläuft, einiges an Performance frisst (Batocera hat diesen Webmanager nicht. Meiner Meinung nach braucht man den auch nicht unbedingt, ist nur ein nice-to-have).
      Wie das bei anderen SNES-Spielen und/oder anderen Systemen (MegaDrive z.B.) mit der Performance beim Pi2/3(+) in Verindung mit Run-Ahead aussieht, habe ich noch nicht getestet (werde ich aber demnächst mal ausprobieren).
      Bei Gameboy (z.B. Tetris) funktioniert das Run-Ahead auch super mit nem Pi!
      Macht wesentlich mehr Spaß, als ohne, weil quasi kein Input-Lag mehr vorhanden :-)
      Probier es doch selbst einfach mal aus ;-)

    5. Wie gesagt: hatte ich. Das hatte ich doch auch vor ein paar Monaten geschrieben. SMW lief. Alles andere nicht. Und ich hatte ab und zu “komische” Momente durch das Prinzip. Es ist halt ein Trick. Warten wir lieber bis der Pi genug Performance für Emulatoren mit weniger lag hat.

    6. Kannst du ein paar konkrete Beispiele nennen, bei welchen Spielen du welche „komischen“ Momente hattest?
      Will das nämlich gerne nachvollziehen können.

  3. Hi,
    ich finde die gemessenen Werte sehr interessant, da ich gerade dabei bin den Lag für mein Cabinet (NUC System) zu untersuchen.

    Allerdings verstehe ich die Werte nicht ganz.

    Du hattest z.B., wie auch in dem Video zu sehen ist, einen Lag von 171ms gemessen. Du hast die Messung ja wahrscheinlich mehrere Male wiederholt. Hast du immer den gleichen Wert gemessen oder sind die in der Tabelle angegebenen Werte gemittelte Werte?

    Eigentlich lässt sich doch gar nicht ein exakter Wert angegen.
    Man müsste doch immer eine Range angeben:
    Du hast eine Kamera mit einer zeitlichen Auflösung von 1s/240 = 4.2ms und dazu kommt das Emulator, OS und Monitor framebasiert arbeiten. Also mindestens (bei US) 1/60 = 17ms.
    Daher müssten doch alle gemessenen Werte in diesem Bereich (17+4=21ms) schwanken.

    1. Sind Mittelwerte. Die Tilde sollte das anzeigen. Ich habe es auch mal im Text geschrieben.

      Aber du hast natürlich recht! Ich schaue mir mal dein Setup an und lerne dann daraus.

    2. Hast du denn deine Originalwerte noch. Was bei meinen Messungen komisch ist: die Differenz zwischen minimalem und maximalen Lag ist oftmals größer als 2 Frames (2*20ms). War das bei dir auch so?

Schreibe einen Kommentar

Wie kann ich mich verifizieren lassen?