PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was ist exakt Triple Buffering?


Merkor
2003-06-23, 18:27:25
Es werden drei statt zwei Frames im Speicher vorgerendert, aber was bringt es genau? Ist es nur sinnvoll, wenn Vsync angeschaltet ist oder wenn er aus ist?

Aquaschaf
2003-06-23, 19:10:42
edit : hatte wieder mal keine ahnung, aber dafür jetzt etwas dazugelernt.

Merkor
2003-06-23, 19:16:08
Ich habe mich jetzt etwas eingelesen und es ist anscheinend so, dass Triple Buffering nur bei Vsync on etwas bringt, weil die FPS nicht um die Hälfte der Bildwiederholfrequenz fallen, sondern nur im etwa 1/3...

ow
2003-06-23, 19:33:48
Triplebuiffering ist nur bei eingfesdchasltetem VSync sinnvoll. Es werden hierbei (wie der Name schon sagt) 3 Puffer benutzt.

Der Frontbuffer, der das sichtbare Bild enthält, dass gerade auf dem Monitor angezeigt wird.
2 Backbuffer, in die der Grafikchip die Pixel des nächsten anzuzeigenden Frames schreibt.
Falls der erste Backbuffer voll ist, das Auslesen des Frontbuffers aber noch nicht komplett erfolgt ist, dann rendert der Chip weiter in den 2. Backbuffer (bei Doublebuffering (1xFront, 1x Back) macht der Chip hier einfach Pause, er tut garnix).

Wenn die Darstellung des Frontbuffers auf dem Monitor komplett erfolgt ist, dann kommt ein Bufferswap.
Der erste Backbuffer wird zum Frontbuffer und auf dem Monitor ausgegeben, der 2. Backbuffer wird zum 1. Backbuffer und der alte Frontbuffer zum 2. Backbuffer.

auki
2003-06-23, 19:36:16
Und warum ist das nur bei Vsync ON sinnvoll??

Korak
2003-06-23, 19:37:51
Original geschrieben von ow
Triplebuiffering ist nur bei eingfesdchasltetem VSync sinnvoll.



Was is denn mit dir los? :| ;D

Piffan
2003-06-23, 20:48:04
Original geschrieben von auki
Und warum ist das nur bei Vsync ON sinnvoll??

Weil es bei Vsyn off keinen Vorteil bringt ;)

jetzte müsste man nur wissen, wo der Vorteil liegt :D

Der Vorteil bei Vsyn off wie bei triple Buffering liegt darin, dass die Engine nicht auf den Monitor warten braucht. Es gibt keine Holpereien der FPS- Zahlen.
Ist im Falle von Vsync on nämlich die Spieleengine in der Lage, etwas mehr Bilder zu liefern als der Monitor zeichnen kann, dann erfolgt eine "Fixierung" oder Syncronisation auf exakt der Monitorfrequenz. Sobald aber die Engine knapp weniger als die Monitorfrequenz schafft, halbiert sich plötzlich die Zahl der Bilder pro Sekunde! Aber weit unterhalb von der Monitorfrequenz gibts auch noch Sprünge!

Durch Vsync off wird die Engine zwar entkoppelt von der Monifrequenz, dafür wechselt aber der Frontbuffer zum Backbuffer mitten im Zeichnen eines Bildes, so dass es zu Stückelein kommen kann, d.h. das Oberteil eines Bildes ist versetzt zum Unterteil, wenn ich mich im Spiel gerade um die eigene Achse drehe....nennt man tearing und kann manches Mal echt hässlich sein. Aber der echte Zocker ignoriert dieses...;)

Triple buffering strebt auch eine Entkoppelung an, diese funzt aber nur bis zur Monitorfrequenz. Darüber erfolgt dann doch die Syncronisation....

Meine Meinung: Vsync off ist sehr sinnvoll, da viele Engines beim Zielen mit der Maus recht schlecht dastehen, wenn die FPS vom Monitor begrenzt werden. Ist die FPS- Zahl sicher unter der Monifrequenz, leistet Triple Buffering gute Dienst: Kein Mauslag, kein Tearing, also nur Vorteile!

Nachtrag (edit): Das Geholper unterhalb der Monitorfrequenz bei Vsyn on liegt darin, dass ein Monitor immer nur ganze Bilder geliefert bekommt, keine Teilbilder. Also kann man immer nur ganzzahlige Teiler der Monifrequenz darstellen: Also entweder entspricht die FPS- Zahl der vollen Monitorfrequenz , oder der Hälfte, einem Drittel, Viertel usw.......dazischen gibts nix! Vsyn off hingegen nimmt da keine Rücksicht und der Wechsel des Buffer erfolgt auch bei teilweise fertigen Bildern ----> Stückelei

