だんご Sep 11, 2016 @ 11:21pm
Die Sache mit VSync und den Frames
Guten Morgen o/
Ich hätte kurz eine bescheidene Frage zu einer Entdeckung welche mich ein wenig verwundert. Ich habe testweise (aufgrund starken Tearings) bei GTA V VSync angemacht und zusätzlich per FPS-Limiter auf 59 gelockt (angeblich soll dies den leichten Inputlag durch VSync regulieren).

Nun habe ich mich bezüglich VSync ein wenig genauer belesen und mich verwundert nun folgendes. Laut diversen Foren und Websites wird bei aktivierter VSync ja die Frameausgabe der GPU "zurückgehalten" bis der Monitor ein neues Bild verarbeiten kann. Bei meinem 60Hz Monitor und aktivierter Vsync (ohne Limiter) wird auf 60 FPS gelockt und brav mit dem Monitor synchronisiert.

Wenn ich nun aber in einer recht Leistungshungrigen Stelle im Spiel unter die 60 FPS falle (als Beispiel sagen wir einfach mal 54) sollten (ohne Tripplebufferin) die FPS doch auf 30 einsinken. Wenn auch 30 FPS nicht mehr geschafft werden dann 20 etc. (60>30>20>15>12 bzw mit Tripplebuffering 60>45>30>... ..).

Dies ist aber bei mir nicht der Fall. Egal ob ich ohne zusätzlichen FPS-Limiter spiele oder mit. Als Beispiel ohne FPS-Limiter: Ich habe feine 60 FPS und biege in einen Block ein in dem meine FPS auf 54 fallen. Dann fallen diese auch auf exakt 54 oder schwanken lustig hin- und her wie als wenn ich Vsync nicht aktiviert hätte. Es wird nicht auf 45 oder 30 gelockt.

Nicht das mich das nun stören würde - allerdings widerspricht es dem was ich mir angelesen habe. Wieso ist das denn so? Und ich spreche hier wirklich von VSync (NICHT Adaptiver Vsync). Und es spielt keine Rolle ob ich über NVidia die Vsync per Hand auf "Ein" stelle oder auf "Einstellung der 3D Anwendung" und dann im Spiel selber VSync aktiviere.

Ich habe das mal mit einigen Spielen getestet zB. GTA V, Far Cry 3, Skyrim etc. und überall schwanken die FPS bei Einbrüchen ganz lustig hin- und her werden aber nie auf ein Vielfaches abgeschnitten zB 45/30 oder ähnliches.

Für Antworten wäre ich sehr dankbar.
< >
Showing 1-7 of 7 comments
Kargor Sep 12, 2016 @ 1:49am 
VSync lockt nix. Der Monitor gibt 60 Bilder/Sekunde aus -- er dreht aber zwischendurch nicht Däumchen, sondern jedes Bild braucht 1/60 Sekunde um zum Monitor übertragen zu werden. Also quasi Upload-Speed zum Monitor-

