3D-Shooter-ähnlicher Reaktionszeittest




download (366kB) Version 2006/10/29

Version 29.10.2006
- Zielkreuz jetzt kleiner (-40%)
- wenn sich die Bilddateien 'crosshair', 'target', 'wall1', 'ceil', 'floor' als entweder .jpg or .bmp im reaction.exe Verzeichnis befinden werden diese geladen und benutzt. Die Bilder müssen 2^n pixel Auflösung haben, zum Beispiel 256x256. Schwarz wird als transparent gedeutet.

Version 03/2005:
- präziseres timing
- Keine Abhängigkeit mehr von 'wait for VSynch'. Es ist dafür Sorge getragen, dass deine Reaktion verglichen wird mit dem was wirklich gerade auf dem Schirm zu sehen ist (ausgenommen Verzögerungen durch den Monitor).


Dies ist ein Programm um die eigene Reaktionszeit zu testen, besser gesagt die Auge-zu-Hand Verzögerungszeit, und das unter "realistischen" Bedingungen. Man könnte diese Verzögerungszeit auch den "persönlichen Ping" nennen, denn auch sie wird als Ergebnis in Millisekunden (ms) angezeigt. Das Program ist in Delphi geschrieben und nutzt OpenGl. Auch nicht mehr taufrische Grafikkarten sollten kein Problem damit haben, die paar Polygone mit voller Refreshrate darzustellen. Nach Belieben kannst du das Warten auf den VSynch im Grafikkarten-Setup ein- oder ausschalten.

Wo wir gerade dabei sind - Während ich an diesem Programm gearbeitet habe ist mir aufgefallen, dass ich um etwa 20ms unterschiedliche Ergebnisse erziele, je nachdem, ob ich das an meinem Notebook oder an meinem ausgewachsenen PC probiere. Nachdem ich alle Timing-Probleme ausschließen konnte hat sich gezeigt, dass mein großer TFT-Monitor die Bildausgabe auf den Schirm nicht unerheblich verzögert! Der Monitor scheint mindestens einen vollen Frame zwischenzuspeichern bevor er ihn darstellt! Diese Verzögerungszeit ist nicht mit in der üblichen Angabe der Reaktionszeit eines Monitors berücksichtigt. Für einen professionellen Spieler müssten 20ms zusätzlicher Ping einen gewaltigen Nachteil darstellen. Solche Verzögerungen sollten beim Monitorkauf und in Hardware-Tests Beachtung finden. Um den Ganzen Nachzugehen habe ich eine Funktion in das Programm eingebaut mit der man die Verzögerungszeit der gesamten Schleife: gezeichnete Grafik -> Darstellung auf dem Schirm -> optische Maus -> Maustreiber messen und vergleichen kann. Mehr zu Experimenten mit dem screen-mouse loop-back.

Zurück zur menschlichen Reaktionsgeschwindigkeit.
Du musst versuchen dem sich unvorhersagbar bewegenden Ziel zu folgen, wie man in einem Ego-Shooter einem wild umherspringenden Gegner folgen muss. Ich habe das Programm geschrieben, weil es mich interessierte, um wieviel schneller ein geübter Spieler ist als ich, der untrainierte Gelegenheitsspieler. (Solange ich meine Zeit mit OpenGl-Programmierung verbringe werde ich auch nicht besser werden.) Ich gebe zu, nicht viel weniger als etwa 195ms zu erreichen. Die meisten Leute erreichen Werte in dieser Gegend, nicht-Spieler etwa 50ms mehr und Profi- Spieler etwa 20 ms weniger. Um ein besseres Bild von den erreichbaren Werten zu erhalten kannst du mir dein Ergebnis an die untenstehende email-Adresse schicken und auf Wunsch veröffentliche ich es in der Tabelle unten.
Das Ziel folgt einem sogenannten "random walk". Während du versuchst auf die Scheibe zu zielen, werden die Positionen von Scheibe und Fadenkreuz aufgezeichnet und hinterher ausgewertet um die Verzögerung zu ermitteln.
Der einfachste Weg den Test zu starten ist, einfach den 'quick start>>!' button zu drücken. Das Programm geht daraufhin in den Vollbildschirm-Mode und gibt dir 3 Sekunden Zeit zur mentalen Vorbereitung. Dann beginnt das Ziel seinen Tanz und du musst versuchen so nah wie möglich am Zentrum des Ziels zu bleiben. Schiessen musst du nicht auf das ziel, das ist ein pazifistisches Programm! Der Test dauert etwa 16 Sekunden. Wenn du das Programm im Fenster-Modus benutzen möchtest, ('F' schaltet um), musst du die rechte Maustaste zum Umherschauen gedrückt halten.
Nach der Jagd schaltet das Programm zurück in den Fenstermodus und berechnet die Verzögerung zwischen 'Anregungssignal' und deiner Reaktion. Das wird gemacht, indem Anregung und Reaktion zueinander verschoben werden und der mittlere Abstand (RMS) zwischen Fadenkreuz und Ziel für jede Verschiebung berechnet wird. Die Kurve all der RMS-Abstände über der Zeitverschiebung hat dort ein Minimum, wo deine gesuchte Verzögerungszeit ist. Der Wert in der zweiten Zeile ist dein mittlerer Abstand (wieder RMS) zum Zentrum des Ziels in Grad. Zum Vergleich: das ganze Ziel hat einen Durchmesser von 12Grad. Mehr info über die Datenverarbeitung bekommst du zu sehen, wenn du auf den 'more info' button drückst.
Teschnisch gesehen ist der ganze Prozess eine 'Netzwerkanalyse'. Ein System (du) wird mit einem bestimmten Signal angeregt und die Reaktion wird gemessen. Das Ergebnis könnte auch ein Phasen- und Amplituden-Frequenzgang sein (kommt vielleicht später).
In diesem Fall ist das Anregungssignal ein 'random walk' (das ist eine Art von Rauschen) da er einem sich unvorhersagbar bewegenden Gegner ähnelt. Ein random Walk hat einen 1/f-Frequenzgang, das heisst das tiefe Frequenzen einen höheren Anteil an der Bewegung haben als hohe. Dieser random walk ist symmetrisch, nach der Hälfte der Zeit geht es den gleichen Weg zurück. Das ist nicht notwendig für die gegenwärtige Art der Berechnung aber günstig für eine Auswertung mittels Kreuzkorrelation (derzeit nicht benutzt). Da wahrscheinlich niemand Bewegungen mit mehr als 5 Hz Frquenz folgen kann, schneide ich alle höheren Frequenzen weg. Dadurch wird die Bewegung des Ziels angenehm glatt.
Im Prinzip könnten auch weitere für den Geek interessante Größen wie Phasen- und Amplituden-Antwort und die Frequenzabhängigkeit der Verzögerungszeit bestimmt werden.
Beachte die kleinen sich bewegenden Quadrate in der linken unteren Grafik, wenn du die Maus in der oberen linken Grafik bewegst. Mit der unten liegenden checkbox kann man zwischen einem authentischen Replay und einer Animation mit kompensierter Verzögerung wählen.
Die Settings für Auflösung, Farbtiefe und Frequenz brauchen normalerweise keine Änderung oder sind selbsterklärend. Ebenso sind die Renderer-Einstellungen eher der Vollständigkeit halber vorhanden.
Du kannst die 'mouse sensitivity' weiter nach links schieben, wenn dir großräumigere Bewegungen der Maus lieber sind.
Die checkbox 'restrict to horizontal movement' beschränkt die Bewegung auf die Horizontale Richtung, wenn das der Realität in deinem Lieblings-Game näher kommt.
Manche Leute bevorzugen eine in der vertikalen Richtung umgekehrte Mausbewegung, das ist wofür die andere Checkbox gut ist. Die Editbox für den 'excitation frequency lowpass' akzeptiert Werte zwischen 2 und 20 Hz. Je kleiner der Wert wird, desto geschmeidiger wird die Bewegung des Ziels. Die Bewegung enthält dann weniger hohe Frequenzkomponenten. In der Nähe zu 2 Hz wird die Bewegung aber vorhersagbarer und die erreichte Verzögerungszeit wird kürzer.
Derzeit speichert das Programm die Konfigurationsdaten nicht ab, deswegen muß man alle evtl. Einstellungen nach jedem Start wieder machen.
Nur aus Spaß habe ich einen aimbot, ein automatisches Zielverfolgungssystem, in das Prog eingebaut. Der aimbot sieht auch nur, wo das Target im letzten Bild war und versucht dem Ziel mit den gleichen Controls zu folgen wie sie der Benutzer hat. Er hat keinen unfairen Vorteil - außer purer Rechengeschwindigkeit. Die PID-Parameter der Regelschleife bestimmen, wie schnell der aimbot reagiert. Aimbotparameter probiert man besser im Fenstermodus aus. Betrüge dich nicht selbst! :-)




Tasten:
f: wechseln zwischen Vollbild/Fenstermodus
esc: Rückkehr in den Fenstrmodus
a: aimbot an/aus

Maus: zielen, rechte Maustaste im Fenstermodus


Sende dein Ergebnis und Kommentare an:
Bitte entschuldige, wenn die Antwort ein paar Tage auf sich warten lässt.




Das Prog ist kein optisches Glanzstück, ist noch nicht fertig und Bugs sind nicht auszuschließen.


Hall of Fame



Hier habe ich einige Resultate zusammengestellt die mir per mail geschickt wurden oder im usenet veröffentlicht wurden.


Name/nick Bereich Typisches Ergebnis Mittlerer Abstand zum Ziel
Grad
Adam Balogh-803.7
med1xza - 89 1.9
Alexander G.
sonyfreak
-1544.8
Paul Brocklehurst1561564.1
Benjamin Stanka
age 30
1631634.5
bryan keleman
Team1hp_jetset
1651653.8
Sami "some" Jokela
age 24
165 - 170167-
Matvey "TBAPb" Smolovich
age 21
165 - 1751703.5
Nicholas Borelli162 - 1801704.0
Nikk Lovekin
Kinematix age 17
167 - 1701704.5
Apox77169 - 1911704.5
Torben Maurer
miez
- 1704.9
Jean Bibeau
Wrebb
1721723.8
John "F474L" Burrell172 - 1851754.8
Federico Nose177177-
William "R34c710N" Register174 - 1851804.4
Tanter
Ralf Richter
179 - 1881825.0
Kevin Lin1801803.9
Nathan Moye1861864.3
Pjotr K.
Presley
-1954.3
Peter Hill194 - 2092004.4
Greason Maddox-2004.5
myself
EMwave in Steam
195 - 2102054.8
Terrance Schultz2072074.0
matt hydes2112114.6




Diese Ergebnisse wurden mit einer älteren Version des Progs ermittelt, in der alle Zeiten etwa 20ms zu lang herauskamen.

Name/nick Bereich typisch
fungus190190
-=[SFS]=-[Zaknafein]197197
Allan Bruce200-210205
FaMiNe202, 226, 218, 197211
Cookie McCrumble218, 218, 218218
Poison64230230
Lief235235
myself
EMwave in Steam
220..245235
Andrew Lovern260260
Jethro270270
Cannon Fodder (67 years old)285, 255, 273271
Jordi Xucla278278


11.05.2014
download (366kB) Version 2006/10/29