Zitat Zitat von Kasimir
VSync bremst also nur ab und zwar immer auf einen bestimmten ganzzahligen Bruchteil der Frequenz des Monitors.
Das kann man aber durch Triple Buffering verhindern. Während beim normalen Double Buffering immer nur zwei Puffer hat, die bei jedem neuen Bild ausgetauscht werden hat man beim Triple Buffing drei Puffer.

Beim Double Buffering wird immer eine Seite angezeigt und im Hintergrund wird das nächste Bild auf die andere Seite gezeichnet. Diese beiden Seiten werden mit jedem neu gezeichneten Bild gewechselt. Dadurch ergibt sich das von Kasimir angesprochene Problem, dass dies immer nur in bestimmten ganzzahligen Bruchteilen der bildwiederholfrequenz geschehen kann.


Beim Tripple Buffering kommt jetzt noch eine dritte Seite hinzu. Die Erste wird auf dem Schirm angezeigt. Die Zweite enthält ein komplettes Bild, dass zwischengespeichert wird und auf der dritten Seite wird das neue Bild gezeichnet.

Der Vorteil davon ist, dass die Graka immer genügend Buffer zur Verfügung hat um durchgehend Bilder zu rendern ohne das sie auf den Monitor warten muss.

Damit ist nun eine Framerate möglich, die praktisch jede Frequenz unterhalb der Bildwiederholfrequenz des Monitors annehmen kann und dabei trotzdem den Tearing Effekt verhindert.

Der Nachteil ist allerdings, dass die Bildabläufe nicht immer ganz gleichmäßig sind. Während beim normalen Double Buffering immer gleichmäßige Anzeigedauern zwischen dem Bildaufbau stattfinden ist sie beim Triple Buffering ungleichmäßig.

Ich erkläre es am Besten mal an einem Beispiel. Angenommen der Monitor läuft mit 60 Hz.

Mit dem Double Buffering kann ich Frequenzen von 60, 30 oder auch 20 fps erreichen. Im ersten Fall wird mit jedem neuen Bildaufbau auch ein neues Bild angezeigt. Im zweiten Fall baut der Monitor das Bild zwar zwei mal auf, aber es wird zwei mal das gleiche Bild angezeigt. Im dritten Fall erscheint nur bei jedem dritten Bildaufbau ein neues Frame.

Wenn man die Bilder durchnummeriert und sie für jeden Neuaufbau aufschreibt, dann sieht das also so aus:

60 fps: Bild 1,2,3,4,5,6,7,8,9 (Jeder Aufbau ein neues Bild)
30 fps: Bild 1,1,2,2,3,3,4,4,5 (Jeder zweiter Aufbau ein neues Bild)
20 fps: Bild 1,1,1,2,2,2,3,3,3 (Jeder dritter Aufbau ein neues Bild)

Wie man sieht ist die Anzeigedauer für jedes Bild immer gleich lang. Entweder wird es mit jedem Aufbau neu gezeichnet, mit jedem Zweiten oder mit jedem Dritten.


Beim Triple Buffering ist es anders. Dort werden so viele Frames wie möglich gezeichnet und wenn die Grafikkarte nicht mit dem Zeichnen hinterher kommt, dann wird ab und zu ein Bild doppelt angezeigt, während die Karte im Hintergrund noch das neue Bild berechnet.

Nehmen wir wieder unseren 60 Hz Monitor und sagen wir mal, dass die Graka das Bild 40 mal pro Sekunde berechnen kann. Sie schaft es also die ersten vier Male ein komplettes Bild an den Monitor. Dann wird der Monitor zu schnell für die Karte und sie kann nicht mehr mithalten. Sie kann kein neues Bild liefern und der Monitor ist gezwungen das letzte Bild doppelt anzuzeigen. Danach hat die Graka wieder so viel Luft, dass sie 4 ganze Frames liefern kann, bevor der Monitor sie wieder überholt.

In dem Zahlenbeispiel würde das bei unserem 60 Hz Monitor bei 40 fps so aussehen:

40 fps: 1,2,3,4,4,5,6,7,8,8,9

