PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VSync löst Ruckler aus?


Seph
2011-12-16, 17:18:19
Mir ist jetzt schon bei einigen Spielen aufgefallen (bspw. PES 2012, Witcher2), dass VSYNC zwar Tearing beseitigt, gleichsam aber Ruckler auslöst. Es wirkt so, als würde das Spiel immer dann Ruckeln, wenn es ohne VSync tearen würde (vllt. etwas weniger häufig). Das ist nicht bei allen Spielenso (glaub ich) und schwankt zwischen kaum wahrnehmbar und deutlich wahrnehmbar (TW2). Die Ruckler sidn keien Einbrüche der Framerate. Mehr ein kurzes "stottern" wobei das Spiel aber im normalen Tempo weiterläuft. Sie sind nicht wirklich mit richtigen Slowdowns gleichzusetzen, eher mit kurzen, "sprunghaften" Veränderungen.

Kann mir das jemand technisch erklären? Oder macht meine Beobachtung keinen Sinn.

Tesseract
2011-12-16, 18:03:52
die frage ist ob vsync überhaupt vsync ist. ich hab witcher 2 noch nicht gespielt, aber es gibt viele spiele, (z.B. dead space) die einen einfachen frame-limiter als "vsync" bezeichnen was technisch natürlich nicht stimmt. nicht selten lassen sich die probleme lösen, wenn man ingame den "vsync" deaktiviert und einfach per treiber forciert.
ansonsten sollte vsync mit aktivem tiple buffering kaum langsamer als ein komplett freier bufferswap sein.

es kann sich natürlich auch um ein problem des treibers handeln. meine 5870 hatte so ein stottern z.B. manchmal im zusammenhang mit MSAA, nicht jedoch mit SSAA obwohl ersteres natürlich klar schneller sein sollte.
schon mal an verschiedenen anderen einstellungen gedreht und das ganze beobachtet?

Maorga
2011-12-16, 18:06:37
Vsync.
Graka wartet darauf, dass das Bild komplett auf dem Bildschirm angezeigt wurde.
Graka läd neues Bild in den RAM DAC sofern dieses schon bereit ist ansonsten muss noch gewartet werden bis es soweit ist.

Dadurch sind FRAMEeinbrüche deutlich verstärkt und man bemerkt Ruckler. Da einige Zeit zwischen den Frames vergehen und kein neues Frame angezeigt wird sind die Lücken unterschiedlich groß.

Seph
2011-12-16, 18:29:46
Wie gesagt, wir reden nicht vom Framerate-Einbrüchen...zumindest nicht solche die FRAPS anzeigt.

Spasstiger
2011-12-16, 18:37:21
Könnte eventuell das durch Triple Buffering in Verbindung mit VSync verursachte Mikroruckeln sein. Wenn die Wiederholfrequenz auf 60 Hz gekappt ist, dann wird eine Bildfolge von 40 fps dargestellt, indem im Wechsel ein Frame zwei Refreshes lang und der nächste Frame nur einen Refresh lang dargestellt wird. Damit springt die Framerate von Frame zu Frame zwischen 30 fps und 60 fps. Fps-Anzeigen spucken 40 fps aus, was in dem Fall der effektive Mittelwert ist (zwei Frames in drei Refreshes zu je 16,667 ms, d.h. zwei Frames in 50 ms bzw. im Mittel ein Frame pro 25 ms => 40 fps).
Bei NV wird für VSync unter Direct3D standardmäßig Triple Buffering aktiviert, wenn es nicht Anwendung nicht anders anfordert.

Seph
2011-12-16, 18:43:19
Bist du dir sicher? Warum benutzen dann alle Leute D3Doverrider um TB zu aktivieren? Ich dachte NV macht es nur für OpenGL.

Spasstiger
2011-12-16, 18:47:41
Im Wechsel 30 fps und 60 fps sind effektiv immer noch mehr fps als durchgehend 30 fps. Es gibt mit Triple Buffering mehr zeitliche Information. Aber die Mikroruckler können auffallen. Insbesondere spürt man, dass die Latenz nicht zur angezeigten Framerate passt. Denn bei der spürbaren Latenz dominiert die niedrige Frameratenstufe.

aufkrawall
2011-12-16, 18:48:01
Bist du dir sicher? Warum benutzen dann alle Leute D3Doverrider um TB zu aktivieren? Ich dachte NV macht es nur für OpenGL.
Für OpenGL kann man auswählen, ob der TB erzwungen werden soll oder nicht.
Ich hab mit Nvidia noch kein D3D-Spiel gesehen, bei dem bei forciertem Treiber-Vsnc nich auch TB angewesen wäre. Also wird bei D3D wohl auch der TB erzwungen.
Ausnahme ist DX11 (und 10?), da braucht man den D3Doverrider für TB oder man muss die Anwendung meist einmal minimieren/Vollbild aus und an, damit der TB genutzt wird.

Tesseract
2011-12-16, 19:08:28
Könnte eventuell das durch Triple Buffering in Verbindung mit VSync verursachte Mikroruckeln sein. Wenn die Wiederholfrequenz auf 60 Hz gekappt ist, dann wird eine Bildfolge von 40 fps dargestellt, indem im Wechsel ein Frame zwei Refreshes lang und der nächste Frame nur einen Refresh lang dargestellt wird. Damit springt die Framerate von Frame zu Frame zwischen 30 fps und 60 fps. Fps-Anzeigen spucken 40 fps aus, was in dem Fall der effektive Mittelwert ist (zwei Frames in drei Refreshes zu je 16,667 ms, d.h. zwei Frames in 50 ms bzw. im Mittel ein Frame pro 25 ms => 40 fps).
Bei NV wird für VSync unter Direct3D standardmäßig Triple Buffering aktiviert, wenn es nicht Anwendung nicht anders anfordert.

das was du hier beschreibst ist eigentlich double buffering. triple buffering umgeht diese frame-doppelungen eigentlich relativ gut solange die durchschnittlichen fps, die die graka berechnen kann, nicht deutlich unter 60 droppen.

Spasstiger
2011-12-16, 19:13:14
das was du hier beschreibst ist eigentlich double buffering. triple buffering umgeht diese frame-doppelungen eigentlich relativ gut solange die durchschnittlichen fps, die die graka berechnen kann, nicht deutlich unter 60 droppen.
Bei Double Buffering hast du bei einer Framerate von 30-59 fps und einer Refreshrate von 60 Hz aber durchgehend das gleiche Delay. Sprich alle Frames werden zwei Refreshes lang angezeigt. Mit Triple Buffering werden manche Frames zwei Refreshes lang angezeigt, andere einen Refresh lang. Dieses Gehopse kann auch sichtbar bzw. durch den Inputlag spürbar sein.
Was ich oben beschrieben habe, ist definitiv Triple Buffering und nicht Double Buffering.

Für das Optimum halte ich persönlich immer noch eine hohe Framerate, die durchgehend über der Monitorrefreshrate liegt, und dazu VSync + Double Buffering. Triple Buffering wäre in diesem Fall nur Speicherverschwendung.

Tesseract
2011-12-16, 19:25:05
Mit Triple Buffering werden manche Frames zwei Refreshes lang angezeigt, andere einen Refresh lang. Dieses Gehopse kann auch sichtbar bzw. durch den Inputlag spürbar sein.

dieses gehopse entspricht über zeit aber ziemlich genau der tatsächlichen framerate, die die GPU liefern kann, was mit doublebuffering eben nicht der fall ist. d.h. deutlich unter 60fps gibts nur dann, wenn die GPU nur deutlich unter 60 fps schafft. wenn die annähernd 60 berechnen kann ist nur alle zig frames mal ein doppelter frame dabei. auch der durchschnittliche inputlag ist mit triplebuffering geringer als mit doublebuffering.

Seph
2011-12-16, 19:47:52
Für OpenGL kann man auswählen, ob der TB erzwungen werden soll oder nicht.
Ich hab mit Nvidia noch kein D3D-Spiel gesehen, bei dem bei forciertem Treiber-Vsnc nich auch TB angewesen wäre. Also wird bei D3D wohl auch der TB erzwungen.
Ausnahme ist DX11 (und 10?), da braucht man den D3Doverrider für TB oder man muss die Anwendung meist einmal minimieren/Vollbild aus und an, damit der TB genutzt wird.

Krass, bisher habe ich immer nur das Gegenteil gehört (TB nur per D3DO). War mir komplett neu. Force VSync auch nie über den Treiber sondern stelle das immer im Game ein. Ist es über den Treiber denn besser?

Habe jetzt mal in PES TB mit D3DO erzwungen. Ergebnis: Diese kleinen Stocker zwischendurch sind weg. Dafür laufen Menüs und einige Szenen wie Eckbälle etc. nur noch mit 30FPS (das Spiel verhält sich bei deaktiviertem VSync GENAUSO). Ich erinnere mich, dass das auf meiner alten ATI Karte analog funktioniert hat.

Ich schätze mal dass in 90% aller Fälle solche Micro- und Miniruckler und Frame Skipper und was weiß ich durch "schlecht" programmierte Engines verursacht werden und man scih vllt. zuviele Gedanken darüber macht was mit dem eigenen Sys los ist...

EDIT:

Könnte mir jemand erkären wie man genau das hier macht? http://www.computerbase.de/forum/showthread.php?t=960077

aufkrawall
2011-12-16, 20:00:28
auch der durchschnittliche inputlag ist mit triplebuffering geringer als mit doublebuffering.
Mit Inputlag meinst du die zusätzliche Verzögerung, bis Eingaben sichtbar werden? Also etwa die Bewegung des Maus-Cursors?
Wenn ja, dann kann ich deine Feststellung nicht bestätigen. Ich habe gerade noch mal in Left 4 Dead 2 Vsync mit und ohne TB verglichen: Der Inputlag mit TB war definitiv größer als ohne: Die Maus reagierte um einiges schwammiger, ich konnte nicht mehr richtig spielen. Mit DB war es ganz klar besser spielbar, die Eingabe reagierte merkbar schneller.
Die GPU-Auslastung war mit und ohne TB in etwa gleich. Es gibt da ja so ein Märchen, dass mit TB die GPU immer voll ausgelastet wäre.
Geheimtipp (ok, nicht mehr soo geheim ;) ): Die FPS auf einen Wert unterhalb der Wiederholrate festlegen, bei 60Hz also etwa 59. Dann gibt es auch mit Vsync, egal ob DB oder TP, kaum Input-Lag.

Krass, bisher habe ich immer nur das Gegenteil gehört (TB nur per D3DO). War mir komplett neu.

Ich kann nicht sicher sagen, ob es wirklich stimmt.
Jedenfalls fällt die FPS-Rate mit Treiber-Vsync bei all meinen D3D9-Spielen auch auf Werte zwischen 30 und 60, TB ist also difinitiv an. Ich hab aber keine Ahnung, ob es nicht doch etwas mit der Anwendung zu tun haben könnte. Jedenfalls geht es. ;)

Tesseract
2011-12-16, 20:02:59
Force VSync auch nie über den Treiber sondern stelle das immer im Game ein. Ist es über den Treiber denn besser?
ja weil du dir dann sicher sein kannst, dass auch wirklich das richtige gemacht wird. wie gesagt: viele spiele machen beim aktivieren von vsync einfach irgendwas - schalten framelimiter ein, ändern ihr verhalten innerhalb der engine, erzeugen nicht nachvollziehbare inputlags von einer sekunde und mehr usw.

Der Inputlag mit TB war definitiv größer als ohne: Die Maus reagierte um einiges schwammiger, ich konnte nicht mehr richtig spielen.
das muss eine andere ursache haben.

Seph
2011-12-16, 22:11:10
Aber wenn der Treiber nur DB forct udn viele moderne Spiele von Haus aus TB mitbringen...ist das dann nicht besser?

Seph
2011-12-16, 22:46:44
Also wenn ich im Treiber force dann verhält sich PES genauso wie mit D3D Overrider...keine Ruckler, dafür nur 30FPS in den Menüs...

aufkrawall
2011-12-16, 23:38:35
das muss eine andere ursache haben.
Glaub ich nicht. ;)
Hab es gerade mit Serious Sam (OGL) und Treiber-Vsync/TB probiert:
Mit TB war es träger. Ist auch das, was man meist im Web liest.

Also wenn ich im Treiber force dann verhält sich PES genauso wie mit D3D Overrider...keine Ruckler, dafür nur 30FPS in den Menüs...
Im Spiel ist die FPS-Rate aber bei 30-60?
Vielleicht schaltet das Spiel ja nur im Menü nicht TB ein.

Döner-Ente
2011-12-17, 00:12:30
[...]Ich hab mit Nvidia noch kein D3D-Spiel gesehen, bei dem bei forciertem Treiber-Vsnc nich auch TB angewesen wäre. Also wird bei D3D wohl auch der TB erzwungen.
Ausnahme ist DX11 (und 10?), da braucht man den D3Doverrider für TB oder man muss die Anwendung meist einmal minimieren/Vollbild aus und an, damit der TB genutzt wird.

Das stimmt meiner Erfahrung nach.
DX9=TB grundsätzlich vom Treiber her aktiv,
DX10/11=Vom Spiel abhängig. Manche Spiele kriegen auch unter DX10/11 TB von sich aus hin, andere brauchen entweder das 2xALT-TAB-Spielchen oder im schlimmsten Fall den D3DOverrider.

iltis2k
2011-12-17, 00:56:46
Hi Seph :),
kenne das Problem auch und denke mal das es so ist wie Spasstiger sagt, also MRs. Weiß zwar nicht mehr bei welchen Spielen genau, aber das unter DX10/11 TB nicht immer aktiv war durfte ich auch schon feststellen. Wenn TB aktiv ist bemerke ich eigentlich keine Unterschiede zu VSync aus, außer natürlich das fehlende Tearing. Tearing geht für einfach garnicht, da kann es lieber ruckeln. Der zusätzliche Speicherverbrauch durch TB sollte heute auch nicht mehr ins Gewicht fallen. Warum wird überhaupt mit DX10/11 wieder DB statt TB eingesetzt, bzw. warum gibt es DB überhaupt noch? Sehe in DB nur den Vorteil des geringerem Input-Legs, aber wenn man da soviel Wert drauf legt sollte man VSync gleich ausschalten.

boxleitnerb
2011-12-17, 01:50:13
Das TB per Treiber geht nur für OpenGL, bei Nvidia und bei AMD. Bei AMD stehts im Controlpanel, bei Nvidia heißt der Parameter so (OpenGL), wenn man sich den mal näher anschaut.

Könnte doch einfach nur ein Limiter sein mit den 30fps?

Seph
2011-12-17, 02:11:44
Nein, wenn ich das VSync vom Spiel einstelle kriege ich 60FPS. Aber dann eben auch Microruckler....udn das ist bei vielen Spielen so...

Warum ist PC-Gaming eigentlich so kompliziert? *seufz*

Ich meine bei Amnesia mit VSync keine Ruckler gesehen zu haben. Bei Dirt 3 passiert es manchmal minimal. Ansonsten zock ich grad keine anderen Games...

sei laut
2011-12-17, 14:53:38
Nein, wenn ich das VSync vom Spiel einstelle kriege ich 60FPS. Aber dann eben auch Microruckler....udn das ist bei vielen Spielen so...
Die Framesanzeige ist aber kein verlässlicher, sondern ein gemittelter Wert. Du müsstest die Erstellzeit der einzelnen Frames messen, möglicherweise hast du aus irgendeinem Grund Ausreißer nach unten, Bilder, die entsprechend lange brauchen.

Seph
2011-12-17, 15:32:35
Die Framesanzeige ist aber kein verlässlicher, sondern ein gemittelter Wert. Du müsstest die Erstellzeit der einzelnen Frames messen, möglicherweise hast du aus irgendeinem Grund Ausreißer nach unten, Bilder, die entsprechend lange brauchen.

Wie mache ich das? Und was könnte der Grund sein? Abgesehen von der Engine an sich...

PrefoX
2011-12-18, 09:41:19
das muss eine andere ursache haben.
es ist doch wohl klar, dass der inputlag bei TB größer ist, da 3 frames gesammelt werden als bei DB (2 Frames)
da kannste sagen was du willst...

Spasstiger
2011-12-18, 16:27:15
es ist doch wohl klar, dass der inputlag bei TB größer ist, da 3 frames gesammelt werden als bei DB (2 Frames)
da kannste sagen was du willst...
Das hast du nicht zu Ende gedacht.
Folgendes Szenario: Konstante 40 fps mit VSync @ 60 Hz.
Double Buffering: Nach einem Bufferswap dauert es stets 33,3 ms bis der neueste Frame zur Anzeige gebracht wird.
Triple Buffering: Nach einem Bufferswap dauert es 25 ms bis die Framebuffer getauscht werden. Nach 33,3 ms wird der in Parkposition befindliche Framebuffer zur Anzeige gebracht und es ist wieder ein Buffer als Framebuffer frei. Nach weiteren 16,7 ms (insgesamt 50 ms) wird der gerade neu berechnete Framebuffer zur Anzeige gebracht und es sind zwei Framebuffer frei. Bis zur Anzeige nächsten Frame vergehen wieder 33,3 ms. Es dauert also im Wechsel jeweils 16,7 ms und 33,3 ms bis ein neuer Frame zur Anzeige gebracht wird. Die durchschnittliche Verzögerung ist niedriger als beim Double Buffering.

Seph
2011-12-19, 12:42:07
Woher weiß ich dass eiN Spiel TB oder DB benutzt?

PrefoX
2011-12-19, 12:48:14
Das hast du nicht zu Ende gedacht.
Folgendes Szenario: Konstante 40 fps mit VSync @ 60 Hz.
Double Buffering: Nach einem Bufferswap dauert es stets 33,3 ms bis der neueste Frame zur Anzeige gebracht wird.
Triple Buffering: Nach einem Bufferswap dauert es 25 ms bis die Framebuffer getauscht werden. Nach 33,3 ms wird der in Parkposition befindliche Framebuffer zur Anzeige gebracht und es ist wieder ein Buffer als Framebuffer frei. Nach weiteren 16,7 ms (insgesamt 50 ms) wird der gerade neu berechnete Framebuffer zur Anzeige gebracht und es sind zwei Framebuffer frei. Bis zur Anzeige nächsten Frame vergehen wieder 33,3 ms. Es dauert also im Wechsel jeweils 16,7 ms und 33,3 ms bis ein neuer Frame zur Anzeige gebracht wird. Die durchschnittliche Verzögerung ist niedriger als beim Double Buffering.
ich rede aber immer von 60 minfps...

und die schwankende verzögerung wäre noch unspielbarer als die verzögerung die es durch vsync schon ohnehin gibt.

C.D.B.
2011-12-19, 18:49:49
Woher weiß ich dass eiN Spiel TB oder DB benutzt?

Bei DB geht die Framerate immer wegen ganzzahliger Verzögerung relativ zur Ziel-Anzeigedauer runter. Bsp. bei 60Hz: 60 FpS -> 30FpS -> 15 FpS u.s.w.

Bei TB ist jede (durchschnittliche) Framerate möglich.

Spasstiger
2011-12-19, 19:10:07
ich rede aber immer von 60 minfps...
In dem Fall machts überhaupt keinen Unterschied, da dann wie beim Double Buffering immer nur zwischen Frame- und Screenbuffer geswappt wird. Genaugenommen besteht so sogar die Chance, dass der Screenbuffer nach einem Bufferswap aktueller ist als beim Double Buffering, das Lag also sogar sinkt.

Mal ein Beispiel:
Konstante 200 fps @ 60 Hz mit VSync + Triple Buffering
0 ms: Bufferswap, Buffer 3 ist Screenbuffer
5 ms: Frame mit Inhalt A in Buffer 1 geschrieben
10 ms: Frame mit Inhalt B in Buffer 2 geschrieben
15 ms: Frame mit Inhalt C in Buffer 1 geschrieben
16,67 ms: Bufferswap, Buffer 1 ist Screenbuffer, Frame mit Inhalt C wird angezeigt
20 ms: Frame mit Inhalt D in Buffer 3 geschrieben
25 ms: Frame mit Inhalt E in Buffer 2 geschrieben
30 ms: Frame mit Inhalt F in Buffer 3 geschrieben
33,33 ms: Bufferswap, Buffer 3 ist Screenbuffer, Frame mit Inhalt F wird angezeigt
35 ms: Frame mit Inhalt G in Buffer 1 geschrieben
etc.

Konstante 200 fps @ 60 Hz mit VSync + Double Buffering
0 ms: Bufferswap, Buffer 2 ist Screenbuffer
5 ms: Frame mit Inhalt A in Buffer 1 geschrieben
10 ms: kein freier Buffer, nichts passiert
15 ms: kein freier Buffer, nichts passiert
16,67 ms: Bufferswap, Buffer 1 ist Screenbuffer, Frame mit Inhalt A wird angezeigt
21,67 ms: Frame mit Inhalt D1 in Buffer 2 geschrieben
26,67 ms: kein freier Buffer, nichts passiert
31,67: kein freier Buffer, nichts passiert
33,33 ms: Bufferswap, Buffer 2 ist Screenbuffer, Frame mit Inhalt D wird angezeigt
38,33 ms: Frame mit Inhalt G1 in Buffer 1 geschrieben
etc.

Latenz zwischen Schreiben in Buffer und Darstellung:
Triple Buffering: 1,67 ms oder 3,33 ms
Doube Buffering: 11,67 ms

TheRaven666
2011-12-19, 22:58:37
Was'n los hier mit dem Gewhine über 30fps in nem Menü? Das dürfte mit 99%iger Wahrscheinlichkeit ein Frame Limiter der Engine sein damit ein bei 3000 fps gerendertes Menü die nVidia-Karten nicht grillt (siehe StarCraft 2).

PrefoX
2011-12-20, 10:45:06
Spasstiger

fehlen in deinem Beispiel nicht noch die Pre/rendered frames? Also ich merke trotzdem einen Vorteil beim Mauslag für doublebuffer(zumindest war es vor 4-5 Jahren so) da Tripplebuffer ja normalerweise 3 Prerendered frames hat. Ich hab das auch mal auf 1 gestellt aber dann gabs da auch nen riesen problem, mauslag war aber glaube ich besser, kann mich aber nich mehr erinnern.

Ich finde beide Lösungen einfach schlecht und nicht nutzbar für spiele wo man eine direkte eingabe brauch. BEI ARTS oder RTS Spielen mach ich es natürlich auch an, aber da merkt man das nicht. Bei allem anderen? naja

Spasstiger
2011-12-20, 13:12:39
fehlen in deinem Beispiel nicht noch die Pre/rendered frames?
Nein, es sind immer zwei Buffer (Double Buffering) oder drei Buffer (Triple Buffering). Prerendering heißt nur, dass Renderanweisungen vorgehalten werden, um die Auslastung zu verbessern. Auch bei einem Prerender-Limit von 3 hast du mit VSync stets nur maximal einen fertig berechneten Frame, der in einem Buffer für die Anzeige vorgehalten wird.

DerRob
2011-12-20, 13:50:58
Konstante 200 fps @ 60 Hz mit VSync + Double Buffering
0 ms: Bufferswap, Buffer 2 ist Screenbuffer
5 ms: Frame mit Inhalt A in Buffer 1 geschrieben
10 ms: kein freier Buffer, nichts passiert
15 ms: kein freier Buffer, nichts passiert
16,67 ms: Bufferswap, Buffer 1 ist Screenbuffer, Frame mit Inhalt A wird angezeigt
20 ms: Frame mit Inhalt D in Buffer 2 geschrieben
25 ms: kein freier Buffer, nichts passiert
30 ms: kein freier Buffer, nichts passiert
33,33 ms: Bufferswap, Buffer 2 ist Screenbuffer, Frame mit Inhalt D wird angezeigt
35 ms: Frame mit Inhalt G in Buffer 1 geschrieben
etc.
Ist das wirklich so korrekt? Solange kein Buffer frei ist, kann die Grafikkarte doch auch nicht weiter rechnen und alle 5 ms ein neues Bild erzeugen? Demzufolge müsste die GPU erst bei 16,67 ms mit dem Berechnen des nächsten Frames anfangen, und dieses dann bei 21,67 ms in den Buffer 2 schreiben...

Seph
2011-12-20, 14:09:26
Also bei Portal 2 im Menü steht, dass DB weniger Lag hat als TB. Dort fühlt es sich auch so an. Kein Vsync ist relativ lagfrei, DB hat spürbares Lag und TB ist noch mal schlechter.

Das war aber irgendwie gar nicht das Thema. :/

@30FPS im Menü

Mit Vsync vom Spiel erzwungen fällt die Framerate auch in den Menüs nicht unter 30. Alußerdem habe ich die 30 so auch IM SPIEL, bspw. bei Ecken- oder Freistößen. Mit VSync der Spieloptionen habe ich immer 60.

Spasstiger
2011-12-20, 16:40:22
Ist das wirklich so korrekt? Solange kein Buffer frei ist, kann die Grafikkarte doch auch nicht weiter rechnen und alle 5 ms ein neues Bild erzeugen? Demzufolge müsste die GPU erst bei 16,67 ms mit dem Berechnen des nächsten Frames anfangen, und dieses dann bei 21,67 ms in den Buffer 2 schreiben...
Sicher bin ich mir nicht, aber ich fände es logisch, dass man den Buffer mit dem veralteten Frame wieder zum Schreiben freigibt. Ergibt ja keinen Sinn, einen alten Frame vorzuhalten, wenn bereits ein aktuellerer Frame vorgehalten wird. Ich würde Triple Buffering so implementieren wie von mir beschrieben.

/EDIT: Aths beschreibt es in seinem VSync-Artikel genauso:
Triple Buffering arbeitet mit zwei Backbuffern, nennen wir sie A und B. Das erste Bild wird in Backbuffer A gerendert. Ist es fertig, kommt das nächste Bild sofort in Backbuffer B (die Backbuffer werden also geswappt). Wenn der RAMDAC das neue Bild anfängt, nimmt er automatisch den aktuellsten Backbuffer. Das heißt, bei 90 fps und 100 Hz werden auch 90 Bilder pro Sekunde angezeigt. 10 davon (also jedes 9) sind zwei Zyklen lang sichtbar.
Quelle: http://www.3dcenter.org/artikel/was-heisst-vsync-und-wie-wendet-man-es/triple-buffering
Zwischen den Backbuffern wird immer geswappt, wenn ein Frame fertig ist. Die Grafikkarte pausiert also nie. Es werden nie zwei Frames vorgehalten.

DerRob
2011-12-20, 18:09:13
Sicher bin ich mir nicht, aber ich fände es logisch, dass man den Buffer mit dem veralteten Frame wieder zum Schreiben freigibt. Ergibt ja keinen Sinn, einen alten Frame vorzuhalten, wenn bereits ein aktuellerer Frame vorgehalten wird. Ich würde Triple Buffering so implementieren wie von mir beschrieben.
Ja, bei Triple Buffering, ich bezog mich da aber auf dein Double Buffering Beispiel. Da steht ja nur ein Backbuffer zur Verfügung.

aufkrawall
2011-12-20, 18:12:36
Ich finde beide Lösungen einfach schlecht und nicht nutzbar für spiele wo man eine direkte eingabe brauch. BEI ARTS oder RTS Spielen mach ich es natürlich auch an, aber da merkt man das nicht. Bei allem anderen? naja
Gibt es einen Grund, warum du nicht mal Vsync + FPS-Limiter ausprobierst?

Spasstiger
2011-12-20, 19:42:55
Ja, bei Triple Buffering, ich bezog mich da aber auf dein Double Buffering Beispiel. Da steht ja nur ein Backbuffer zur Verfügung.
Ups, hast natürlich recht, da muss ich die Zeiten korrigieren.

PrefoX
2011-12-21, 09:20:02
Also ich weiss noch, als ich die Pre-rendered frames gesenkt habe, dass sich auch das Lag reduziert hat. Wie kann das denn bitte sein? und warum ist die verzögerung so groß obwohl es nur 1 frame ist? oder da muss was anderes im argen sein aber bei ego shootern ist es einfach eine so große verzögerung... das ist niemals nur 1 frame (und ich hab immer 60fps, nicht das du sagst das ich mit 20fps spiele und deswegen der eine fram 1/20 einer sekunde ausmacht ;D)

sei laut
2011-12-21, 10:20:58
Wie mache ich das? Und was könnte der Grund sein? Abgesehen von der Engine an sich...
Bei Fraps kannst du auswählen, dass er die Frametimes mitspeichern soll. (beim Reiter FPS)
Wenn du das ein paar Sekunden aufzeichnen lässt, siehst du schon, ob die Frames einen gleichen zeitlichen Abstand haben.

Spasstiger
2011-12-21, 11:33:08
Also ich weiss noch, als ich die Pre-rendered frames gesenkt habe, dass sich auch das Lag reduziert hat. Wie kann das denn bitte sein?
Das muss sogar so sein. Input-Lags haben mehrere Quellen. Beim Vergleich Double Buffering vs. Triple Buffering betrachten wir den Unterschied bei der Verzögerung vom Schreiben des Frames in den Framebuffer bis zur Darstellung auf dem Bildschirm.
Das sagt noch überhaupt nix darüber aus, wie aktuell der Frame beim Schreiben in den Framebuffer ist. Wenn das Prerenderlimit auf 3 steht, können Renderanweisungen für bis zu 3 Frames im Voraus in der Warteschlange stehen. D.h. von der Eingabe bis zum Rendering erfolgt auch eine Verzögerung. Und dann eben nochmal die Verzögerung vom Rendering bis zur Darstellung auf dem Bildschirm, die beim Vergleich Double Buffering vs. Triple Buffering wichtig ist.

