Grafik Grafik Grafik Grafik
image
Grafik Grafik Grafik Grafik Grafik

FAQ MONITORE

Was bedeutet vSync und was hat das mit Tearing und Rucklern zu tun?

Autor: Reinold Növermann
13.06.2006, 15:00 Uhr

Tearing, Ruckler, Frame Drops - das alles sind Probleme, die vor allen Dingen Spieler ärgern und bei Shootern oft zwischen Sieg und Niederlage entscheiden können. Was die vertikale Synchronisation in diesem Zusammenhang an Vor- aber auch Nachteilen bringt möchten wir in den folgenden fünf Punkten ausführlich erklären.

Weitergehende Diskussionen zu diesem Thema finden Sie übrigens über die Suchfunktion im Prad-Board, z.B. hier.

1. Was macht die VGA-Karte? Was ist ein "vSync"?

Die Vertikalfrequenz (kurz: vSync) wird von der Grafikkarte "erzeugt". Das funktioniert wie folgt:

Ein Taktgenerator auf der Grafikkarte erzeugt den Pixeltakt. Dieser ist üblicherweise im Megahertz (MHz-) Bereich, also eine Million Takte pro Sekunde. Die Länge eines Pixeltakt-Zyklus bestimmt den zeitlichen Abstand zwischen zwei einzelnen Pixeln, die von der Grafikkarte am VGA- oder DVI-Ausgang sequentiell (hintereinander) ausgegeben werden.


Ein Zähler zählt über eine Zeile hinweg die Zyklen des Pixel-Taktes. Immer wenn eine Zeile komplett durchlaufen wurde, wird ein "hSync-Impuls" erzeugt und der Zähler zurückgesetzt. So wird die so genannte Horizontalfrequenz (hSync) gebildet. Eine Zeile wird immer von links nach rechts durchlaufen.

Ein weiterer Zähler zählt die Zeilen. Immer wenn ein komplettes Bild durchlaufen wurde, wird ein "vSync-Impuls" erzeugt und der Zähler zurückgesetzt.

Während der ganzen Zeit liegen auf den Rot-, Grün-, und Blau-Kanälen (RGB-Kanäle) des VGA-Ausgangs der Grafikkarte Spannungen an, die die jeweilige Farbintensität im aktuellen Pixel angeben.

So überträgt die Grafikkarte kontinuierlich Bild für Bild; jeweils eines pro Vertikalzyklus. Jedes Bild wird Zeile für Zeile von oben nach unten, jede Zeile wird Pixel für Pixel von links nach rechts übertragen.

Bei digitaler Übertragung via DVI funktioniert das Ganze fast genauso, es werden bloß digitale statt analoger Werte auf den Leitungen für die RGB-Kanäle übertragen. Allerdings wird bei DVI auf einer weiteren Leitung auch der Pixeltakt übertragen, während bei analoger Übertragung außer den Farbwerten nur noch die hSync- und vSync-Impulse übertragen werden.

Die Grafikkarte holt sich die notwendige Information aus dem Grafikspeicher, der sich meist auf der Grafikkarte befindet. Wie die Information auf der Grafikkarte codiert ist, hängt von der Farbtiefe (genauer: Pixelformat) der gerade aktiven Bildeinstellung am PC ab.



Da gibt es eine ganze Palette: 1 Bit pro Pixel (schwarz/weiß), 2 Bit pro Pixel (CGA, vierfarbig), 4 Bit pro Pixel (EGA, 16 Farben), 8 Bit pro Pixel (VGA, 256 Farben), 16 Bit pro Pixel (65536 Farben), 24 und 32 Bit pro Pixel (beide ca. 16.7 Mio. Farben).

Zwischen 24- und 32 Bit gibt es keinen Unterschied, was die Anzahl der Farben angeht. Pro Farbkanal werden maximal 8 Bit pro Pixel ausgewertet. 32 Bit verwendet man hauptsächlich deshalb, weil dies genau der Wortbreite eines 32-Bit Prozessors entspricht. Ein "Wort" eines Prozessors nennt man die Datenmenge, die in einem (Standard)-(Daten)-Verzeichnis des Prozessors Platz hat.

Dies ermöglicht höhere Zugriffsgeschwindigkeiten auf einzelne Pixel und vereinfacht das Design von Grafikprozessoren. Aus diesem Grunde bieten die meisten Spiele nur Einstellmöglichkeiten für 16 Bit oder 32 Bit an, nicht jedoch für 24 Bit, obwohl letzteres auch möglich ist. Aber es ist halt langsamer.

Wie auch immer die Information auf der Grafikkarte codiert ist - die Farben werden immer auf dieselbe Art als Spannungs-Werte am VGA-Ausgang codiert. Die Erzeugung dieser Spannungswerte wird von drei parallel laufenden Digital-Analog-Konvertern, dem so genannten "RAMDAC" vorgenommen.

Dieser muss ziemlich schnell sein: Ein Pixeltakt von 162 MHz wäre z.B. typisch für eine Auflösung von 1600x1200 Pixel. Der RAMDAC muss hierbei 162 Millionen mal pro Sekunde aus drei digitalen 8-Bit Werten drei Spannungswerte erzeugen.

Intern rechnet die Grafikkarte während der Ausgabe also schon auf digitaler Ebene jede Farbtiefe auf 3x8 Bit um! Je nach Grafikmodus ist der Bereich im Grafikspeicher, der für das angezeigte Bild verwendet wird, unterschiedlich groß; die Größe (in Bit) berechnet sich aus der Anzahl der Pixel mal Farbtiefe. Diesen Bereich nennt man "Bildpuffer".

Ein bestimmter Grafikmodus definiert sich also letztendlich aus Pixelformat, Pixeltakt, Zeilenlänge (in Pixeln), Bildhöhe (in Zeilen), und den Größen für die Randbereiche und die Rücksprung-Bereiche.

Mit entsprechenden Tools unter Windows (Powerstrip) oder mit "Modelines" (unter Linux) kann man sich auf die Art und Weise fast beliebige eigene Grafikmodi basteln.


2. Wie wird der Eindruck von Bewegung erzeugt?

Was auf einem Monitor angezeigt wird, ist also die kontinuierliche Folge von Bildern, die von der Grafikkarte übertragen werden. Wenn wir nur den Desktop anzeigen, sind diese Bilder immer (fast) identisch.

Um Bewegung zu erzeugen, müssen sich die Bilder jedoch über die Zeit verändern. Das bedeutet, dass der Inhalt des Grafikspeichers kontinuierlich verändert werden muss. Um auf dem Windows-Desktop den Mauszeiger zu bewegen, wird ständig folgender Zyklus durchlaufen:

- Die neue Mausposition ermitteln.

- Den Rechteckigen Bereich des Desktops an der neuen Mausposition "retten", also aus dem Bildpuffer in einen anderen Speicherbereich kopieren.

- Den Mauszeiger an der neuen Anzeigeposition in den Bildpuffer "malen".

- Ein Weilchen warten (bzw. etwas anderes tun, z.B. das gerade laufende Programm weiter ausführen).

- Den Mauszeiger wieder löschen, indem der zuvor "gerettete" Bereich wieder zurückkopiert wird.

- Den Maus-Zyklus von vorne beginnen.

Dass diese Methode alles andere als perfekt ist, ist nicht schwer zu erkennen: Direkt nach dem Löschen des Mauszeigers ist kurzfristig kein Mauszeiger im Bildpuffer vorhanden!

Wenn irgendetwas auf dem Desktop an der Position der Maus geändert werden soll, muss der Mauszeiger kurzzeitig "ausgeschaltet" werden, da sonst das "gerettete" Stückchen Hintergrund nicht mehr korrekt wäre.

Diese kurzen "Maus-Aussetzer" sind allerdings heutzutage kaum je zu Gesicht zu bekommen, da die PCs einfach so schnell sind, dass das Löschen und Neuzeichnen eines Mauszeigers eine Sache von deutlich weniger als einer millionstel Sekunde ist.

In dieser Zeitspanne werden selbst in hochauflösenden Bildeinstellungen nur ein paar Dutzend Pixel übertragen. Die Wahrscheinlichkeit, dass in dem Moment, in dem die Maus gerade gelöscht ist, an dieser Position Pixel übertragen werden, ist also ziemlich gering.

Wesentlich gravierender ist die Tatsache, dass der Maus-Zyklus in aller Regel nicht mit dem Vertikaltakt der Grafikkarte synchronisiert wird. Das bedeutet: Der Maus-Zyklus dauert jeweils z.B. ungefähr eine 50stel Sekunde.

Was die Grafikkarte indes macht, wird dabei jedoch nicht berücksichtigt. Man kann sich nun leicht überlegen, wie die Bildfolge aussieht, die von der Grafikkarte am VGA-Ausgang übertragen wird: Gelegentlich wird die Maus in zwei aufeinander folgenden Bildern an derselben Position sein.

Das menschliche Auge ist "von Natur aus" darauf ausgelegt, bewegte Objekte zu fixieren. Wenn wir die Maus bewegen, folgen wir automatisch mit den Augen dem Mauszeiger. Das Auge geht jedoch von einer einigermaßen gleichmäßigen Bewegung aus. Die aus der fehlenden Synchronisation folgende Unregelmäßigkeit in der Bewegung empfinden wir deshalb als unnatürlich und störend.

An die ruckelnde Maus haben sich die PC-User allerdings erstaunlich gut gewöhnt. Ein Zeichen für die enorme Anpassungsfähigkeit des menschlichen Gehirns. Man beachte: Auf fast allen "alten" Computersystemen (z.B. Atari ST, Amiga, C64) war die Maus synchronisiert!


3. Wie funktioniert der Bildaufbau in Spielen?

Zum Ersten werden in Spielen gewöhnlich wesentlich mehr Objekte als nur ein Mauszeiger bewegt. In 3D-Spielen wird sogar grundsätzlich das gesamte Bild immer wieder komplett neu berechnet. Das "Aussetzer-Problem", welches beim Mauszeiger kaum jemals wahrzunehmen ist, nimmt hier völlig andere Dimensionen an:

Die Berechnung eines Bildes für ein 3D-Spiel läuft gewöhnlich so, dass zuerst das komplette alte Bild gelöscht wird, um dann Objekt für Objekt (bzw. Polygon für Polygon) das neue Bild aufzubauen. Ein solches komplettes Bild nennt sich "Frame".

Die Anzahl der Frames, die pro Sekunde aufgebaut werden, nennt sich "Frame Rate" und wird in "Frames per second", kurz fps, gemessen. Ein solches Frame zu berechnen, ist eine der aufwändigsten Aktionen in einem Spiel.




Daher sinkt häufig die Frame-Rate drastisch, wenn in dem Spiel gerade viel los ist: Der Computer schafft es einfach nicht mehr, die Frames schneller zu berechnen.

Man stelle sich nun vor, dies alles würde direkt im Bildpuffer stattfinden. Das Ergebnis wäre ein grauenhaftes Geflacker, denn die meiste Zeit befindet sich das Bild im Aufbau.

Die Bildausgabe der Grafikkarte findet jedoch während der ganzen Zeit statt. Es wäre also purer Zufall, wenn an der Stelle, an der die Grafikkarte gerade den Bildspeicher ausliest, ein fertig berechnetes Bild ist.

Aus diesem Grund wird in fast allen Spielen "Double-Buffering" verwendet: Man verwendet einen primären Puffer (=Bildpuffer) und einen Hintergrund-Puffer. Im Hintergrundpuffer wird in aller Ruhe das nächste Bild aufgebaut, während im primären Puffer das vorherige Bild in voller Pracht angezeigt wird.

Sobald das neue Bild fertig ist, wird ein Seitenwechsel (Page Flip) ausgeführt: Damit wird der Hintergrundpuffer zum neuen primären Puffer erklärt, der alte primäre Puffer wird zum Hintergrundpuffer.

Die Grafikkarten sind in der Lage, jederzeit eine solche Änderung der Addresse des Bildpuffers durchzuführen! Die laufende Bildausgabe wird dann nahtlos an derselben Pixelposition im neuen Bildpuffer weitergeführt.


4. Wie hängen vSync und Tearing zusammen?

An dieser Stelle treffen wir auf die eigentliche Problematik: Denn genau wenn das im letzten Absatz beschriebene passiert, haben wir die Situation, dass "mitten im Bild" von einem Frame zum nächsten gewechselt wird.

Das von der Grafikkarte übertragene Bild hat somit (irgendwo) eine horizontale Teilung; oberhalb ist das ältere, unterhalb das neuere Frame sichtbar. Diesen Effekt bezeichnet man als Tearing, da die Frames durch die Unterteilungen regelrecht "zerrissen" werden.

Dies tritt immer und grundsätzlich auf, wenn die vertikale Synchronisation deaktiviert ist!



Wenn die Frame Rate nun wesentlich höher als die Vertikalfrequenz ist (z.B. Vertikalfrequenz 60 Hz, Frame Rate 150 Hz), tritt sogar grundsätzlich mehr als ein Page-Flip pro Vertikalzyklus auf; damit haben wir pro Bild mehrere Unterteilungen in verschiedene alte Frames!

Wenn die Frame Rate niedriger als die Vertikalfrequenz ist, entstehen gelegentlich auch Bilder ohne Unterteilung.

Ist die vertikale Synchronisation aktiviert, dann wird beim Page-Flip grundsätzlich gewartet, bis der nächste vSync-Impuls erzeugt wird. Erst wenn die Übertragung eines kompletten Bildes beendet ist, wird zum neuen Bild gewechselt.

So werden bei eingeschalteter vertikaler Synchronisation nur komplette Bilder übertragen und es tritt kein Tearing auf, vorausgesetzt, die interne Bildfrequenz des angeschlossene TFTs ist synchron zur Vertikalfrquenz.

Es gibt viele TFTs, die intern gar nicht exakt mit den angegebenen 60- oder 75 Hertz arbeiten. Immer dann kann es trotz aktivierter Vsync zu Rucklern und Tearing kommen.

In unseren Testberichten gehen wir auf diese Problematik ein. Auch im Prad-Board finden Sie dazu über die Suchfunktion einige Diskussionen.

Einige neue Spielermodelle, z.B. ViewSonic VX922 passen ihre interne Frequenz inzwischen an die Vertikalfrequenz an, so dass es bei diesen TFTs keine Probleme mehr mit Tearing und Rucklern gibt.


5. Wir spielen ein bischen Counter-Strike!

Nehmen wir nun der Einfachheit halber folgendes an: Wir spielen Counter-Strike (CS). Der Grafik-Modus ist 640x480 Pixel bei 100Hz, vSync ist aktiviert. Wir verwenden einen Pentium 500 mit GeForce-Grafikkarte.

Wenn gerade nicht viel los ist, braucht der Computer ungefähr 0,007 Sekunden, um ein Frame zu berechnen. Damit könnte er theoretisch 142 fps schaffen.

Doch die vertikale Synchronisation zwingt CS dazu, bei jedem Page-Flip auf den vSync-Impuls zu warten, bevor mit dem nächsten Frame angefangen werden kann.

Der Rechner langweilt sich also jeweils 0,003 Sekunden lang, bis die Grafikkarte das aktuelle Frame fertig übertragen hat. Die Frame Rate beträgt somit 100 Hz und ist identisch mit der Vertikalfrequenz.

