Frage zu Tearing (+Tickrate)

kugelwasser

Lieutenant
Registriert
Aug. 2012
Beiträge
1.020
Also folgendes:
http://www.indiedev.de/wiki/Tearing
in aktueller TFT-Bildschirm zeigt in der Regel 60 Bilder pro Sekunde an. Der Bildaufbau dauert dabei eine gewisse Zeit. Rein rechnerisch bis zu 16.6ms (1 Sekunde durch 60 Bilder). Wenn die Grafikkarte nun mit 120 Bildern pro Sekunde ihre Bilder ausgibt und rendert, dann zeigt der Monitor nur jedes zweite Bild der Grafikkarte an. Dabei kann es nun passieren, dass die Grafikkarte anfängt ein Bild aufzubauen und nachdem dieser Vorgang zur Hälfte abgeschlossen ist, beginnt der Monitor mit der Anzeige dieses Bildes. Die Grafikkarte erzeugt nun aber schon ein anderes Bild. Dadurch sieht man in der oberen Hälfte das eine Bild und in der unteren Hälfte das andere Bild.

Das bedeutet ja bei 120fps, dass es jede 16,6ms ein Tearingstreifen gibt, also in der oberen Hälfte ein altes Bild, und in der unten Bild ein neuen Bild. Ist ja klar, denn jede 16,6ms (also jedesmal wenn ein 60Hertz Monitor ein Bild dargestellt hat) schafft die Grafikkarte bei 120fps dann ja zwei Bilder. Also sendet die Grafikkarte dem Monitor nach 8,33ms ein Bild. Der Monitor braucht ja 16,6ms um das Bild darzustellen. Nun nach 8,33ms hat der Monitor das Bild zur Hälfte dargestellt, aber die Grafikkarte hat schon ein zweites Bild berechnet. Das heißt die lässt den Monitor die untere Hälfte des zweiten Bildes darstellen. So weit so gut, dass bedeutet wie gesagt alle 16,6ms ein Tearingstreifen.

Wenn man nun allerdings mit 180fps spielt, gibt es ja logischerweise 2 Tearingstreifen. Und mit 240fps gibts 3 Tearingstreifen usw. Also je höher die fps, desto mehr Tearing Streifen.

Aber es ist ja ein Fakt, dass man Tearing weniger wahrnimmt, wenn die fps hoch sind. Liegt das nun einfach daran dass das Auge einfach z.b. 4 Bilder, die jeweils um 25% zeitversetzt sind (und somit ja 3 Tearingstreifen bei 240fps), weniger stark wahr nimmt, als 3 Bilder, die um jeweils 33% zeitversetzt sind (und somit 2 Tearingstreifen bei 180fps)? Vermutlich ja schon, kann man sich ja auch als Daumenkino vorstellen?

Das bedeutet dann ja auch logischerweise je mehr fps, desto früher sieht man die Gegner, denn je mehr fps man hat, desto mehr aktuelle Teilbilder gibt es ja. Und damit man das fairer gestaltet gibts die Tickrate bei den Servern, oder?(bzw. die Tickrate gibts sowieso, weil es sonst zu viel Datenverkehr gibt) Das bedeutet wenn die Tickrate z.b. 128 ist, also der Server dann 128 mal in der Sekunde die eigene Position den anderen sendet, und die Positionen der anderen Spieler einem selber sendet, bringen auch höchstens 128fps was?

mfg
 
Zuletzt bearbeitet:
Die Grafikkarte arbeitet nicht gleichmäßig. Bei 60fps (ohne VSYNC) auf einem 60Hz Monitor prüft der Monitor fest alle 1/60s nach einem Bild. Die Grafikkarte gibt immer ein Bild aus, wenn sie fertig ist, solange das nicht der Fall ist, liegt das vorherige Bild im Puffer.
Es kann durchaus passieren, dass in derselben Sekunde ein Bild 4/60s angezeigt wird und 3 Bilder so nur 1/180s anliegen. So kann es passieren dass Bilder verschluckt werden.
Die angezeigte Framerate ist darüber hinaus ein Mittelwert und nicht die Anzahl der Bilder in der entsprechenden Sekunde.
 