Piffan
2003-06-23, 20:55:48
Original geschrieben von Merkor
Ich habe mich jetzt etwas eingelesen und es ist anscheinend so, dass Triple Buffering nur bei Vsync on etwas bringt, weil die FPS nicht um die Hälfte der Bildwiederholfrequenz fallen, sondern nur im etwa 1/3...

Nee, immer noch falsch. Weiterlesen :D

Merkor
2003-06-23, 21:35:05
@Piffan: Wieso, hast du doch selber geschrieben, dass Triple Buffering nur bei Vsync ON was bringt. Wenn die Framerate unter die Monitorbildwiederholrate fällt, dann hilft Triple Buffering, dass der Einbruch lange nicht so stark ist als ohne...

Edit: Übrigens gute Beschreibung der Lage... :D

ow
2003-06-23, 22:26:03
Original geschrieben von auki
Und warum ist das nur bei Vsync ON sinnvoll??

Weil der Grafikchip bei VSync OFF nicht wartet, bis der Frontbuffer komplett ausgegeben ist, sondern der Bufferswap direkt (also eben nicht synchron zum Framewechsel) erfolgt. Das ist auch die Ursache des Tearings (horizontaler Versatz im Bild), dass bei ausgeschaltetem VSync auftreten kann.

Da der Swap direkt erfolgt, kann der Chip direkt in den nun zu den einen zum Backbuffer gewordenen Frontbuffer rendern ohne eine Pause einlegen zu müssen, s.o..
Es braucht hier also keinen dritten Buffer.

auki
2003-06-24, 00:10:44
Original geschrieben von ow
Weil der Grafikchip bei VSync OFF nicht wartet, bis der Frontbuffer komplett ausgegeben ist, sondern der Bufferswap direkt (also eben nicht synchron zum Framewechsel) erfolgt. Das ist auch die Ursache des Tearings (horizontaler Versatz im Bild), dass bei ausgeschaltetem VSync auftreten kann.

Da der Swap direkt erfolgt, kann der Chip direkt in den nun zu den einen zum Backbuffer gewordenen Frontbuffer rendern ohne eine Pause einlegen zu müssen, s.o..
Es braucht hier also keinen dritten Buffer.

THX! :)

Gast Mobo
2003-06-24, 00:15:49
Also ich muss sagen: tolle Arbeit, die hier einige leisten !!!
Wenn das Niveau weiter so geht, dann hat man hier lauter J.C. Nachfolger :-)

Pinhead
2003-06-24, 20:05:27
sehr schön erklärt, danke :)

kann man Triple Buffering eigentlich für jede 3D Engine erzwingen (bietet ja nicht jedes Game in den Optionen an)

Pinhead
2003-06-24, 23:54:19
*push* *wissenwill* :bäh:

S3NS3_0F_D34TH
2003-06-25, 06:08:09
Jo, kann man den eigentlich für IMMER aktivieren?? Denke da an das Mauslag oder Extrem-Tearing-Problem bei meinem alten Laptop wegen 60Hz TFT.

Edit:Muh, wurd ja schon gefragt... ist noch früh ;)

silverhawk
2003-06-25, 06:32:45
hmm.. und ich dachte TB nen qualitätsfeature ist *g*

Pinhead
2003-06-25, 08:54:34
Original geschrieben von silverhawk
hmm.. und ich dachte TB nen qualitätsfeature ist *g*

im Übertragenen Sinne schon, es steigert den Nutzwert der aktivierten Vsync, welche wiederrum ein schöneres (ohne Tearing) Bild liefert als mit deaktivierter

ice cool69
2003-06-25, 12:50:35
kann das meine radeon9500pro?

edit: wo kann ich das einstellen dass es immer erzwungen wird?

Pinhead
2003-06-26, 00:43:10
@ow

nun sag doch mal, läßt sich triple Buffering per Treiber erzwingen, da ja nicht jedes Game diese Einstellungsmöglichkeit bietet

PS. Ich werde den Tread so lange oben halten bis ich eine Antwort erhalte ;)

ice cool69
2003-06-26, 12:35:11
dito :D

Pinhead
2003-06-26, 15:01:43
*pusch* die 1.

S3NS3_0F_D34TH
2003-06-26, 15:50:29
Möcht ich auch wissen. Aber denke das es zu 99,89% NICHT geht.

R300
2003-06-26, 18:28:05
Ich denke, dass Trple Buffering von der Engine angeschaltet wird und
deswegen nicht von dem Treiber erzwungen werden kann.

Man kann es also nur anschalten, wenn das Spiel es unterstützt.:(

Pinhead
2003-06-27, 14:40:52
aber genau kann es wohl keiner sagen, nicht mal ow, der sich irgendwie dezent aus dem Tread heraushält, hm

*push* die 2.

InsaneDruid
2003-06-28, 17:33:39
*push* würd mich auch interessieren ob man das forcen kann, und wenn ja, wie.

Piffan
2003-06-28, 21:19:43
Im Prinzip kann man es per Treiber regeln, also unabhängig vom Spiel. Die Voodoo 2 bot diese Funktion, da konnte ich das Triple per Treiber erzwingen....

InsaneDruid
2003-06-28, 21:45:08
Exxtreme, wie siehts aus? Ne Möglichkeit das das mal im rTool erscheinen könnte?

Exxtreme
2003-06-28, 21:47:04
Original geschrieben von InsaneDruid
Exxtreme, wie siehts aus? Ne Möglichkeit das das mal im rTool erscheinen könnte?
Der Treiber bietet AFAIK sowas gar nicht an. Ich werde aber nachher genauer schauen.

Endorphine
2003-06-29, 00:42:15
Juhu :) erzwungenes TB wäre für meinen Geschmack mindestens ebenso wichtig wie AA/AF. Das Vsync-off tearing nervt mich ganz gewaltig.

TB lindert die vsync-on Leistungsprobleme doch schon mal erheblich.

Barbara Rhabarbar
2003-06-29, 00:45:56
Ich bin mir zwar nicht zu 100% sicher, aber ich kann mir nicht vorstellen, wie der Treiber ein Game zu Tripple Buffering zwingen könnte.
Schließlich ist es der Programmierer, der die Buffer (Front und Back) erzeugt und nicht der Treiber.
Und wie sollte das aussehen, wenn der Treiber in einem Game noch einen zusätzlichen Buffer anlegt? Ich als Programmierer entscheide schließlich in welchen Buffer ich gerade rendern will und ich entscheide, wann der Front- zum Backbuffer wird (und umgekehrt).
Wenn der Treiber nun noch einen weiteren Backbuffer erzeugt: Schön für ihn, aber davon weiß ich ja nix, ich würde ihn also nicht benutzen.

[Edit]
Was aber, wenn ich ihn benutzen würde ohne davon zu wissen?
Man stelle sich folgende Situation vor:
Während des Games soll ein "Laden"-Screen zu sehen sein, bei welchem auf schwarzen Hintergrund das Wort "Laden" blinken soll. Ich lösche den aktuellen Backbuffer mit schwarz und flippe. Den dann aktuellen Backbuffer lösche ich auch mit schwarz und schreibe "Laden". Während des Ladevorgangs flippe ich nun einmal pro Sekunde ohne die Buffer zu leeren oder etwas zu rendern. Die Schrift würde nun blinken.
Was aber, wenn der Treiber mir nun einen weiteren Buffer dazwischen schieben würde, von dem ich nix wüßte und der ein völlig anderes Bild enthält?

Xmas
2003-06-29, 02:03:01
Original geschrieben von Barbara Rhabarbar
Ich bin mir zwar nicht zu 100% sicher, aber ich kann mir nicht vorstellen, wie der Treiber ein Game zu Tripple Buffering zwingen könnte.
Schließlich ist es der Programmierer, der die Buffer (Front und Back) erzeugt und nicht der Treiber.
Und wie sollte das aussehen, wenn der Treiber in einem Game noch einen zusätzlichen Buffer anlegt? Ich als Programmierer entscheide schließlich in welchen Buffer ich gerade rendern will und ich entscheide, wann der Front- zum Backbuffer wird (und umgekehrt).
Wenn der Treiber nun noch einen weiteren Backbuffer erzeugt: Schön für ihn, aber davon weiß ich ja nix, ich würde ihn also nicht benutzen.

[Edit]
Was aber, wenn ich ihn benutzen würde ohne davon zu wissen?
Man stelle sich folgende Situation vor:
Während des Games soll ein "Laden"-Screen zu sehen sein, bei welchem auf schwarzen Hintergrund das Wort "Laden" blinken soll. Ich lösche den aktuellen Backbuffer mit schwarz und flippe. Den dann aktuellen Backbuffer lösche ich auch mit schwarz und schreibe "Laden". Während des Ladevorgangs flippe ich nun einmal pro Sekunde ohne die Buffer zu leeren oder etwas zu rendern. Die Schrift würde nun blinken.
Was aber, wenn der Treiber mir nun einen weiteren Buffer dazwischen schieben würde, von dem ich nix wüßte und der ein völlig anderes Bild enthält?
Sorry, da muss ich dir mindestens zur Hälfte widersprechen ;)

