Warum haben Emulatoren eine Eingabeverzögerung?


Super Mario World Recalbox Input Lag

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

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.

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.


Beitrag veröffentlicht

in

,

von

Kommentare

52 Antworten zu „Warum haben Emulatoren eine Eingabeverzögerung?“

  1. Avatar von JTR
    JTR

    Darum kommt mir wahrscheinlich nicht nur gefühlt die Steuerung beim SNES classic direkter als bei der recalbox vor (ist mir bei Contra III aufgefallen). Vieles dürfte auch einfach mit der schwachen Hardware zu tun haben. Beim PC und seinen Emulatoren auf einem i7 kommt mir das nämlich nicht so vor, wobei ich damals immer mit einem kabelgebundenen 360 Pad gespielt habe. Mit dem neuen Bluetooth Xbox One Pad müsste ich mal testen.

    1. Avatar von Marc
      Marc

      Ja, ist sehr wahrscheinlich beides richtig. Einen Unterschied bei den Pads erwarte ich nicht. Wie man an den Ergebnissen sieht, muss es ja die Software, also in dem Fall die Emulatoren, sein.

  2. Avatar von joinski
    joinski

    In dem animierten Gif werden die frames hochgezählt (bis 122).
    Im Text ist aber von 122ms die Rede.
    Passt das wirklich? Also ist in dem Gif 1 frame = 1ms?
    Oder sollte das nicht frame sondern ms sein?

    1. Avatar von Marc
      Marc

      Das ist Zufall mit den 122 Frames und den 127 ms. Der Picodrive Emulator hat zufällig 122 ms Input Delay.

  3. Avatar von Marc
    Marc

    Ich habe den Denkfehler gefunden. Das Video habe ich ein 60 FPS Projekt reingepackt und den Timecode gezählt – das sind nicht die Frames.

  4. Avatar von Ingo
    Ingo

    Um die was heißt das nun? Wie hoch ist der tatsächliche input lag?

    Eine Sekunde hat 800 Frames in dem iPhone Video

    Sicher 800 frames? Soweit ich weiß, gibt es zwei Zeitlupenfunktionen bei iPhones. Eine mit 120 und eine mit 240 fps.

  5. Avatar von Ingo
    Ingo

    Wer einen verifizierten Account haben will, der meldet sich bitte bei mir per Mail.

    Ich seh den Mehrwert irgendwie nicht. Wer sich selbst eine persönliche Note geben möchte kann das mittels Gravatar doch viel besser als mit einem blauen Haken.

  6. Avatar von Marc
    Marc

    Nein, weil Du einen Benutzernamen und Passwort von mir bekommst und ich eine verifizierte E-Mail Adresse von dir habe. Ist hier beschrieben und steht auch ab jetzt am Formular beschrieben. Alle Accounts ohne diesen Haken kann man ab jetzt nicht mehr ernst nehmen.

  7. Avatar von Marc
    Marc

    Der Artikel ist nun korrigiert. Videos, Tabellen und Texte habe ich aktualisiert. Das Chart fehlt noch. Danke noch mal an Ingo für das Hinterfragen! Ich habe das auch im Text erwähnt. Ich lösche aber mal alle Kommentare bis die wichtigen dieser Diskussion.

  8. Avatar von joinski
    joinski

    Hast du beim Pi3 WLAN aktiviert und benutzt du das interne Bluetooth vom Pi3?

    Deaktiviere mal WLAN (und nutze ggf. einen USB Bluetooth-Dongle zur Verbindung eines Controllers) und teste dann bitte nochmal.

    1. Avatar von Marc
      Marc

      Weder noch. Ich gehe über Netzwerk dran und nutze kein internes Bluetooth. Entweder PS4 pad direkt per USB oder XBOX wireless pad mit dem usb dongle

      Solche Faktoren hätte man auch beim Test im Menü von Recalbox bemerkt was ja perfekt läuft.

  9. Avatar von Marc
    Marc

    Wieder mal dank Ingo gibt es eine Korrektur der Ergebnisse. Er war so nett und hat ein echtes SNES mit samt CRT Monitor aufgebaut. Das Input Lag war mit diesem Aufbau bei 71 ms.

    Daraufhin habe ich nochmal alle Ergebnisse durchgeschaut und auch in den Videos nochmal die Frames gezählt. Dabei ist mir ein Fehler bei der Berechnung der Menüs von Recalbox und der PS4 aufgefallen. Die waren zu niedrig angegeben. Aufgefallen war das, als das echte SNES sehr dicht an der PS4 lag. Was nicht sein kann. Nun ist alles nochmals korrigiert und gezählt und sollte stimmen.

    Was sich aber über die gesamte Zeit nicht geändert hat, ist das grundsätzliche Ergebnis der Untersuchung: Das Lag kommt durch die Emulation selber und nicht durch die Hardware des Raspberry Pi. Denn die Menüs sind genau so schnell wie bei der PS4.

    1. Avatar von JTR
      JTR

      Jetzt wäre noch interessant was das SNES classic für eine Latenz hat. Habe zwar eines, aber keine passende Kamera.

    2. Avatar von Marc
      Marc

      Schick es mir gerne zu. Ich schick es auch zurück. Adresse steht im Impressum.

  10. Avatar von JTR
    JTR

    Wenn es um Inputlag geht ein interessanter Vortrag von John Carmack dazu wie er solche Probleme bei VR angegangen ist:

    1. Avatar von Marc
      Marc

      Das Video ist wirklich interessant. Vor allem weil er die selbe Methode für die Messungen erklärt, wie ich sie hier genutzt habe.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert