- Registriert
- Okt. 2013
- Beiträge
- 6.434
kisser schrieb:Der Monitor nimmt sich keine Frames, sondern er bekommt sie von der Grafikkarte. Und zwar immer in der richtigen Reihenfolge.
Es werden niemals Frames übersprungen. Sind die Buffer der Grafikkatrte bei aktivem VSync voll, dann muss die Grafikkarte warten, bis sie ein komplettes Frame an den Monitor übertragen hat und diesen Buffer dann wieder leeren kann, um ein neues Frame rein zu schreiben.
Sieht man Tearing, dann ist kein VSync aktiv.
Naja ein bischen wiedersprichst du dir. (Es sei denn du redest von einem Szenario indem VSYNC aktiviert ist)
Ohne Vsync werden eben Frames von der Grafikkarte ganz oder Teilweise Übersprungen, die Grafikkarte errechnet 70 Bilder pro Sekunde, der Monitor kann aber nur 60 Anzeigen. Im besten Fall gehen 10 Bilder ganz verloren, aber in der Regel werden die Bilder (die Zeilenweise aufgebaut werden) überlagert, die Grafikarte ändert also das Bild im Ausgabepuffer bevor der Monitor das alte Bild komplett aufgebaut hat,
dies führt zu " Tearing".
Immernoch
70FPS auf 60Hz monitor
Sagen wir der alter Frame "A" ist zu 2/3 aufgebaut auf dem Monitor, Die Grafikkarte hat aber den neuren Frame "B" fertig in diesem moment passiert dann ohne VsynC der "page Flip" in der Grafikkarte.
Pageflip
Hat die Grafikkarte nur zwei Puffer sieht das so aus:
Frame A war fertig und ist im "Ausgabepuffer" der die Daten an den Monitor weitergibt.
Frame B wird derweil im "Rechenpuffer" zusammengebastelt. Ist Frame "B" fertig, dann adressiert die Grafikkarte die Puffer sofort um.(Ohne Vsync).
Ausgabe- wird zu Rechenpuffer und andersherum (Pageflip)
Der Monitor stellt zeilenweise da was sich im Ausgabepuffer der Graka befindet (streiten wir mal nicht wer wem was gibt
Passiert ein "Pageflip" bevor das alte bild "A" komplett aufgebaut wurde, dann kommen die verbleibenden Zeilen einfach von "Frame B", und der passt bei schnell bewegten szenen eben nicht gut zu dem rest von Frame A und tritt eben auf wenn die Grafikkarte mehr Pageflips durchführt als der Monitor Bilder aufbauen kann.
Mit Vsync Wartet die Grafikkarte auf den Monitor, ein Pageflip wird erst dann ausgeführt wenn ein Frame auf dem Monitor ganz dargestellt wurde, so steht der Frame solange dem Monitor zur verfügung bis dieser den Kompletten Frame neu aufgebaut hat.
Crysis:
Habe das Problem minimiert, indem ich die maximale Zahl der Frames begrenzt habe. Zwar hat das nix mit tatsächlichem Vsync zu tun, allerdings glaube ich die Ursache bei meinem "Tearing" ist die starke Schwankung in der Framerate. Bei Warhead ist die Framerate insgesamt sehr gering (20-40), irgendein Bug, bei Crysis schnellt sie beim hochschauen gerne mal von 40 auf 150FPS (r_Vsync 1, Nvidia Vsync aus), vermute ähnliches bei "Warhead", also das Vsync garnicht lang aktiviert ist, bevor die Frames wieder Fallen, aber in dem kurzen moment kommen zu viele Frames an.
Die Vermutung bricht natürlich zusammen, wenn "Vsync" immer an ist, aber bei unter 60FPS einfach keinen Effekt hat.
Um in Crysis und Warhead die Frames zu begrenzen folgende Schritte:
In der spiele verknüpfung hinter die .exe" einfach -devmode anhängen und Spiel starten
Zirkumflex drücken (console) und eingeben :
"fixed_time_step = -0.029"
-0,0225 = 45 fps
-0.0255 = 40 fps
-0.0335 = 30 fps
-0.041 = 25 fps