Special: Counter-Strike (Shooter)

von Joerg



Entwickler:
Publisher: Vivendi Universal
Release:
kein Termin
Spielinfo Bilder  
Objekt Interpolation (Entity Interpolation)

In den Standardeinstellungen erhält der Client ca. 20 Momentaufnahmen pro Sekunde. Wenn die Objekte (Entitys) nur an dieser Stelle dargestellt werden würden, an denen sie zuvor vom Server festgestellt wurden, würden die Animationen abgehackt und rappelig aussehen. Verlorene Pakete würden des Weiteren merkbare Störimpulse hervorrufen. Der Trick um dieses Problem zu beheben ist es, beim rendern der Positionen und Animationen in der Zeit zurückzugehen. So können die Positionen zwischen zwei Momentaufnahmen flüssig dargestellt werden. Diese Technik nennt sich "client side entity Interpolation" und wird mit der Variablen "cl_interpolate 1" festgelegt. Mit 20 Momentaufnahmen pro Sekunde kommt also ca. alle 50 Milisekunden ein neues Update. Wenn die Client Renderzeit also 50 Millisekunden nach hinten gesetzt wird, können Objekte immer zwischen der letzten Momentaufnahme und der Momentaufnahme davor interpoliert werden. Die Source Engine bearbeitet die Objekt Interpolation mit einer 100 Millisekunden Verzögerung ("cl_interp 0.1"). Auf diesem Wege sind immer 2 gültige Momentaufnahmen vorhanden, auch wenn mal eine Momentaufnahme verloren geht. In der folgenden Grafik haben wir diesen Verlauf dargestellt.



Die letzte Momentaufnahme wurde bei tick 344 bzw. 10.30 Sekunden empfangen. Die Client Zeit erhöht sich basierend auf dieser Momentaufnahme und der Client Framerate. Wenn ein neuer Video Frame gerendert wird, ist die Render-Zeit die derzeitige Client Zeit 10.32, minus der Verzögerung der Sicht Interpolation von 0.1 Sekunden. Das wären in unserem Beispiel 10.22 und alle Objekte und Animationen nutzen den korrekten Bruchteil zwischen den Momentaufnahmen 340 und 342.

Da wir eine Interpolationsverzögerung von 100 ms haben, würde die Interpolation auch arbeiten wenn die Momentaufnahme 342 durch Datenverlust fehlt. Dann könnten 340 und 344 für die Interpolation genutzt werden. Wenn mehr als eine Momentaufnahme pro Paket fehlt, kann die Interpolation nicht mehr perfekt arbeiten da ihr die Momentaufnahmen aus dem Speicher (history buffer) fehlen. In diesem Falle benutzt der Renderer die Extrapolation (cl_extrapolate 1) und versucht in einer simplen, linearen Vorausberechnung, basierend auf den Daten aus dem history buffer eine Darstellung. Die Extrapolation wird nur für einen Datenverlust von 0.25 Sekunden erstellt (cl_extrapolate_ammount). Nach dieser Zeit wären die Vorhersage Fehler zu groß.

Die Objekt-Interpolation verursacht einen konstanten Sicht-Lag von 100 ms. Selbst wenn ihr auf einem so genannten "Listenserver" (Server und Client auf dem gleichen PC) spielt. Wenn ihr also die Variable "sv_showhitboxes" benutzt, werden die Spieler Hitboxen in der Server-Zeit dargestellt, das bedeutet, sie sind dem gerenderten Spieler Modell um 100 Ms voraus. Das bedeutet aber nicht, dass ihr euer Aiming verändern müsst um andere Spieler zu treffen, da die serverseitige Lag-Kompensation die Client Objekt Interpolation kennt und diesen Fehler korrigiert. Wenn ihr die Interpolation auf einem listen Server mit der Variablen "cl_interpolate 0" abschaltet, seht ihr die Hitboxen genau auf den Spieler-Modellen aber Animationen und sich bewegende Objekte werden dadurch sehr unansehnlich.


 
Übersicht
Basis Netzwerk
Eingabe Voraussage
Lag Kompensation
Net Graph

                    

Kommentare

Es gibt noch keine Kommentare zu diesem Thema!
schrieb am