Interpolation

Beim Thema Netsettings fällt immer wieder der Begriff „Interpolation“ – oder auch die Begriffe „lerp“ und „cl_interp“ – doch nur die wenigsten wissen was diese Funktion des CS:GO Netcodes eigentlich macht. Das möchten wir mit diesem Artikel ändern und euch erklären, was genau hinter dem Begriff steckt, wieso man die Interpolation überhaupt braucht und wie man sie ändern kann.

Interpolation in CS:GO

cs go interpolation lerp cl_interp

Was ist Interpolation?

Als Spieler („Client“) bekommt man je nach eingestellten Netsettings eine bestimmte Anzahl an Datenpaketen pro Sekunde vom Server zugeschickt. Anhand der darin enthaltenen Informationen wird das Spielgeschehen auf dem Bildschirm dargestellt. Würden aber nur diese Informationen verwendet werden, dann würde das zu stotternden und unspielbaren Verhältnissen führen. Deshalb interpoliert das Spiel – es berechnet Zwischenpakete, die darstellen was zwischen zwei erhaltenen Paketen passiert ist. Mit diesen Zusatzinformationen kann ein flüssiger Spielablauf gewährleistet werden.

Und das funktioniert folgendermaßen: Der Client bekommt das Datenpaket mit den aktuellen Informationen vom Server. Diese werden aber nicht direkt dargestellt, denn um interpolieren zu können, braucht das Spiel immer zwei Pakete – zwei Eckpunkte sozusagen. Es wird also auf das nächste Paket gewartet, bis die Informationen auf dem Bildschirm dargestellt werden. Das Spiel kann dann mit den zwei Paketen als Eckpunkte und dem interpolierten Zeitraum dazwischen eine präzise und vor allem flüssige Darstellung garantieren.

Auf der anderen Seite bedeutet das aber, dass das Spiel beim Client immer “in der Vergangenheit” stattfindet. Tatsächlich handelt es sich dabei aber nur um wenige Millisekunden, doch dazu später mehr.

Das folgende Bild gibt einen kleinen Einblick in die Funktionsweise der Interpolation, allerdings stammen die für das Beispiel verwendeten Werte aus einer alten Version der Source Engine und gelten nicht für CS:GO – das Prinzip ist aber das gleiche.

Die Interpolationszeit („lerp“)

Interpolation ist also eine künstliche Verzögerung. Und jetzt kommt die Interpolationszeit (oder auch “lerp” genannt) ins Spiel. Das ist die Zeit, die vergeht bis die erhaltenen Informationen tatsächlich dargestellt werden. Und diese kann man über Netsettings steuern. Grundsätzlich gilt natürlich: Umso geringer die Interpolationszeit, desto besser. Denn unter Umständen bekommt man dann die vom Server gesendeten Informationen schneller dargestellt als der Gegner.

Aber: In der Praxis merkt man diesen Unterschied nicht, da er einfach so verschwindend gering ist. Je niedriger die Interpolationszeit eingestellt wird, desto höher sind die Anforderungen an die eigene Verbindung und den Server. Es nützt also nichts, die Interpolationszeit auf den niedrigsten Wert zu setzen, wenn man dadurch Verbindungsprobleme wie z.B. “Loss” bekommt. Lieber nimmt man ein paar Millisekunden mehr in Kauf, bekommt dafür aber ein reibungsloses Spielerlebnis. Man hat mehr davon seine Reaktionszeit und sein Aiming zu trainieren, als sich an der Interpolationszeit aufzuhalten. Zumal die Interpolationszeit auch von der Lag Compensation berücksichtigt wird, man bekommt die Zeit also wieder gutgeschrieben – wie genau Lag Compensation funktioniert erkläre ich in einem extra Artikel.

Interpolation einstellen & Warum immer cl_interp 0?

Wie weiter oben schon geschrieben, kann man selbst Einfluss auf die Interpolationszeit nehmen. Und zwar indem man seine Netsettings ändert.

Die Interpolation wird mit folgender Formel berechnet:
cl_interp_ratio / cl_updaterate = cl_interp

cl_interp gibt also die Interpolationszeit an. Eins direkt vorweg: Man sollte bei den Netsettings cl_interp immer auf 0 eingestellt lassen, denn dann berechnet das Spiel anhand der Formel automatisch den besten Wert. Möchte man die Interpolationszeit beeinflussen, dann sollte man das mit den beiden Einstellungen cl_interp_ratio und cl_updaterate machen.

Um jetzt zu verstehen warum die Interpolation durch diese Formel den optimalen Wert erhält, muss man wissen was cl_interp_ratio und cl_updaterate machen. Fangen wir mit cl_updaterate an: Diese Einstellung gibt an, wieviele Pakete pro Sekunde der Client vom Server anfordert. Wir gehen jetzt mal von den Standard-Netsettings aus, dann wäre “cl_updaterate 64” eingestellt. D.h. pro Sekunde werden 64 Datenpakete angefordert.

Eine kurze Rechnung: 1/64=0,015625s

Alle 0,015625s (oder auch 15,625ms) kommt also ein neues Paket an, vorausgesetzt es gibt keine Verbindungsprobleme. Und jetzt kommt cl_interp_ratio ins Spiel. Wäre “cl_interp_ratio 1” eingestellt, dann wären genau diese 15,625ms auch die Interpolationszeit.

Standardgemäß ist aber “cl_interp_ratio 2” eingestellt. Aber warum eigentlich? Wieso sollte man den Wert absichtlich höher stellen? Ganz einfach: Wie oben beschrieben ist eine niedrigere Interpolation anfälliger für Verbindungsprobleme. Führen wir die Rechnung von eben mit “cl_interp_ratio 2” durch, dann kommen wir auf 2/64=0,03125s, also 31,25ms.

Im Klartext heißt das: Man bekommt bei dieser Einstellung immer noch alle 15,625ms ein neues Datenpaket, aber das Spiel wartet nicht ein, sondern zwei weitere Pakete ab, bis die Informationen auf dem Bildschirm dargestellt werden. Während der Interpolationszeit von 31,25ms stehen also drei Pakete für die Berechnung zur Verfügung. Sollte mal eins verloren gehen, wird das nicht auffallen, es steht ja noch eins zur Verfügung. Dass ein Datenpaket auf dem Weg vom Server zum Client verloren geht, kommt durchaus hin und wieder vor. V.a. bei schlechten Bedingungen wie einem stark belasteten Server oder einer schlechten Internetverbindung.

Steht mal kein zweites Paket zur Interpolation zur Verfügung, dann fängt das Spiel an zu extrapolieren – es schätzt. Das tut es aber nur 250ms lang, darüber kommt es dann zu ernsthaften Lags und Aussetzern.

Verschiedene Interpolationszeiten

Je nach Netsettings ergeben sich also unterschiedliche Interpolationszeiten. Hier ein kurzer Überblick über die Werte bei den am häufigsten verwendeten Einstellungen. Wer sich mit Netsettings nicht auskennt, sollte aber nicht einfach seine Werte ändern, das kann unter Umständen zu Problemen führen!

cl_updaterate 64 & cl_interp_ratio 2: 31,25ms
cl_updaterate 64 & cl_interp_ratio 1: 15,625ms
cl_updaterate 128 & cl_interp_ratio 2: 15,625ms
cl_updaterate 128 & cl_interp_ratio 1: 7,8125ms

Auch hier sieht man noch einmal: Das alles spielt sich in einem Zeitraum von wenigen Millisekunden ab und man wird den Unterschied beim Spielen nicht merken. Es ist in den meisten Fällen besser die sichere Variante zu nehmen und ein paar Millisekunden mehr in Kauf zu nehmen, als dass das Spielgeschehen durch verloren gegangene Pakete gestört wird. Zumal der “Nachteil” einer längeren Interpolation sowieso durch die Lag Compensation relativiert wird.

Mehr Informationen zum Thema Netsettings gibt es in diesen Artikeln:
CS:GO Netsettings Grundlagen
CS:GO Netsettings FAQ

Bei offenen Fragen nutzt einfach unser Forum: Netsettings, Scripts & Configs