Bei der Multi-GPU-Mikroruckler-Diskussion stoßen auch viele auf das Verständnisproblem, dass ein gleichmäßig verteilte Frameausgabe nicht dazu führt, dass die Frameinhalte gleichmäßig verteilt sind. Wenn man einen Frame für die Ausgabe verzögert, wird der Inhalt nicht aktueller.

PrefoX
2011-12-21, 14:06:24
also ist es unmöglich ein bild ohne tearing zu erzeugen ohne input lag?

ausser man hat 120hz/240hz monitore und dementsprechende fps

Spasstiger
2011-12-21, 14:18:08
VSync (egal ob mit TB oder DB) plus 120 Hz plus 120+ fps plus Prerenderlimit 1 plus Monitor mit Reaktionszeit von 2 ms dürfte das menschliche Reaktionsvermögen schon ziemlich an die Grenzen treiben.

PrefoX
2011-12-21, 14:27:23
ich sagte ja ausser 120hz ;D.

ok also immer off lassen. mich wundert nur wie die konsolen dann hinbekommen. ich mein da ist oft auch vsync off aber wenn die fps einbrechen kommt tearing, sonst aber nicht.

Und als ich mal das Prerenderlimit auf 1 gesetzt habe gabs auch auch wieder andere Probleme, irgendwie lief das spiel immernoch nicht rund... zumindest wars bei MW2 so

Seph
2012-01-07, 22:01:12
Nextes Spiel: GTA IV

Mit VSync Microruckler (nicht @60FPS sondern max. @ 56FPS, weiß der Geier wieso. Einfach mal schnell fahren und auf die Gebäude seitlich achten), ohne VSync smooth.

These auch hier: Microruckler statt Tearing.

Seph
2012-01-19, 23:46:34
Nächstes Beispiel:

Crysis 1

Solange die 50FPS gehalten werden smooth, aber wehe es geht nur ein paar Frames nach unten und schon ruckelts. Ohne VSync keine Ruckler. Dafür Tearing.

Seph
2012-01-20, 01:54:02
Wenn ich 40FPS per Framelimiter erzwingen habe ich auch mit aktiviertem VSYNC keine Ruckler mehr. Ich habe aber auch keine Frameratefluktuation mehr, weil die 40 dann bombenfest sind und weder nach oben noch nach unten abweichen. Das Problem ist hier also nicht die Framerate per se (bin mir sicher ich könnte auch auf 42 oder 38 limitieren mit dem gleichen Ergebnis) sondern die Fluktuation der Framerate, die SOFORT in Microruckler mündet.

urfaust
2014-05-12, 00:30:11
Ich habe ein ähnliches Phänomen wie Seph, und zwar bei Counterstrike Source.
Es ist ein leichtes rythmisches Stocken im Bildaufbau...

In meinem Fall habe ich den Frame-Limiter in Verbindung mit VSync als Übeltäter ausgemacht.
Bei VSync ohne Frame Limiter habe ich ein flüssiges Spielgeschehen. Aber mit Input-Lag :rolleyes:

Settings:
Frame Rate Limiter: 58 fps
VSync: On
Maximum pre-rendered Frames: 1

Ich denke mal für dieses Problem gibt es keine Abhilfe und ich muss mich
wohl mit Tearing oder Stocken/Mikroruckler abfinden...

PrefoX
2014-05-12, 00:40:39
Ich habe ein ähnliches Phänomen wie Seph, und zwar bei Counterstrike Source.
Es ist ein leichtes rythmisches Stocken im Bildaufbau...

In meinem Fall habe ich den Frame-Limiter in Verbindung mit VSync als Übeltäter ausgemacht.
Bei VSync ohne Frame Limiter habe ich ein flüssiges Spielgeschehen. Aber mit Input-Lag :rolleyes:

Settings:
Frame Rate Limiter: 58 fps
VSync: On
Maximum pre-rendered Frames: 1

Ich denke mal für dieses Problem gibt es keine Abhilfe und ich muss mich
wohl mit Tearing oder Stocken/Mikroruckler abfinden...
klar ruckelt es wenn du die fps unter der hz limitierst... woher sollen denn die fehlenden 2 frames kommen?
ausserdem solltest du cs nie mit fps cap spielen, aber das ist was anderes.

Tesseract
2014-05-12, 00:48:04
In meinem Fall habe ich den Frame-Limiter in Verbindung mit VSync als Übeltäter ausgemacht.

übeltäter? der treiber macht (korrekterweise) genau das was du eingestellt hast: mit 60Hz und einem 58fps limiter hast du mit vsync etwa einmal pro sekunde einen doppelframe und ohne vsync wandert dir im sekundentakt die tearingwelle von oben nach unten durchs bild.

ich weiß nicht was alle immer mit ihren framelimitern haben... wenn du eine synchonisation mit wenig inputlag haben willst mach vsync ein, prerendered frames auf 1 und lass die finger vom limiter.

urfaust
2014-05-12, 01:16:24
Bei zwei anderen Spielen (L4D1/L4D2) tritt das Phänomen nicht auf,
und zwar bei extakt denselben Settings :confused:

Darüber hinaus findet man überall Empfehlungen zu VSync + FPS Cap...Also Bullshit :cool:

wenn du eine synchonisation mit wenig inputlag haben willst mach vsync ein, prerendered frames auf 1 und lass die finger vom limiter.


und Triple Buffering an/aus macht da keinen Unterschied?

Tesseract
2014-05-12, 02:12:15
und Triple Buffering an/aus macht da keinen Unterschied?
echtes triple buffering gibt es bei d3d nicht, das was als triple buffer bezeichnet wird ist eine frame queue depth von 3, und das ist genau das was du mit dem prerendered frames limit überschreibst.

Darüber hinaus findet man überall Empfehlungen zu VSync + FPS Cap...Also Bullshit :cool:
die einer vom anderen abschreibt, scheinbar ohne überhaupt zu wissen was die einstellungen machen.

Zocker84
2014-05-12, 02:33:27
Kenne das, es läuft sporadisch zäher mit Vsync, obwohl die FPS eigentlich stimmen.
Keine Ahnung woran das liegt, vllt. kommt es bei der Synchronisation zwischen Bildschirm und GraKa wirklich zu Mikrorucklern?
Wahrscheinlich eher auf Monitor-Seite, denn sonst würde man es an den FPS sehen bzw. wäre es schon aufgefallen durch Analysen.
Bei manchen Games ist es deutlicher ausgeprägt wie bei anderen.