Tearing ist so korrekt, allerdings wird bei den meisten Spielen zwischen den Ticks auf dem Server interpoliert (sieht man gut bei den Source-Spielen mit irgendwelchen Serverhacks), der Client rechnet immer aufgrund der Daten des letzten Ticks weiter, um eine flüssige Animation zu liefern. Daher lohnen sich auch mehr FPS als Ticks/s auf dem Server laufen.
 
SavageSkull schrieb:
Die Grafikkarte arbeitet nicht gleichmäßig. Bei 60fps (ohne VSYNC) auf einem 60Hz Monitor prüft der Monitor fest alle 1/60s nach einem Bild. Die Grafikkarte gibt immer ein Bild aus, wenn sie fertig ist, solange das nicht der Fall ist, liegt das vorherige Bild im Puffer.
Es kann durchaus passieren, dass in derselben Sekunde ein Bild 4/60s angezeigt wird und 3 Bilder so nur 1/180s anliegen. So kann es passieren dass Bilder verschluckt werden.
Die angezeigte Framerate ist darüber hinaus ein Mittelwert und nicht die Anzahl der Bilder in der entsprechenden Sekunde.

Öhm also meinst du jetzt das die Grafikkarte natürlich für ein Bild länger braucht wenn da gerade irgendwas explodiert, und wiederum für ein anderes Bild kürzer braucht wenn das Bild nicht aufwendig ist? Also das es so immer zu Verschiebungen kommt, und dann dass die Grafikkarte dann teilweise für ein Bild richtig lange braucht, und deswegen andere zu kurz kommen?

Hancock schrieb:
Tearing ist so korrekt, allerdings wird bei den meisten Spielen zwischen den Ticks auf dem Server interpoliert (sieht man gut bei den Source-Spielen mit irgendwelchen Serverhacks), der Client rechnet immer aufgrund der Daten des letzten Ticks weiter, um eine flüssige Animation zu liefern. Daher lohnen sich auch mehr FPS als Ticks/s auf dem Server laufen.

Ok Moment.
Ergänzung ()

Hancock schrieb:
Tearing ist so korrekt, allerdings wird bei den meisten Spielen zwischen den Ticks auf dem Server interpoliert (sieht man gut bei den Source-Spielen mit irgendwelchen Serverhacks), der Client rechnet immer aufgrund der Daten des letzten Ticks weiter, um eine flüssige Animation zu liefern. Daher lohnen sich auch mehr FPS als Ticks/s auf dem Server laufen.

Ok also das bedeutet bei z.b. einem 66 Tick Server gibt der Server alle 15,15ms die Position der Spieler weiter. Und zwischen der Position von der Zeit 15,15ms und der Zeit 30,3ms (also der zweite Tick) wird diese Bewegung die die Models gemacht haben interpoliert. So weit so logisch. Allerdings würde man doch nichts von der Animation merken, ob der Server interpoliert oder nicht. Bei Counterstrike sind das ja die Hitboxen, und die sieht man als Spieler sowieso nicht, man sieht ja nur die Models. Außer man würde die Models und die Hitboxen synchronisieren, was ja irgendwie ein must-have ist, denn sonst würde das Model den Hitboxen ja hinterherhinken, oder (ich mein früher war das bei Cs mal so, dass Hitboxen und Models nicht synchron waren, ich frag mich aber irgendwie was der Sinn davon war, dass asynchron laufen zu lassen)?