Jedes vierte Bild muss also gedoppelt werden. Das führt natürlich zu einem ungleichmäßigen Ablauf der Bewegungen und man kann bei ungünstigen Widerholraten und sehr gleichmäßigen Bewegungen ein Ruckeln erkennen, denn jede vierte 60'stel Sekunde bleibt das Bild für einen kurzen Moment stehen.

Wie strark diese Ruckler sind hängt stark von den FPS ab, die man erreicht. Je näher sie sich an einem ganzzahligen Vielfachen befinden umso besser ist es.

Einen weiteren großen Nachteil hat das Triple Buffering auch noch. Es verbraucht mehr Speicher auf der Graka, als das Double Buffering.

Nehmen wir mal an, ich habe eine Auflösung von 1680x1050, die ich mit 32 bit Farbtiefe betreibe. Das sind also 1764000 Pixel * 4 Byte pro Pixel für die Farbinformationen. Das sind fast 18 MB, die das Bild dann groß ist.

Um ein einziges Bild zu speichern brauche ich also schon 18 MB Videospeicher. Verwendet man nun das normale Double Buffering, dann müssen nur zwei dieser Bilder gespeichert werden und die belegen also 36 MB im Ram. Beim Triple Buffering kommt jetzt noch ein weiterer Puffer hinzu und belegt noch einmal 18 MB, wobei wir alleine für's Zwischenspeichern der Bilder schon 58 MB Ram benötigen.

Das ist das optimalste, was man bei der auflösung erreichen kann.

Jetzt nehmen wir aber mal an, wir hätten HDR aktiviert und statt 32 bit eine 64 Bit Farbtiefe aktiviert. Dann wäre ein Bild nicht 18 MB, sondern 36 MB groß. Alle drei Bilder würden also schon 108 MB im Ram belegen.

Würde man noch Antialiasing hinzufügen, dann wird der Effekt noch extremer. Ich bin mir über die Faktoren nciht ganz sicher, aber ich glaube beim 4xAA vervierfacht sich auch der Speicherverbrauch eines Pixels.

Mit HDR und 4xAA belegt ein Pixel also 32 Byte. Das gesamte Bild würde dann 144 MB groß sein. Mit aktiviertem Triple Bufering würde sich das dann verdreifachen und der Vram wäre um satte 432 MB kleiner.

Triple Buffering ist also nur etwas für Grakas mit viel Speicher. Wenn man zu wenig hat und trotzdem Triple Buffering verwenden möchte, dann sollte man aufpassen, dass man mit den AA, AF und HDR Settings sparsam umgeht oder die Auflösung gering hält.


Alle die, die jetzt das Triple Buffering aktivieren wollen, damit sie auch mit aktiviertem vSync die maximale Framerate erreichen, sollten aber wissen, dass man das nicht in den Treibereinstellungen einstellen kann. Soweit ich weiß geht das weder bei ATi noch bei nVidia.

Es gibt zwar eine Checkbox für das Triple Buffering, aber die wirkt sich nur auf OpenGL Anwendungen aus und nicht auf D3D Anwendungen.

Um Triple Buffering auch für D3D-Anwendungen zu aktivieren muss man sich den RiveTuner runterladen. Mit dem neusten RivaTuner werden diverse Tools mitgeliefert (im Tools Verzeichnis).

Dort muss man den D3D Overrider starten. Der sorgt dafür, dass das Triple Buffering auch bei D3D Spielen aktiv wird. Natürlich sollte man im Setup den Haken bei "Run at Windows Startup" auch aktivieren, damit das Programm automatisch gestartet wird.

Von nun an ist das Triple Buffering immer aktiv, wenn ihr vSync aktiviert. Das es jetzt beim initialisieren eines neuen grafikmoduses piept ist normal und zeigt, dass das Progamm aktiv ist.

Es kann allerdings sein, dass es bei einigen Anwendungen zu Problemen kommt. Die kann man dann im Setup des D3D Overriders ausschließen. Dann wird beim vSync wieder das normale Double Buffering verwendet.