Also: das Spiel berechnet ein Bild und die Grafikkarte schickt es während der nächsten 1/60 Sekunde zum Monitor, der es brav von oben nach unten anzeigt während es reinkommt.
(Das war bei Röhren tatsächlich so -- die Elektronenstrahlen sind von der oberen linken Ecke erst nach rechts gewanders, dann "newline wieder zum linken Rand zurückgespult, dann wieder nach rechts usw. bis er unten angekommen ist, und dann halt wieder nach oben links und wieder von vorne).

Währenddessen berechnet das Spiel aber schon das nächste Bild, und jetzt sagen wir einfach mal daß es nach der Hälfte der "Bild-zum-Monitor-Schicken"-Zeit schon fertig ist. Ohne aktiviertes VSync würde es das nächste Bild sofort "abgeben", die Grafikkarte würde statt dem vorherigen jetzt halt die Daten aus dem neuen Bild senden, und das Ergebnis auf dem Monitor ist daß in der oberen Hälfte das alte Bild und in der unteren Hälfte das neue Bild zu sehen ist.

Mit VSync wartet er bis das aktuelle Bild komplett angezeigt ist, und schickt erst dann die Daten vom neuen Bild auf den Weg.
Last edited by Kargor; Sep 12, 2016 @ 1:52am
Weltenschmerz Sep 12, 2016 @ 10:58am 
in den meisten Steamanwendungen findest Du sogenannte Startparameter. Die findest Du meistens : Bibliothek/Rechtsklick auf das Spiel/Eigenschaften. Dort kannst Du verschiedene Parameter festlegen. Beispiel Trainsimulator Startparameter -FPSLimit=60 ... so halte ich die Frames bei 60 .... -FPSLimit=30 eben bei 30 usw. Welche Startparameter zu welchem Spiel muss man ergoogln .... oder,
du nimmst den NvidiaInspector bei Nividiakarten ... bei AMDkarten gibs auch solch ein Tool ...heißt irgendwas mit Pro ... diese beiden Vorschläge sind die besseren, als die Parametergeschichte

AMD: http://www.radeonpro.info/

Nvidia: http://www.guru3d.com/files-details/nvidia-inspector-download.html
Last edited by Weltenschmerz; Sep 12, 2016 @ 11:02am
だんご Sep 13, 2016 @ 12:56am 
Auch wenn die Antworten vermutlich nett gemeint sind, so sind die meisten doch einfach nur absolut am Thema vorbei - oder sogar falsch.

Originally posted by Bang Boom Dang Im so sensitive:
Also ich vermute, daß das manchmal schwer nachzuvollziehen ist, da so Programme die dein Treiber enthalten könnte wie GF-Experience etc sich mit deinen selbst gesetzten settings,...überschneiden.

Keine Ahnung. V-Sync ist für mich eigentlich mehr son CS-Thema...woanders fällt nicht so ins ..Gewicht.

Was ist hier schwer nachvollziehbar? Und was hat GeForce Experience bitte mit meinen in der Nvidia Systemsteuerung vorgenommenen Einstellungen für die Grafikkarte zu tun? Richtig: Absolut nichts. GeForce Experience ist lediglich ein Zusatzprogramm / Werkzeug von Nvidia um aktuelle Treiber bereitzustellen, Grafikeinstellungen innerhalb eines Spieles auf die Hardware zu optimieren und für den ganzen anderen Kram wie ShadowPlay etc.pp. Es fummelt aber weder in den Einstellungen vom Nvidia Treiber herum noch hat es Auswirkungen auf VSync (außer du optimierst zB über GeForce Experience ein Spiel und aktivierst darüber in den Spieleinstellungen VSync oä). Es ging mir hier aber um das von mir og. "Problem" und meine Einstellungen in der Nvidia Systemsteuerung und meinen damit verbundenen Beobachtungen im Spiel selber und den Informationen welche ich mir bezüglich VSync angelesen habe. Eingangs habe ich auch erwähnt, dass es keine Rolle spielt ob ich VSync über den Treiber erzwinge (VSync EIN - in dem Fall ist es egal welche Spielinternen Einstellungen getätigt sind. Du kannst zB bei GTA-V auch VSync im Spiel selber auf "AUS" stellen und in der Nvidia Systemsteuerung aber auf "EIN" stellen und hast VSync). Wird in der Nvidia Systemsteuerung "Einstellung für 3D Anwendungen" ausgewählt wird VSync über das Spiel aktiviert bzw. deaktiviert... Nur leider hat der ganze Kram absolut nichts mit meiner Frage zu tun. Trotzdem vielen Dank für deine Bemühungen.

Originally posted by Bang Boom Dang Im so sensitive:
...da gibts aber auch ne option wie viele vorgerenderte bilder berechnet werden sollen.

Nochmal vielen Dank für deine Bemühungen.....Aber die Option "Maximale Anzahl der vorgerenderten Einzelbilder" hat weder etwas mit VSync zu tun, noch hat es direkt etwas mit der Grafikkarte zu tun. Diese Option erlaubt eine Einstellung über die von deiner CPU für die Grafikkarte "vorbereiteten/vorgerenderten" Bilder.

Originally posted by Kargor:
VSync lockt nix. Der Monitor gibt 60 Bilder/Sekunde aus -- er dreht aber zwischendurch nicht Däumchen, sondern jedes Bild braucht 1/60 Sekunde um zum Monitor übertragen zu werden. Also quasi Upload-Speed zum Monitor-

Also: das Spiel berechnet ein Bild und die Grafikkarte schickt es während der nächsten 1/60 Sekunde zum Monitor, der es brav von oben nach unten anzeigt während es reinkommt.
(Das war bei Röhren tatsächlich so -- die Elektronenstrahlen sind von der oberen linken Ecke erst nach rechts gewanders, dann "newline wieder zum linken Rand zurückgespult, dann wieder nach rechts usw. bis er unten angekommen ist, und dann halt wieder nach oben links und wieder von vorne).

Währenddessen berechnet das Spiel aber schon das nächste Bild, und jetzt sagen wir einfach mal daß es nach der Hälfte der "Bild-zum-Monitor-Schicken"-Zeit schon fertig ist. Ohne aktiviertes VSync würde es das nächste Bild sofort "abgeben", die Grafikkarte würde statt dem vorherigen jetzt halt die Daten aus dem neuen Bild senden, und das Ergebnis auf dem Monitor ist daß in der oberen Hälfte das alte Bild und in der unteren Hälfte das neue Bild zu sehen ist.

Mit VSync wartet er bis das aktuelle Bild komplett angezeigt ist, und schickt erst dann die Daten vom neuen Bild auf den Weg.

Du kannst dir ja mal gerne einen Taschenrechner schnappen und selber rechnen. Bei aktivierter VSync werden die maximalen FPS sehr wohl limitiert und somit gelockt. Am Beispiel für einen 60Hz Monitor wäre dies ein FPS-Lock von exakt 60 FPS. Warum? Bei einem 60Hz Monitor kann die Anzeigedauer eines einzelnen Bildes (Frame) nur maximal 1/60s (=1 Refresh alle 16,67 ms) betragen. In dem Fall wird mit jedem Monitorrefresh auch ein neues Bild angezeigt. Vorausgesetzt sind natürlich hier, dass die Grafikkarte stabile 60 FPS liefert. Ferner sind niedrigere Werte möglich (müssen aber ein Vielfaches des maximalen Wertes sein). Also zB. 1/30s (=2 Monitor Refresh (neues Bild bei jedem zweiten Refresh). Ansonsten würde es nämlich wieder zum Tearing kommen. Die FPS werden hier von der Grafikkarte immer so lange zurückgehalten bis der Monitor mit dem Darstellen des letzten Bildes fertig ist und mit einem neuen Zyklus beginnt.

Und das hat nichts mit "Upload zum Monitor" zu tun.Nicht das Bild braucht 1/60s (also 16,67 ms) zum Monitor sondern der Monitor (60Hz) kann maximal alle 16,67ms ein neues Bild darstellen. Die Übertragungsdauer der Daten von Grafikkarte zu Monitor sind wesentlich kürzer.

Bei aktivierten VSync mit DB (bei 60Hz) können MAXIMAL 60 FPS berechnet werden. Würden mehr wie 60 FPS berechnet würde der Backbuffer voll laufen würde und auf den nächsten Refresh gewartet werden müsste. Aus dem Grund werden die maximalen Frames bei VSync sehr wohl gelockt. Das kannst du nun gerne selber nachrechnen, dir bei Wikipedia durchlesen und/oder einfach mal selber testen.

Und hier kann ich mir nun selber meine Antwort auf meine Eingangs gestellte frage geben (wenn auch nur durch den freundlichen NVidia Support). Es muss hier zwischen den FPS unterschieden werden die aktuell von der Grafikkarte berechnet werden und den effektiven (also im Rahmen von VSync auch darstellbaren) FPS. Das Overlay vom Riva Statistic Tuner, dem Steam Overlay etc.) zeigt die aktuell von der Grafikkarte maximal berechneten FPS an - nicht die effektiv darstellbaren bei aktivierter VSync. Fallen die FPS also unter 60 FPS zB. auf 54 FPS betragen die effektiven FPS bei Vsync mit DB 1/30s (vielfaches von 1/60s). Beträgt also exakt 2 Refreshs. Bei jedem zweiten Refresh wird also ein neues Bild angezeigt. Es können effektiv keine 54 FPS dargestellt werden weil sonst die Framerate nicht mehr synchron zum Monitor laufen würde. Man hätte also wieder Tearing da ein Frame in den Refreshzyklus reingeschoben werden würde.

Könnten zB. auch keine 30 FPS von der Grafikkarte geliefert werden (zB. nur 27 FPS) dann würden effektiv nur noch 20 FPS angezeigt, da das Bild im Backbuffer noch fertig berechnet werden muss und dann bis zum nächsten Monitorrefresh im Backbuffer verbleiben MUSS (da mit aktivierter VSync schließlich immer darauf gewartet werden muss bis der Monitor seinen nächsten Refresh beginnt. Würde im laufenden Darstellungszyklus ein Bild eingeschoben hätten wir das gleiche Spiel wie OHNE Vsync).......

Und zu dieser Antwort ergänzend kurz die Erkörung wie sich dies bei aktivierten rTB und cTB (Tripple Buffering) verhält:

Mit Tripple Buffering (egal welche der beiden Methoden) wird ein weiter Backbuffer hinzugefügt (Es stehen also ein Frontbuffer und zwei [statt nur einem - wie bei DB] Backbuffer zur Verfügung). Bei aktivierter VSync unter 60Hz betragen die maximalen FPS 60. Durch den zusätzlichen Backbuffer laufen niemals alle drei Buffer bei 60 FPS voll. Wenn ein Backbufffer vollgelaufen ist wird nämlich im zweiten weitergerechnet. Dadurch ist es dann möglich zB 40 FPS zu berechnen UND darzustellen trotz aktivierter VSync.

Aber aufgrund der synchronisierung mit der Minitorfrequenz sind trotz der 40 FPS noch immer nur Frametimes von maximal 16,67 oder 33,33 ms möglich. Also ein Bild wird entweder einmal oder doppelt angezeigt in diesem Beispiel. Dies ist auch der Grund für den weiter erhöhten Inputlag bei rTB und CTB wenn die FPS welche von der Grafikkarte berechnet werden unter 60 FPS fallen. Durch diesen weiteren Backbuffer kann also die Bildrate des Monitors von der GPU entkoppelt werden. Wenn ein Bild fertiggestellt ist, muss die GPU nun nicht mehr warten, bis der Swap-Befehl ausgeführt wird, sondern kann direkt im anderen Backbuffer weiterarbeiten.

Bei dem Beispiel mit 40 FPS entspricht dies also der Anzeigefolge: Bild 1, Bild 1, Bild 2, Bild 3, Bild 3, Bild 4, Bild 5, Bild 5 etc. pp.

Man hat somit also eine höhere durchschnittle FPS Anzeige als bei DB hat man aber aufgrund der schwankenden Frametimes ein eben den gefühlt höheren Inputlag.

Originally posted by Cadwell:
in den meisten Steamanwendungen findest Du sogenannte Startparameter. Die findest Du meistens : Bibliothek/Rechtsklick auf das Spiel/Eigenschaften. Dort kannst Du verschiedene Parameter festlegen. Beispiel Trainsimulator Startparameter -FPSLimit=60 ... so halte ich die Frames bei 60 .... -FPSLimit=30 eben bei 30 usw. Welche Startparameter zu welchem Spiel muss man ergoogln .... oder,
du nimmst den NvidiaInspector bei Nividiakarten ... bei AMDkarten gibs auch solch ein Tool ...heißt irgendwas mit Pro ... diese beiden Vorschläge sind die besseren, als die Parametergeschichte

AMD: http://www.radeonpro.info/

Nvidia: http://www.guru3d.com/files-details/nvidia-inspector-download.html

Was hat das mit meiner Frage zu tun? Nichts, oder? Ich habe EIngangs auch gesagt, dass ich mittels FPS-Limiter zusätzlich limitiere. In diesem Fall benutze ich sogar aktuell den NVidia Inspector (vorher MSI Afterburner in Verbindung mit Riva Tuner). Hat nur absolut nichts mit meiner Frage zu tun und hilft mir auch absolut nicht weiter. Ich wollte nicht wissen wie und ob ich meine FPS auf 60 limitieren kann.... Trotzdem vielen Dank für deine Zeit.
just.kamk /idle Sep 13, 2016 @ 1:19am 
Originally posted by Perk:
... und überall schwanken die FPS bei Einbrüchen ganz lustig hin- und her werden aber nie auf ein Vielfaches abgeschnitten zB 45/30 oder ähnliches.

Für Antworten wäre ich sehr dankbar.
TripleBuffer an?
Einstellung wird irgendwo übeschrieben?

Ansonsten würde ich vermuten das es sich ganz einfach um einen Auslesefehler handelt - Beispiel: Programm xyz liest buffer aus, GPU verwirft am Ende allerdings x frames um target zu halten.
だんご Sep 13, 2016 @ 1:38am 
@kamk

Im Rockstar Forum habe ich am Sonntag gelesen, das in einem vergangenen Patch auch Triple Buffering in GTA-V eingefügt wurde. Laut NVidia lässt sich über die NVidia Systemsteuerung und der Option "Dreifach-Puffer" zwar das Triple Buffering aktivieren / erzwingen, allerdings hat dies nur Auswirkungen bei OpenGL Spielen mit aktivierter VSync.

Für zB DX11 muss die Funktion vom Spiel selber bereitgestellt werden (was laut Rockstar Forum seit einem vergangenen Patch so ist [Vorausgesetzt VSync wird über das Spiel selber aktivier, also VSync in den Spielsettings auf "An" > ACHTUNG: Darf nicht auf "An (halbe) stehen). Für Spiele die diese Einstellung von Haus aus nicht anbieten kann zB mit dem Tool "D3DOverrider" gearbeitet werden (Bestandteil vom Riva Tuner [ACHTUNG: Nicht im Riva Tuner Statistic enthalten. Direkt auf der guru-page den Riva Tuner 2.irgendwas laden. Ansonsten hat sich das "Problem" wie gesagt gelöst. Die FPS-Anzeige stellt die FPS der GPU da und nicht die effektiven (mit Vsync @DB/rTP/cTP darstellbaren) FPS. Deckt sich mit den Ergebnissen aus dem Benchmark.

Bench Viewer Report
Total Frames 2181
Total Time 49.691
Avg. time 22.78 ms (44 fps)

Wird also korrekt "beschnitten". Hätte mich auch gewundert da sonst Tearing hätte auftreten müssen) VSync bei GTA-V spielt sich zwar noch recht gut, andere Titel (insbesondere FPS oä.Competive Spiele) würde ich damit aber nicht spielen. Ich werde mich mal langfristig nach einem GSync Monitor umschauen. Einige gibt es ja schon für ~300 EUR.
just.kamk /idle Sep 13, 2016 @ 1:49am 
S.o., wie vermutet.
Bin mir nicht ganz sicher weshalb du hier halbe Aufsätze schreibst, aber najo, jedem das Seine.
だんご Sep 13, 2016 @ 1:57am 
Exakt. Wie du sagtest. Die GPU berechnet zwar mehr, um das für VSync passende Target aber zu halten unterscheiden sich die effektiv dargestellten FPS.

PS: Ich schreibe halt gerne. Vielleicht wundert sich ja bei Zeiten (obwohl ich dies für unwahrscheinlich halte) über dieses "Problematik" und dann findet man hier ggf. eine schöne Zusammenfassung. Mal ganz abgesehen davon konnte ich den vorherigen Blödsinn wie "Upload zum Monitor" etc. nicht so einfach stehen lassen der zB. von Kargor geschrieben wurde.

Dir aber vielen Dank für deine konstruktiven Antworten. Schön wenn nicht jeder am Thema vorbeischreibt :)
< >
Showing 1-7 of 7 comments
Per page: 1530 50

Date Posted: Sep 11, 2016 @ 11:21pm
Posts: 7