Aber ich versteh jetzt nicht wieso man jetzt z.b. bei einem Tickrate 66 Server besser mit z.b. 120fps@60Hertz fährt, als mit 66fps@60Hertz. Nehmen wir mal an Spieler A bewegt sich einen Tick, also 15,15ms weiter, und er spielt mit 66fps. Nunja gut die Grafikkarte benötigt ja nun 15,15ms um ein Bild zu berechnen, und hat nun noch pi mal Daumen 1ms Zeit um ein nächstes Bild zu berechnen. Und da fängts schon an, innerhalb der 1ms kann die Grafikkarte ja kein vollständiges Bild berechnen, deswegen denk ich das die das angefangene Bild dann im nächsten Monitorrefresh anzeigen lassen wird. Und dann mit dem nächstens Bild anfängt. Also entsteht ganz oben im Bild ein Tearingstreifen (mit einem alten Teilbild) und im restlichen Bereich dann ein neues Teilbild und so müsste es dann immer weiter gehen, vermute ich mal?

Aber das nur nebenbei, nach 15,15ms sendet der Client dem Server dann die Position und ab hier hab ich so ungefähr ne Denkblockade.
Ergänzung ()

Und ich hätte auch noch neben dem ein paar Fragen:
1.) Wenn man mit 30fps spielt, braucht die Grafikkarte ja 33,3ms um ein Bild zu berechnen. Ich würde vermuten der Monitor zeigt dann zwei mal das gleiche Bild an, bevor die Grafikkarte wieder ein Bild fertig berechnet hat. Und das resultiert dann in Ruckeln. Aber theoretisch gäbe es doch kein Tearing wenn man unter 60fps hat? Aber wenn ich in Counterstrike die fps auf 30 stelle, und dann durch die Landschaft gucke, fällt mir schon Tearing auf.

2.) Wenn man exakt 60fps hat, hat man doch eigentlich auch kein Tearing. Aber wenn ich in Counterstrike die fps auf 60 stelle, hab ich dennoch Tearing. fps auf 60 stellen und Vsync einschalten ist ja nicht das gleiche, aber wieso hat man mit 60fps ohne Vsync tearing?
 
Zuerst: Du musst zwischen der Zeit zwischen zwei Bildern und der Latenz unterscheiden.

Das mit Model und Hitboxen, das ist genau das Problem, bei dem man zwischen der (theoretischen) Möglichkeit zu Cheaten und einem akzeptablem Gefühl der "Echtzeit" entscheiden muss.

Wenn ich es richtig in Erinnerung habe, bekommst du sozusagen ein Abbild vom Server, mit dem dann weitergerechnet wird. Wenn du jetzt jemanden in diesem Abbild triffst, dann sagst du zum Server "Ich hab x getroffen zum Zeitpunkt Abbildzeit+2 ms" und der Server prüft entsprechend, ob du das überhaupt konntest. Dadurch kannst du die Tickrate sehr tief ansetzten, allerdings "springen" irgendwann die anderen Spieler ("Aus einer Vorwärtsbewegung zu einer Seitwärtsbewegung ist im schlechtesten Fall sqrt(2)*v*ticks Differenz, die das Model dann springt/-en muss).

Warum sind mehr FPS besser:
Die Frage ist die Selbe wie "Warum hat mein TV 200 Hz, wenn Sky doch nur mit 50 Hz sendet?"
Wenn du mehr Bilder hast, wirkt es einfach flüssiger (und es sinkt deine Latenz (außer bei Multi-GPU)).

Zu Ergänzung 1:
Du hast in jedem zweiten Bild Tearing, da...

Zu Ergänzung 2:
...die Phase der Grafikkarte nicht mit der des Monitors übereinstimmen muss. Daher bekommst du auch bei "genau" 60 FPS Tearing, da mglw. Grafikkarte und Monitor genau um z.B. PI phasenverschoben arbeiten. Auch hat die Grafikkarte ein sehr großen Jitter.
VSync unterdrückt Tearing aktiv, indem das Bild nur "zwischen" den Monitorbildern ausgetauscht werden darf. Das kann u.U. aber zu deutlich höherer Latenz führen.
 
Zurück
Oben