Mit D3D legt man selbst Swap Chains an, bei OpenGL nicht. Triple Buffering ist dort vollständig transparent für die Anwendung. Sie braucht gar nichts davon zu wissen. Und dein genanntes Beispiel wäre in OpenGL ein Bug (der Inhalt des Backbuffers nach dem Swap ist nicht definiert) und auch in D3D nur bedingt möglich (du dürftest kein D3DSWAPEFFECT_DISCARD verwenden, also auch kein Multisampling), auf jeden Fall aber sehr schlechter Stil.

Barbara Rhabarbar
2003-06-29, 15:12:00
Sorry, da muss ich dir mindestens zur Hälfte widersprechen

Mit D3D legt man selbst Swap Chains an, bei OpenGL nicht. Triple Buffering ist dort vollständig transparent für die Anwendung. Sie braucht gar nichts davon zu wissen. Und dein genanntes Beispiel wäre in OpenGL ein Bug (der Inhalt des Backbuffers nach dem Swap ist nicht definiert) und auch in D3D nur bedingt möglich (du dürftest kein D3DSWAPEFFECT_DISCARD verwenden, also auch kein Multisampling), auf jeden Fall aber sehr schlechter Stil.


Von QpenGL hab' ich keine Ahnung und ob das nun ein guter Stil ist oder nicht ist in dem Fall auch egal. Laut Directx-SDK:
"When a swap chain is created with a swap effect of D3DSWAPEFFECT_FLIP, D3DSWAPEFFECT_COPY or D3DSWAPEFFECT_COPY_VSYNC, the runtime will guarantee that a IDirect3DDevice8->Present operation will not affect the content of any of the back buffers."
Dementsprechend kann ich mich also darauf verlassen, daß der Backbuffer die Daten enthält, die ich erwarte. Dies wäre nicht mehr der Fall, wenn mir der Treiber ungefragt einen weiteren Backbuffer unterjubelt!
Außerdem: Wenn ich mein Game mit einem Rahmen verziere, welcher sich während des ganzen Games nicht ändert, warum sollte ich ihn in jedem Frame erneut zeichnen? Es wäre doch viel sinnvoller nur die Bereiche zu löschen, welche sich auch wirklich änderen können. Was wäre in diesem Fall am Stil auszusetzen?

R300
2003-06-29, 19:13:27
Man kann bestimmt den Triple Buffering unter OpenGL aktivieren,
schließlich konnte man bei der Kyro auch single buffering aktivieren.

Piffan
2003-06-29, 20:09:55
Original geschrieben von R300
Man kann bestimmt den Triple Buffering unter OpenGL aktivieren,
schließlich konnte man bei der Kyro auch single buffering aktivieren.

Das ist ja mal ne zwingende Logik......:)

Ich weiß ja noch nicht mal, ob man das Triple mit der Voodoo 2 nur in Glide- Games aktivieren konnte.....

Mr. Lolman
2003-06-29, 20:35:44
Nein, das konnte man überall aktivieren. Überhaupt scherten sich die Voodo Treiber nicht viel um MS Richtlinien. Da konnte man nach Lust und Laune 16 bit, 32 bit, 22bit(Voodo2) und 22bit(Voodoo3) forcen, an den LOD Einstellungen spielen, und (mittels 3rd Party Treiber) sogar das Jittering beim RGSSAA verändern.

Gast
2003-06-29, 21:35:43
Im RivaTuner konnte man Triple Buffering für NV-Karten "aktivieren". Ob da was wie erfolgreich erzwungen wurde und ob ATi-Treiber auch so eine Möglichkeit bieten, weiß ich allerdings nicht.

Xmas
2003-06-29, 22:15:13
Original geschrieben von Barbara Rhabarbar
Außerdem: Wenn ich mein Game mit einem Rahmen verziere, welcher sich während des ganzen Games nicht ändert, warum sollte ich ihn in jedem Frame erneut zeichnen? Es wäre doch viel sinnvoller nur die Bereiche zu löschen, welche sich auch wirklich änderen können. Was wäre in diesem Fall am Stil auszusetzen?
Dass du auf diese Weise Antialiasing effektiv unterbindest. Applikationsgesteuertes AA ist dann gar nicht mehr möglich, und vom Treiber erzwungenes AA ist entweder nicht möglich oder deutlich langsamer.

Gast
2003-06-30, 01:56:51
Original geschrieben von Mr. Lolman
das Jittering beim RGSSAA verändern.

ma ne dumme frage... was isen das? :>

InsaneDruid
2003-06-30, 15:39:55
Rotated Grid Super Sampling Anti Aliasing.

Das FSAA Verfahren das die V5 benutze. Qualitativ extrem hochwertig.

silverhawk
2003-07-02, 16:43:27
hmm was ist denn dann im allgemeinen gesagt die bessere methode? vsync aus oder vsync an + TB in betracht von leistung und qualität? in 3DM2k1 ist mir z.b. aufgefallen das ich bei vsync knapp das doppelte an punkten als bei vsync on bekam und bei 3DM2k3 knapp 1/3 mehr, wieso der unterschied so extrem ist kann ich mir auch nicht erklären.....

InsaneDruid
2003-07-02, 17:10:34
Weil mit vsync die max fps auf deine Bildwiederholfreq eingebremst ist, und wenn die fps unter den wert fällt wirds noch weiter eingebremst, bei 100Hz erreicht man also nie mehr als 100fps, sinkt die Leistung der Graka auf sagen wir 80fps wird durch das Syncen bei Double Buffering 50fps draus, dann 34 (Leistung unter 50 fps etc) Wenn auch 100fps in Games ausreichen, beim Benchen "fehlen" dann ne Menge fps.

Für maximale Quality ist Vsync aber erforderlich, Triple Buffering würde da eben hilfreich sein, dann wär der performance Verlust nicht so doll. Vor allem der "erste" Sprung (zb 100-50fps) wär nich so eklatant,

silverhawk
2003-07-02, 19:24:34
ja aber muss man denn bei aktuellen spielen wie "Mafia, UT2003, Vietcong, Vice City, Postal2, Splinter Cell, Battlefield" noch Vsync deaktivieren um maximale Performance zu bekommen, ich spiele dann ja meist auf 1280x1024x32 @ 85Hz... hätte man da dann noch mit aktivierten Vsync + TB Verlust. Andererseits wie groß währe bei Vsync off ein sichbarer Qualitätsverlust?

silverhawk
2003-07-03, 07:07:31
hmm wär mal nett wenn mal einer antworten würde........

Gast
2003-07-03, 09:58:26
Original geschrieben von silverhawk
ja aber muss man denn bei aktuellen spielen wie "Mafia, UT2003, Vietcong, Vice City, Postal2, Splinter Cell, Battlefield" noch Vsync deaktivieren um maximale Performance zu bekommen, ich spiele dann ja meist auf 1280x1024x32 @ 85Hz... hätte man da dann noch mit aktivierten Vsync + TB Verlust. Andererseits wie groß währe bei Vsync off ein sichbarer Qualitätsverlust?

Der Qualitäsverlust lässt sich ja nicht in Zahlen fassen. Bei schnellen Bewegungen ist das Bild dann leicht versetzt, auch Tearing genannt.

silverhawk
2003-07-03, 14:37:15
und was heißt das aufs fazit bezogen? sollte man Vsync + TB nun auf Dauer aktivieren in D3D/OGL?

InsaneDruid
2003-07-03, 16:07:11
Tja, nun, was soll man sagen?

Das kannst nur du alleine entscheiden, es wurde alles wichtige erklärende schon gesagt. Wenn dich Tearing nicht stört dann lass es, wenn dich Tearing abstösst dann schalt es ein.

Was *du* willst solltest *du* schon alleine rausfinden, oder?

silverhawk
2003-07-03, 16:37:25
da ich mich schon länger nicht mehr mit 3dgaming beschäftigt habe, möchte ich erstmal genug erfahrung sammeln, und wissen was die andren user darüber denken und wie konfigurieren.....

Merkor
2003-07-03, 17:37:06
Mich stört Tearing extrem. Da gibt es dann nur die Lösung Vsync an. Leider bricht die Framerate an bestimmten Stellen aus den genannten Gründen ein, wenn das Spiel kein Triple Buffering unterstützt. Man muss das von Fall zu Fall selber entscheiden...

silverhawk
2003-07-03, 18:37:24
aber die aktuellen spiele unterstützen ja heute fast alle TB. aber was mir aufgefallen ist, ist das AF nich in vielen spielen konfigurierbar ist, denke mal es ist das beste AA und AF gleich im Treiber zu erzwingen... oder was meint ihr?