Ich habs ganz gut in den Griff gekriegt mit folgender Einstellung:
1) Framelimiter einstellen mit 2 FPS weniger als die Hz Zahl des Monitors.
2) Triple Buffering an
3) VSYNC an

Mein 60Hz TFT läuft auf 77 Hz.
Also habe ich ein 75 FPS Limit eingestellt.
Wenn meine GraKa jetzt dauerhaft 75 FPS oder mehr hergibt, ist das ein gutes Setting.
Ohne FPS Limit habe ich bei aktiviertem VSync eine richtig schwammige Maussteuerung + den erwähnten subjektiven sporadischen lag trotz guter FPS.
Egal ob Triple Buffering aktiviert oder deaktiviert ist.

Kann wirklich jedem empfehlen das auszuprobieren.
Der Bildqualitätsverlust durch Tearing bei Vsync off, ist ebenso nicht weg zu diskutieren, wie der Inputlag mit Vsync.
So habe ich einen guten Kompromiss, mit dem ich auch Shooter online sehr gut spielen kann.

PrefoX
2014-05-12, 12:20:35
das wurde doch geklärt woher das kommt... wenn der PC auf einen vollen frame wartet und dann auf den sync zum monitor wartet UND dann noch ein frame gebuffered wird...

und wenn du dann noch weniger bilder berechnen lässt als der monitor anzeigt, muss es ja ruckeln.

Zocker84
2014-05-12, 15:27:20
das wurde doch geklärt woher das kommt... wenn der PC auf einen vollen frame wartet und dann auf den sync zum monitor wartet UND dann noch ein frame gebuffered wird...

und wenn du dann noch weniger bilder berechnen lässt als der monitor anzeigt, muss es ja ruckeln.

Ok, klingt jdf. sehr plausibel.

Nein, teste es doch selbst einmal. Es klinkt zwar wieder logisch, dass es mehr ruckelt, wenn der Monitor mehr Hz darstellt als die GraKa FPS generiert.
Aber es ruckelt eben nicht mehr durch ein FPS Limit bei VSYNC.
Gefühlt ist genau das Gegenteil der Fall.
Dennoch möglich, dass du absolut Recht hast.
Also das es theoretisch wirklich mehr ruckelt, aber das dies in der Praxis nicht feststellbar ist, und dieses "es ruckelt empfinden" gänzlich am Input Lag liegt.

Wird Zeit für Freesync oder Gsync :)

PrefoX
2014-05-12, 18:22:51
also ich würde jeden doppelten frame sehen, 100% :D
ich spiel entweder vsync an fps=hz oder halt bei shootern immer vsync off ohne limiter, klar tearing ist ätzend aber die verzögerung geht einfach nicht.

aufkrawall
2014-05-12, 18:27:49
Bei BF4 ist der Input Lag mit dem spielinternen fps-Limiter spürbar geringer als ohne.

ottoman
2014-05-14, 19:30:35
Ich habe jetzt nicht alle Antworten gelesen, aber bei 40fps und 60Hz+VSync muss es ja zwangsweise Mikroruckler geben. Bei 60Hz stellt der Bildschirm alle 16,6ms ein neues Bild dar. Mit 40fps sind aber nicht genug Bilder für jeden Monitor Refresh vorhanden. Also werden manche Bilder nur 16,6ms lang angezeigt, andere wiederum für 33,3ms. Es entsteht also zwangsläufig Mikroruckeln.

Korrigiert mich bitte wenn ich falsch liege, aber so hab ich mir das immer gedacht :)

aufkrawall
2014-05-14, 19:34:08
Genau. Deshalb ist das auch mit 58 oder 59fps@60Hz Blödsinn. Dass einige das nicht verstehen wollen, ist doch eine denkbar einfache Rechenaufgabe..

ottoman
2014-05-14, 19:56:27
Ich hatte mal gelesen, dass man auf 60fps stellen sollte bzw. in Spielen wo das per Konsole geht (BF4) auf 59.6fps. Selbst habe ich das aber noch nie getestet. Hier noch ein (imho) gutes Video zum Thema: http://www.youtube.com/watch?v=wQwst-ZBk8c

rudl
2014-05-14, 22:51:17
Ich kann mit vsync überhaupt nicht mehr spielen.
Selbst bei konstanten 60 fps merke ich den Inputlag noch. XD

Das war früher nicht so.
zuerst empfand ich 35fps+ als flüssig. Das hat irgendwann nicht mehr ausgereicht. dann 40-50 als persönliches optimum dann 60fps + vsync
Jetzt 60 fps min framerate ohne vsync und wenn möglich keine Framerateschwankungen.

Man wird einfach immer sensibler. Die Hand Augen koordination braucht anscheinend ein paar Jährchen um geschult zu werden.

aufkrawall
2014-05-14, 23:06:36
Ich hatte mal gelesen, dass man auf 60fps stellen sollte bzw. in Spielen wo das per Konsole geht (BF4) auf 59.6fps. Selbst habe ich das aber noch nie getestet. Hier noch ein (imho) gutes Video zum Thema: http://www.youtube.com/watch?v=wQwst-ZBk8c
Hab ich auch schon probiert. Der Lag wird mit so einem knappen Limit nicht so deutlich geringer wie mit vollen 1-2fps unterhalb der Refreshrate. Leichtes Stottern macht sich auch schon bemerkbar. Allerdings nicht zu vergleichen mit niedrigeren fps.
Es ist mathematisch einfach nicht lösbar, variabler vblank ist die einzige Lösung gegen Lag und Ruckeln bei gesyncter Ausgabe.


Man wird einfach immer sensibler. Die Hand Augen koordination braucht anscheinend ein paar Jährchen um geschult zu werden.
In der Tat, so hab ich es bei mir auch beobachtet.
Mit 60Hz komm ich nicht mehr klar, es ruckelt auch einfach nur. Höhere Auflöung/Pixeldichte tragen auch zu einer präziseren Input-Umsetzung bei.

