fanatiXalpha schrieb:
ja, aber nach der Aussage von Som... müssten die FPS dann, sofern die 60 nicht erreicht werden, doch direkt auf 30 runterfallen
laut AB tun sie das aber nicht
Wenn nur DoubleBuffering aktiv ist, passiert das auch.
Ein Beispiel: um die 60 fps zu schaffen, darf die Grafikkarte nicht mehr als 16,6 ms für ein Bild brauchen. Wenn sie jetzt jedoch z.B. 25 ms für das Bild braucht, passiert folgendes:
DoubleBuffer (es sind 2 "Bild-Speicherbereiche" vorhanden, einer für das Bild, das gerade auf dem Monitor dargestellt wird, und einer, in den das nächste Bild gerade "reingeschrieben" wird):
- 0 ms: letztes Bild wird aus "Puffer 1" angezeigt, nächstes Bild wird in "Puffer 2" berechnet.
- 16,7 ms: ist das Bild in "Puffer 2" fertig? Nein, also nochmal "Puffer 1" anzeigen.
- 25 ms: Bild in "Puffer 2" ist fertig. Nächstes Bild kann aber nicht berechnet werden, da kein weiterer Puffer frei ist.
- 33,3 ms: ist das Bild in "Puffer 2" fertig? Ja, also Bildanzeige von "Puffer 1" auf "Puffer 2" umschalten. "Puffer 1" ist jetzt frei, also mit der Berechnung des nächsten Bildes beginnen.
- 50 ms: ist das Bild in "Puffer 1" fertig? Nein, also nochmal "Puffer 2" anzeigen.
- 58,3 ms: Bild in "Puffer 1" ist fertig. Nächstes Bild kann aber nicht berechnet werden, da kein weiterer Puffer frei ist.
- 66,7 ms: ist das Bild in "Puffer 1" fertig? Ja, also Bildanzeige von "Puffer 2" auf "Puffer 1" zurückschalten. "Puffer 2" ist jetzt frei, also mit der Berechnung des nächsten Bildes beginnen.
Und so weiter. Also gibt es alle 33,3 ms ein neues Bild, das entspricht 30 fps. Dabei ist es egal, ob die Grafikkarte jetzt 16,7 ms oder 33,2 ms oder irgendwas dazwischen gebraucht hat.
TripleBuffering (es stehen 3 Puffer zur Verfügung, eins für das gerade angezeigte Bild, und 2 weitere für die nächsten Bilder):
- 0 ms: letztes Bild wird aus "Puffer 1" angezeigt, nächstes Bild wird in "Puffer 2" berechnet.
- 16,7 ms: ist das Bild in "Puffer 2" fertig? Nein, also nochmal "Puffer 1" anzeigen.
- 25 ms: Bild in "Puffer 2" ist fertig. Nächstes Bild wird berechnet und in "Puffer 3" geschrieben.
- 33,3 ms: ist das Bild in "Puffer 2" fertig? Ja, also Bildanzeige von "Puffer 1" auf "Puffer 2" umschalten.
- 50 ms: Bild in "Puffer 3" ist fertig. "Puffer 1" ist eben frei geworden, also wird das nächstes Bild berechnet und in "Puffer 1" geschrieben.
- 50 ms: ist das Bild in "Puffer 3" fertig? Ja, also Bildanzeige von "Puffer 2" auf "Puffer 3" umschalten.
- 66,7 ms: ist das Bild in "Puffer 1" fertig? Nein, also nochmal "Puffer 3" anzeigen.
- 75 ms: Bild in "Puffer 1" ist fertig. "Puffer 2" ist frei, also wird das nächstes Bild berechnet und in "Puffer 2" geschrieben.
- 83,3 ms: ist das Bild in "Puffer 1" fertig? Ja, also Bildanzeige von "Puffer 3" auf "Puffer 1" umschalten.
Hier gibt es das erste neue Bild nach 33,3 ms, das zweite dann nach weiteren 16,6 ms, das nächste dann wieder 33,3 ms später, das dadrauf folgende wieder 16,6 ms später... Insgesamt sind das also in diesem Beispiel 4 Bilder pro 100 ms, also 40 Bilder pro Sekunde (Frames per Second, fps). Allerdings springt der zeitliche Abstand zwischen 2 Bildern immer zwischen denen von 30 fps (33,3 ms) und 60 fps (16,7 ms) hin und her.
Im großen und ganzen ist TripleBuffering natürlich besser, besonders wenn die Grafikkarte gerade so die 60 fps nicht mehr schafft, fällt die Bildausgabe nicht gleich direkt auf 30 fps herunter. Allerdings kann es auch zu einer deutlich größeren Eingabelatenz (Lag) führen. Bei DoubleBuffer dauert es immer 33,3 ms, bis die Eingaben auch auf dem Bildschirm sichtbar werden. Bei TripleBuffering schwankt das ganze aber: ist die Grafikkarte gerade mit der Bildberechnung fertig geworden, bevor das nächste Bild angezeigt werden kann, sinds (laut obigen Beispiel) knapp über 25 ms, hat die Grafikkarte den Punkt aber verpasst, und ist minimal drüber, muss man nochmal zusätzlich 16,7 ms warten, bis das fertige Bild dann auch angezeigt wird (41,7 ms).
Also 30 fps mit 33,3 ms Lag vs. 40 fps mit 25 ms bis 41,7 ms Lag. Das sorgt dann halt für eine deutlich schwammigere Steuerung.