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 sich dahinter verbirgt. Deshalb möchten wir diese Funktion des CS:GO Netcodes unkompliziert erklären und aufzeigen, wieso man die Interpolation überhaupt braucht und wie du sie ändern kannst.

Was ist Interpolation?

Als Spieler (“Client”) bekommst du 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 Informationen 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 kannst du über Netsettings steuern. Grundsätzlich gilt natürlich: Umso geringer die Interpolationszeit, desto besser. Denn unter Umständen bekommst du dann die vom Server gesendeten Informationen schneller dargestellt als der Gegner.

Aber: In der Praxis merkst du diesen Unterschied nicht, da er einfach so verschwindend gering ist. Je niedriger die Interpolationszeit eingestellt wird, desto höher sind außerdem die Anforderungen an die eigene Verbindung und den Server. Es nützt also nichts, die Interpolationszeit auf den niedrigsten Wert zu setzen, wenn du dadurch Verbindungsprobleme wie z.B. “Loss” bekommst. Lieber nimmst du ein paar Millisekunden mehr in Kauf, bekommst dafür aber ein reibungsloses Spielerlebnis. Du hast mehr davon deine Reaktionszeit und dein Aiming zu trainieren, als dich an der Interpolationszeit aufzuhalten. Zumal die Interpolationszeit auch von der Lag Compensation berücksichtigt wird. Du bekommst die Zeit also wieder gutgeschrieben.

Interpolation einstellen & Warum immer cl_interp 0?

Du kannst selbst Einfluss auf die Interpolationszeit nehmen. Und zwar indem du deine Netsettings änderst.

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

cl_interp gibt also die Interpolationszeit an. Eins direkt vorweg: Du solltest cl_interp immer auf 0 eingestellt lassen, denn dann berechnet das Spiel anhand der Formel automatisch den besten Wert. Möchtest du die Interpolationszeit beeinflussen, dann solltest du das mit den beiden Befehlen cl_interp_ratio und cl_updaterate machen.

Um jetzt zu verstehen, warum die Interpolation durch diese Formel den optimalen Wert erhält, musst du 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. Das bedeutet 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.

Als Standard ist aber “cl_interp_ratio 2” eingestellt. Aber warum eigentlich? Wieso solltest du 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: Du 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. Vor allem 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 in CS:GO

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

Hinweis: cl_updaterate 128 funktioniert nur auf Servern mit einer Tickrate von 128.

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 wählen 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 unserem Artikel über die Grundlagen, inklusive einer FAQ.