urfaust
2014-05-15, 00:54:12
Ich für meinen Teil habe nun CSS mit fps_max (Console) auf 160fps gefixt.
Dank der konstant hohen 160fps ist das Tearing relativ erträglich minimalisiert und ich habe kein Input Lag durch VSync/Triple Buffer.

Das zumindest als Zwischenlösung bis ich hier einen 120Hz Monitor stehen habe...

Jedenfalls ist der "sensationelle" Tip mit VSync + FPS Limit 58fps fürn Arsch... :freak:

derF
2014-05-15, 09:49:28
Fand ich auch immer sehr merkwürdig diesen Tipp. Widerspricht jeglicher Logik, aber vermutlich sehen die Leute die Mikroruckler einfach nicht.
Für mich hab ich das Problem mit nem 144 Hz-Monitor gelöst, als Übergangslösung bis es FreeSync gibt. Da fällt mir ohne vSync, entsprechend hohe fps vorausgesetzt, zumindest in BF4 kein Tearing mehr auf.

urfaust
2014-05-15, 13:24:33
Fand ich auch immer sehr merkwürdig diesen Tipp. Widerspricht jeglicher Logik, aber vermutlich sehen die Leute die Mikroruckler einfach nicht.

Diese "Mikroruckler" treten bei diesen Settings auch nicht in jedem Spiel auf.
Bei L4D1/L4D2 zb. definitiv nicht, außer hin und wieder Freezes die wohl auf das Problem ansich zurückzuführen sind.

Drüber hinaus wundert es mich nicht, dass einige die Mikroruckler nicht bemerken.
Im Spielgeschehen fällt es kaum auf da das Stocken wirklich sehr gleichmäßig und subtil ist.

Einfach geradeaus an Wänden/Mauern entlang laufen und die Aufmerksamkeit auf diese Objekte fokussieren.

derF
2014-05-15, 13:52:09
Ja, bei Triple Buffering tritt es ja auch nur "selten", aber regelmäßig auf, sicher fällt das nicht immer auf.

aufkrawall
2014-05-15, 14:22:43
Diese "Mikroruckler" treten bei diesen Settings auch nicht in jedem Spiel auf.
Bei L4D1/L4D2 zb. definitiv nicht, außer hin und wieder Freezes die wohl auf das Problem ansich zurückzuführen sind.

omg, wie soll das gehen?
Komischerweise nehme ich die Ruckler auch in L4D wahr...

urfaust
2014-05-15, 17:50:45
omg, wie soll das gehen?
Komischerweise nehme ich die Ruckler auch in L4D wahr...

Tatsache, habs gerade noch mal getestet.
Bei CS ist es mir wohl eher aufgefallen wegen dem ruhigeren Strafing...

Zocker84
2014-05-19, 20:30:31
Schade, dass nicht alle so begeistert sind vom VSYNC in Kombi mit dem FPS Limit.
Habe damit, besonders in Battlefield 4, sehr positive Erfahrungen.
Ich meine, klar: Das ist nicht das Optimum - aber leider der zurzeit (einzige?) brauchbare Kompromiss zwischen Tearing und Inputlag -edit: bei nicht >120Hz Monitoren

Wenn Freesync raus ist, werde ich mir einen entsprechenden neuen Monitor kaufen UND (und das seit einer 9800 Pro, nochmal eine ATI GraKa).

Sofern die Dinge sich bis dorthin, also ca. die nächsten 2 Jahre, weiterhin so positiv entwickeln. Und davon gehe ich aus.
Ich meine: Das ATI P/L mäßig NV meist die Hosen runter zieht, ist kein Geheimnis. Aber diesesmal haben sie wirklich ansprechende Karten!!!! Hätte ich meine GTX 780 nicht schon zum Release gekauft...wäre ich bei der 290X schwach geworden.

Dennoch: So Tools wie den nvidia inspector werde ich vermissen und was ich Treiber-mäßig bei ATI,
insbesondere zu Zeiten der Dual GPU Karte 5970 eines Kumpels, schon erlebt habe...bleibt immer in Erinnerung ;D

PrefoX
2014-05-19, 22:58:49
ruckeln kann doch nicht begeisterung hervorrufen... dann kann ich wirklich ohne vsync spielen.

urfaust
2014-05-20, 01:03:24
120/144Hz Monitor und alles wird gut! :smile:

Zocker84
2014-05-20, 18:27:12
ruckeln kann doch nicht begeisterung hervorrufen... dann kann ich wirklich ohne vsync spielen.

Das sagst du, aufgrund deiner Wahrnehmung, mit deiner Hardware.
Meine Wahrnehmung ist, dass mich das Tearing nach ein paar Stunden zocken extrem stört.

Es strengt meine Augen an :biggrin:
Das Bild schaut gerade bei schnellen Bewegungen einfach besser aus.

Edit:
Wenn ich z.B. in BF4 vor einem Regal oder einem Strommast stehe und mich umschaue, dann stört mich das "zerhackte Regal" einfach ultra.
Einmal drauf geachtet, fällts dann fast überall auf :/
Mit 77Hz ists schon besser als mit 60 Hz, aber keinesfalls weg.
Einen neuen 120 Hz oder 144 Hz kaufe ich mir vor Adaptive Sync trotzdem nicht mehr.

rudl
2014-05-22, 01:32:41
Das sagst du, aufgrund deiner Wahrnehmung, mit deiner Hardware.

ganz genau. Ist natürlich sehr subjektiv. Mich stört tearing eigentlich nicht (mehr)

Ums wichtiger dass man vsync bei jedem Spiel an und ausschalten können sollte ! da sind die Entwickler gefragt.

Es scheint irgendwie in Mode gekommen sein dass man vsync teilweise gar nicht mehr abstellen kann. :(
Z.B bei fallout. vsync aus (im launcher menü) stellt beispielsweise nur von double buffering auf tripple buffering um XD :freak:

Das Bild schaut gerade bei schnellen Bewegungen einfach besser aus.

^^ ;D;D richtig schnelle bewegungen sind mit vsync gar nicht möglich ! :wink: