Registrierung | Passwort vergessen
News - Details
Informationen zur ausgewählten Nachricht.

Mythos Lag Compensation
02.01.2013 um 22:14 Uhr - Poison

CallofDutySeries.de erklärts

Mythos Lag Compensation

 

 

 

 

 

 

Spätestens seit den katastrophalen Auswirkungen und der ersten Erwähnung des fast schon wie ein Mythos wirkenden Wortes „Lag Compensation“ im Zusammenhang mit Call of Duty, ist der Begriff fast jedem Szenen-Veteranen bekannt. Aber die eigentliche Bedeutung der Lag Compensation und den Nutzen hinter dieser Technik kennen Wenige. Das darf so natürlich nicht bleiben und deswegen gibt’s hier die Erklärung des Mythos Lag Compensation.

Was ist Lag?
Lag bedeutet wörtlich übersetzt Verzögerung und genau darum handelt es sich letztendlich auch. Zu unterscheiden ist zwischen sog. FPS-Lag, der entsteht, wenn die Grafikkarte zu wenig Leistung für das Spiel hat oder aber das Spiel eine schlechte Hardware-Optimierung aufweist. Doch der an dieser entscheidende ist der sogenannte Network-Lag. Dabei handelt es sich um die Verzögerung, die aufgrund der unterschiedlichen geografischen Positionen der Netzwerk-Clients, in diesem Fall der Spieler, auftritt. Alle Eingaben, die am eigenen PC oder der Konsole getätigt werden, müssen ähnlich wie ein geschriebener Brief zu dem Ort gelangen, wo sie „erwartet“ werden. Zwar sind diese Daten wesentlich schneller als ein Brief, aber auch ihr zurückzulegender Weg benötigt Zeit. Diese Zeit wird als sogenannter Ping (Verzögerungszeit) oft in Millisekunden (ms) angegeben. Überschreitet diese Zeit einen bestimmten Wert, sodass sie für den Nutzer merklich „lang“ wird, spricht man von Lag. Dabei gibt es dafür keine feste Grenze, da Lag besonders in schwacher Ausprägung auf Empfinden beruht. Letztendlich weist jedoch jede Art von Datenversendung Lag auf, da die Daten nicht sofort dort ankommen, wo sie sollen. Da dies jedoch offensichtlich ist, wird eine bestimmte Zeit abhängig von der Anwendung als tolerabel eingestuft und nicht als Lag bezeichnet. In Ego-Shooter sind das meist Pings bis etwa 60-70 ms.

Was lässt sich dagegen tun?
Zum Lösen von Lag gibt es grundsätzlich zwei übergreifende Möglichkeiten. Zum Einen wäre es möglich, die Entfernung zwischen den Netzwerk-Clienten so weit zu verringern, dass die Zeitspanne, die versendete Daten benötigen, um am Zielort anzukommen, akzeptabel wird. Unter diesen Oberbegriff fallen auch lokale Parameter, wie zum Beispiel eine Firewall, die den Ping ebenfalls beeinflussen können.

Offensichtlich sind das für einen Spieleentwickler und auch für die meisten anderen Anwendungen keine probaten Lösungen.

Deswegen gibt es die sogenannte Lag-Compensation, welche den zweiten großen Überbegriff bildet.

Die einfachste Art der Lag-Compensation – Client-side state tracking
Die einfachste Art der Lag-Compensation ist gleichzeitig die effektivste, da sie auftretenden Lag nahezu vollkommen eliminiert. Bei diesem Design haben Netzwerk-Clients selbst Kontrolle über den Spielstatus (gamestate), in dem sie sich befinden. Dabei können sie vor allem absolute Status an andere Clients oder aber den Server senden. So könnte der Client beispielsweise direkt senden, wo er sich befindet und auf wen er schießt, ohne jegliche Kontrolle auf Korrektheit. Und genau dort liegt der Knackpunkt. Trotz der enormen Effizienz der Methode, ist sie nicht praktikabel, da auf Vertrauen zum Clienten, also dem Spieler, beruht. Cheating und Hacking wäre einfacher denn je.

Verknüpfte Client- and Serverside Lag-Compensation
Aufgrund der oben genannten Probleme verfügen Clients im Normalfall nicht über die Berechtigung wichtige Spielstatus zu verändern oder zu setzen, sondern erhalten sie vom Server. Die Aufgabe des Clients ist es nun, diesen erhaltenen Status möglichst genau auszuwerten, also darzustellen (zu rendern). Doch das ist nicht immer einfach, da Status-Updates stellenweise mit einer Verzögerung oder gar nicht ankommen (, weil zum Beispiel das Paket, in dem die Daten gesendet wurden, verloren gegangen ist). Der Client muss in einem solchen Fall den wahrscheinlichsten Verlauf des Spiels oder der Anwendung „vorhersagen“. Dazu versucht er anhand von vorhandenen Möglichkeiten, die sich aus dem für ihn aktuellen Status ergeben, zum Beispiel die Bewegung von Spielern abzuschätzen. Da dies offensichtlich nicht einfach ist, gibt es zwei grundlegende Konzepte, die da zu angewandt werden können.

Die Clientseite
Extrapolation (Hochrechnung)
Extrapolation ist ein Versuch einen zukünftigen Spielstatus im eigentlichen Sinne vorherzusagen. Sobald ein neues Paket, also ein Datensatz, vom Server eintrifft, werden alle Objekte mit den neuen Werten aktualisiert. Während die nächste Aktualisierung erwartet wird, wird der wahrscheinlichste zukünftige Spielstatus anhand eines vom Entwickler implementierten Algorithmus errechnet. Dabei spielen unterschiedliche Faktoren wir zum Beispiel der aktuelle Status aber auch Erfahrungswerte, deren Priorität je nach Algorithmus-Implementation anders ist, eine Rolle. So wird der Client zum Beispiel vermuten, dass sich ein bewegender Spieler in dieselbe Richtung weiterbewegt. Trifft der erwartete Datensatz ein, wird die vorhergesagte Position entsprechend korrigiert, im optimalen Fall nur minimal. Leider tritt dieser Fall selten ein, sodass eine korrekte Implementation dieser Technik von großem Aufwand und somit mit entsprechenden Kosten verbunden ist.

Die Nachteile der Extrapolation sind recht offensichtlich. Eine korrekte Berechnung bzw. ein korrektes Vorhersagen der Zukunft ist schlicht und ergreifend nicht immer möglich. So kann der Spieler zum Beispiel anfangen zu sprinten, oder aber sich hinlegen, wodurch die errechnete Position im schlechtesten Fall nicht einmal annähernd mit der korrekten übereinstimmt. Dies führt zu dem typischen „Porten“ von Spielern, das stellenweise in Multiplayer-Partien zu beobachten ist. Spieler teleportieren sich scheinbar über kleine Strecken, was zu massiven Problemen bei der Hit-Detection führt.

Interpolation (Erweiterung)
Bei der Technik der Interpolation speichert der Client jeden erhaltenen Spielstatus zwischen und stellt ihn mit einer kleinen, aber kontinuierlichen (und somit nicht bemerkbaren) Verzögerung dar. Wenn ein Paket beim Client ankommt, greift dieser auf den letzten bekannten Status des Objekts, also zum Beispiel die Position, zu und führt alle Änderungen von Werten über ein bestimmtes Zeitfenster kontinuierlich aus. Bewegt sich also ein Spieler, so würde der Client die Bewegung zwischen den zwei vorhandenen Positionen möglichst sanft und somit ohne merkliche Verzögerung darstellen. Dieses Zeitfenster hat idealerweise die Länge zwischen zwei eintreffenden Paketen, was jedoch aufgrund von möglicher zusätzlicher Verzögerung oder Verlust von Paketen nur selten der Fall ist.

Interpolation stellt also sicher, dass sich Spieler zwischen verschiedenen Positionen korrekt und scheinbar flüssig bewegen und ist besonders bei ähnlichen Paket-Travel-Zeiten und geringem Verlust äußerst effektiv, da genau. Falls jedoch der zur Verfügung stehende Speicher aufgrund falscher oder fehlender Pakete überläuft, muss der Client entweder das Spiel „anhalten“ oder aber auf Extrapolation zurückfallen. Hinzu kommt, dass alle Geschehnisse mit zusätzlicher Verzögerung dargestellt werden (, was jedoch letztendlich zu keinem Problem führt).

Zusätzlich zur Anwendung der oben genannten Techniken, kann der Client oft minimale Änderungen am Status vornehmen. Während wichtige Werte wie zum Beispiel das Leben der Spieler oder aber der Punktestand ausschließlich vom Server verwaltet werden, kann sich der Spieler zum Beispiel bereits bewegen, bevor eine Antwort des Servers auf den Befehl angekommen ist, da dieser im Normalfall akzeptiert wird. Dadurch kommt es zwar zu minimalen Abweichungen zwischen dem angezeigten und dem, was gesendet wird, diese werden jedoch entweder vom Server entsprechend getilgt oder aber sind so minimal, dass sie nicht auffallen. Stellenweise kann es sogar passieren, dass der Server offensichtlich falsche Positionen nicht korrigiert, weil die Korrektur mehr Zeit in Anspruch nehmen würde, als das Einspeisen des folgenden Status. Dies ist jedoch eher der Ausnahmefall. Zu Problemen kommt es, wenn die Latenz zwischen gesendeten Paketen sehr hoch ist oder aber Pakete ausfallen und neu gesendet werden müssen. In diesem Fall muss der Server zum Schutz von Cheatern massiv Eingreifen, was zu deutlich sichtbaren Positionsveränderungen führt.

Die Serverseite
Anders als ein Client, kennt der Server den korrekten, fehlerfreien aktuellen Spielstatus, wodurch das Vorhersagen von Position eigentlich wegfällt. Vielmehr ist es seine Aufgabe möglichst korrekte Ergebnisse der von den Clients durchgeführten Berechnungen zu garantieren und entsprechend falsche Berechnungen zu korrigieren, um zum Beispiel Cheatern das Leben schwer zu machen.
Erhält der Server die Eingabe eines Clients, liegt der Zeitpunkt, zu dem der Nutzer diese Eingabe getätigt hat, offensichtlich bereits in der Vergangenheit. Somit ist die Sicherstellung von möglichsten korrekten Berechnungen der Clients wichtig, da es sonst zu massiven Problemen vor allem bei der Hit-Detection kommen kann.

Warum serverseitige Lag-Compensation?
Angenommen der Server würde das Problem vollkommen ignorieren, also keinerlei Maßnahmen durchführen, so wäre das Spiel selbst unter optimalen Bedingungen äußerst frustrierend. So müssten Spieler beispielsweise immer knapp vor andere Ziele schießen, weil sie die Verzögerung mit einberechnen müssten. Es käme zu katastrophaler Hit-Detection und die Bewegung der Spieler bestände quasi nur aus Teleportationen. Rechnet man nun noch übliche Probleme hinzu, wird das Spiel vollkommen unspielbar ohne Lag-Compensation.

 

 

 

 

 

 

Die Zeit wird zurückgeschraubt – Hit-Detection reloaded
Eine Möglichkeit mit der Latenz umzugehen ist das Zwischenspeichern von mehreren Spielstatus ähnlich wie bei der Interpolation. Erhält der Server nun ein Paket mit Eingaben, wie zum Beispiel dem Schießen auf einen Spieler, so errechnet der Server anhand der Latenz des Pakets und eventuell angewandter Interpolation auf der Clientseite den Zeitpunkt, an dem der Spieler eigentlich geschossen hat. Aus dem zwischengespeicherten Spielstatus wählt er nun den zur errechneten Zeit passenden Status und weiß so, ob der Vektor (die Richtung) des ausführten Schusses trifft oder eben nicht. Diese Technik hat ein recht hohes Speicheraufkommen, sodass immer nur eine begrenzte Anzahl an Spielstatus gespeichert werden kann. Im schlimmsten Fall hat der Server also keinen passenden Spielstatus mehr zu der errechneten Zeit vorliegen, was zu einem offensichtlichen Problem führt. In diesem Fall wird entweder der am nahesten am Zeitpunkt liegende Spielstatus zur Errechnung der Hit-Detection ausgewertet oder aber die Eingabe schlicht und ergreifend verworfen.

Diese Herangehensweise an das Problem ist eine sogenannte WYSIWYG (What you see is what you get)-Lösung, sodass der Spieler sich möglichst natürlich verhalten kann. Der Preis dafür ist eine Kumulation aller auftretenden Latenzeffekte, also Lag, wenn ein Spieler unter Beschuss steht. Zum Einen spielt die eigene Latenz, aber auch die des Schießenden eine Rolle, sodass selbst Spieler mit der besten Leitung massive Verzögerungen merken könne, wenn sie von einem Spieler mit einer schlechten Leitung beschossen werden. Im Normalfall sind diese Abweichungen so gering, dass sie nicht auffallen, unter bestimmten Bedingungen jedoch, ist dies anders.
Scheinbar falsche Hitboxen sind eines der möglichen auftretenden Probleme. So kann es dem Spieler mit einer guten Leitung passieren, dass er bereits in Deckung gegangen ist, der Client jedoch weiterhin Schaden vom Server zugeteilt bekommt, da der Server auf einen anderen Spielstatus zugreifen muss, als der eigentlich gesuchte. Dies liegt an der schlechten Leitung des Schießenden. Der eine Spieler hat also den Eindruck, als würde er sterben, obwohl er sich hinter einer Mauer befindet.

Interessant ist an dieser Stelle, dass Hitboxen bei korrekter Implementation eigentlich nie falsch sind, sondern das Problem im Normalfall durch schlecht optimierte Lag-Compensation hervorgerufen wird.

Die negativen Seiten dieser Technik treten stellenweise recht massiv bei den Konsolenversionen von Black Ops 1 auf, wie in diesem Video zu sehen.

 

 

 

 

 

 

 

Das “Zurückdrehen” der Zeit ist besonders für Spieler mit einer guten Leitung ein Problem, da sie von denjenigen mit einer schlechteren Anbindung negativ beeinflusst werden. Um diesem Problem wenigstens annähernd entgegenwirken zu können, werden Spieler mit einem zu hohen Ping stellenweise rausgeworfen oder aber Eingaben, die sehr weit zurückliegen und somit nicht mehr korrekt aufgelöst werden können, verworfen.

Extrapolation auf der Client-Seite hervorrufen
Ein weiterer Ansatz Lag zu minimieren ist das Nutzen von Extrapolation auf der Client-Seite durch einen Serverbefehl. Das hat ähnliche Effekte wie die Extrapolation bei den Clients, da der Server die Vorhersage des Clients vorhersagen muss, was offensichtlich zu noch mehr Problemen führt.

Typische auftretende Probleme sind auch hier scheinbar falsche Hitboxen. So kann es zum Beispiel passieren, dass der ein Spieler von einem anderen bereits als um die Ecke-sprintend gesehen wird, der sprintende Spieler jedoch vor der Ecke halt gemacht hat, jedoch trotzdem getroffen werden kann oder eben nicht.


Welcher Weg auch gewählt wird, eine vollständige Verhinderung von Latenz und der damit zusammenhängenden Probleme kann in schnellen Online-Spielen wie zum Beispiel Ego-Shootern nur schwer erreicht werden, da zusätzlich Sicherheitsmaßnahmen ergriffen werden müssen, um Cheater möglichst auszuschließen. Fakt ist jedoch, dass Lag-Compensation quasi in jedem Online-Spiel vorhanden ist, auch wenn es erst seit einiger Zeit von einem Großteil der Spieler wahrgenommen wird. Die Probleme von nicht vorhandener Lag-Compensation sind weiter oben nachzulesen.

Fakt ist auch, dass die Lag-Compensation spätestens seit Black Ops 1 in allen Call of Dutys zu wünschen übrig lässt. Woran das nun genau liegt, kann von der Seite der Spieler nur vermutet werden, da lediglich die Entwickler Zugriff auf den vollständigen Netzwerkcode haben.

Wir hoffen, dass euch der Mythos Lag-Compensation nun ein wenig klarer geworden ist.

Link: CallofDutySeries

Bitte Login benutzen, um Kommentare zu schreiben.