Wir laufen um eine Ecke und plötzlich steht ein Gegner vor uns. Eine Spielfigur muss nun zusätzlich zum Hintergrund dargestellt werden, außerdem benötigt die CPU mehr Leistung für die Kollisionsabfrage.



Damit dauert die Berechnung eines Frames nun etwas länger, sagen wir: 0,011 Sekunden. Der PC schafft es dann gerade eben nicht mehr, ein Frame innerhalb eines Vertikalzyklus zu erstellen.

Das bedeutet, der Page-Flip verpasst jeweils einen vSync-Impuls knapp und muß 0,009 Sekunden auf den nächsten warten. Jedes Frame wird also zweimal von der Grafikkarte übertragen. Zwischen zwei Frames vergehen nun immer 0,02 Sekunden, die Frame Rate hat sich also glatt halbiert auf nur noch 50 fps!

Da dieser Frame-Drop sehr plötzlich passiert, ist der Unterschied deutlich spürbar, selbst bei so hohen Frame-Raten. Daher haben wir vor Schreck nicht schnell genug reagiert und wurden vom Gegner erwischt.

Damit wechseln wir in den Ghost-Modus, und sehen zusätzlich unsere eigenen sterblichen Überreste. Außerdem kommen noch ein paar weitere Gegner um die Ecke. Damit wird die Belastung für den PC nochmals höher: Er benötigt nun 0,023 Sekunden pro Frame.

Was resultiert daraus? Jedes Frame wird drei mal angezeigt, die Frame Rate sinkt auf 33.33 Hz.

Wäre nun auf diesem PC vSync deaktiviert gewesen, wäre die Frame-Rate immer genau so hoch gewesen, wie es der PC gerade eben schafft. Die Übergänge zwischen hoher und niedriger Frame-Rate wären wesentlich weniger abrupt.

Das ist der Vorteil von deaktiviertem vSync. Der Nachteil: Wir haben Tearing. Und aufgrund des Tearings werden die meisten Frames "zerrissen" dargestellt.

Weiterhin: Wollten wir einem sich gleichmäßig bewegenden Objekt mit den Augen folgen, würden wir erkennen, dass aufgrund des Tearings die Bewegung nicht mehr gleichmäßig ist und ruckelt.

Wenn die Frame-Rate höher als die Vertikalfrequenz ist, "überspringt" das Objekt gelegentlich einen Schritt seiner Bewegung.

Ist die Frame Rate niedriger, wird gelegentlich ein Schritt der Bewegung doppelt (oder noch öfter) angezeigt. Auf jeden Fall ist die Gleichmäßigkeit der Bewegung nicht mehr so gegeben, als wenn vSync aktiv wäre.

Optimal ist es daher, wenn die CPU und Grafikkarte so leistungsstark sind, dass sie auch bei starker Beanspruchung die eingestellte Frequenz, in unserem Beispiel 100 Hz, schaffen. Dann kommt es bei aktivierter vSync nicht zu Frame-Drops und Tearing wird ebenfalls vermieden.

[RN (Text), WW (Inhalt)]

Keine Kommentare vorhanden

Grafik
Prad.de auf Facebook
Grafik
Grafik
Prad.de auf Twitter
Grafik
Grafik
Prad.de auf Google+
Grafik
Grafik
Prad.de Videos auf YouTube ansehen
Anzeigen
© 2002 - 2014 PRAD ProAdviser GmbH & Co. KG | Alle Rechte vorbehalten! | Impressum | Datenschutzerklärung
Ausgewiesene Warenzeichen und Markennamen gehören ihren jeweiligen Eigentümern.
PRAD übernimmt keine Haftung für den Inhalt verlinkter externer Internetseiten!

Hinweis: Unsere Internetseite wird mit aktiviertem Adblocker teilweise nicht korrekt angezeigt!