|
Was ist eine Hitbox?
Eine Hitbox beschreibt einen vordefinierten, virtuellen, für den Anwender üblicherweise nicht sichtbaren, Bereich um ein 3D-Modell in einer 3D-Engine (bzw. Game-Engine) welcher zur Berechnung von Kollisionen und/oder Trefferabfragen genutzt wird. Hitboxen dienen hierbei vorwiegend zur Vereinfachung von Berechnungen, da 3D-Modelle, insbesondere jene von Personen, aus einer Vielzahl von Polygonen bestehen. Je komplexer die Engine, desto ähnlicher wird die Hitbox dem entsprechenden 3D-Modell. 
?Vereinfachte 2-dimensionale Darstellung einer einfachen und einer komplexeren Hitbox mit Trefferzonen Auch wenn Hitboxen in modernen Engines wesentlich komplexer sind als ein einfacher Kasten, leitet sich das Wort ursprünglich von genau dieser Bedeutung ab. In den Anfängen der Spielegeschichte wurde in der Tat jedem 3D-Objekt ein einfacher Kasten umschrieben. Auch heute noch werden für schnelle Vorberechungen oder Testläufe in 2D- oder 3D-Konstruktionsprogrammen sogenannte Bounding Volumes verwendet, die im Grunde einfache Geometrische Formen (Kugel, Zylinder, Quader / Kreis, Rechteck) sind. Insbesondere bei Ego-Shootern führt dies allerdings zu Problemen: ein einfaches geometrisches Objekt führt bei der Trefferabfrage natürlich zu einem recht mangelhaften Ergebnis, da auch Treffer neben das eigentliche 3D-Modell des Gegners (also das optisch sichtbare Ziel) das Bounding Volume treffen und somit den Spieler/Gegner virtuell verletzen können. Bei Rennsimulationen sind nahezu rechteckige bzw. quaderförmige Varianten allerdings weniger problematisch, die Fahrzeuge selbst sind in ihrer Grundform meist ebenfalls sehr einfach gestrickt. Neben dem Nutzen für die Berechnung der physikalischen Abgrenzung eines Objektes eignen sich Hitboxen auch zur Bestimmung von verschiedenen Trefferzonen. Dies ist wiederum vorwiegend in Ego-Shootern wichtig, da ein schwieriger Kopftreffer (Headshot) üblicherweise zu einem größeren Energieabzug führt als ein einfacher anzubringender Treffer am Torso. Je genauer hierbei die Hitboxen (diese müssen wie erwähnt nicht zwangsläufig kubisch oder quaderförmig sein) das entsprechende Modell umschließen, desto realistischer lassen sich auch entsprechende Spiele gestalten - Anwendungsgebiete existieren ausreichend, etwa das Hinken im Falle eines Beintreffers. Auch wenn ein 3D-Modell durch mehrere verschiedene Kästen oder sonstige Formen umschrieben ist, spricht man dennoch von einer einzigen Hitbox pro 3D-Modell. Beispielsweise bietet Microsoft DirectX (die Erweiterung D3DX) u. A. die Funktionen D3DXComputeBoundingBox, D3DXComputeBoundingSphere, D3DXBoxBoundProbe für solche Zwecke.
Das Hitbox-System ist das am meisten verbreitete System zur Ermittlung von Treffern, einige wenige Spiele (z. B. Doom 3) nutzen aber ein absolut exaktes System (Per-Polygon Hit-Detection) - diese Systeme sind aber ungleich ressourcenlastiger und erlauben in Onlinespielen üblicherweise eine weitaus kleinere Spielerzahl.
(quelle:http://de.wikipedia.org/wiki/Hitbox) Hitboxen in Counterstrike Source?! 
Links(cl_interpolate 0 cl_lagcompensation 0 ) Rechts(cl_interpolate 1 cl_lagcompensation 1 ) Video
Als erstes schaut euch mein Video an wo die Einstellungen getestet werden.
Die Beweise Allgemeine Funktionsweise
Der Counter-Strike: Source Netcode basiert auf einem Server/Client-System. Alles was du tust, wird zum Server geschickt und dort verarbeitet. Beachte aber, dass du den Schritt nach vorne nicht auf dem Client, also deinem Computer tust, sondern das diese Information zum Server geschickt wird. Dort wird diese Information verarbeitet und wird dann wieder zu dir geschickt. Erst dann bewegst du dich einen Schritt nach vorne! Natürlich gibt es auch einige Tricks im Netcode, dass dies nicht so sehr auffällt. Wichtig für dich ist nur zu wissen, dass alle Aktionen auf dem Server ausgeführt werden und nicht auf deinem Computer. Alle Bilder auf deinem Computer sind lediglich ein Abbild vom dem was auf dem Server passiert.
Tickrate
Der Standardwert bei Counter-Strike: Source ist Tickrate 33. Dieser Begriff ist am besten zu erklären, dass der Server mit 33 fps arbeitet. Jedoch gibt es beim Server keine grafische Abbildung, sondern die ganzen Positionsdaten, die Aktionen der Spieler auf der Map werden 33 mal die Sekunde aktualisiert. Umso höher die Tickrate ist, umso stärker wird die CPU belastet, da mehr in der Sekunde aktualisiert wird. Jedoch ist dadurch die Berechnung viel genauer. ?  Pakete und delta compression
Informationen die von dir zum Server und vom Server zu dir geschickt werden, werden in Paketen gesammelt. Dies passiert um Bandbreite zu sparen, so können auch mehrere Aktionen von dir ausgeführt werden, aber die Daten kommen trotzdem nur in einem Paket an. Dabei werden nicht alle Daten komplett neu gesendet, sondern mit der Delta Kompression werden jeweils nur die Veränderungen geschickt, um wiederrum Bandbreite zu sparen.
cl_updaterate
cl_updaterate gibt an, wieviele Pakete du vom Server innerhalb 1 Sekunde anforderst. Der Standardwert von cl_updaterate ist 20. Du forderst also jede Sekunde 20 Pakete vom Server an. 1000 Millisekunden (1 Sekunde) : 20 Pakete = 50 Millisekunden Dir wird also alle 50 Millisekunden ein Paket geschickt. Alles was in diesen 50 Millisekunden passiert, wird in einem Paket zusammengefasst. Umso höher also die cl_updaterate ist, umso mehr Pakete werden dir gesendet und umso genauer ist das Spielgefühl. Jedoch hat die Sache einen Hacken. Dieser dürfte den meisten inzwischen bekannt sein, damit die mehr Pakete pro Sekunde angefordern kannst, muss der Server natürlich auch mit der entsprechenden Tickrate laufen. Wenn du zum Beispiel 100 Pakete anforderst auf einen Tickrate 33 Server, können dir maximal 33 Pakete geschickt werden, weil vom Server einfach nicht mehr berechnet wird. Oder ganz simpel. Du kannst nicht 7 kippen aus einer Schachtel nehmen, wenn nur 3 drin sind.
cl_cmdrate
Dieser Befehl gibt an, wieviele Pakete pro Sekunde von dir zum Server geschickt werden. Dieser Wert wird genauso berechnet wie cl_updaterate. 1000 Millisekunden (1 Sekunde) : 30 Pakete = ~ 33 Millisekunden Der Standardwert cl_cmdrate 30 bedeutet, dass alle 33 Millisekunden ein Paket von dir zum Server geschickt wird. Jedoch tritt hier ein ähnliches Problem wie bei cl_updaterate bei einer zu geringen Tickrate ein. Damit du 30 Pakete die Sekunde schicken kannst muss dein Computer mit konstanten 30 fps laufen, da wie bei der Tickrate pro Bild deine Informationen aktualisiert werden. rate Rate gibt an wieviel Bandbreite du cl_updaterate und cl_cmdrate zur Verfügung stellen möchtest.
10000 (rate) : 1024 ( 1 Kilobyte ) = ~ 10 Kilobyte
Ein normaler DSL 1000 Anschluss kann bis zu 128 Kilobyte pro Sekunde erreichen, rein theoretisch könnte also ein DSL 1000 Anschluss ein Wert von maximal 131072 erreichen. Jedoch werden niemals soviele Daten verschickt. Was der besste Wert genau ist, ist schwer zu beantworten, da du immer unterschiedliche viel Bandbreite benutzt. Meiner Erfahrung nach ist ein Wert von rate 25000, was ungefähr 24 KB/sec vollkommen ausreichend und wird im Spiel nie ausgereizt.
Das Zusammenspiel der rates
Zusammenfassend möchte ich betonen, dass der Netcode wirklich nur gut funktioniert, wenn die Netsettings aller Spieler den selben Werten entsprechen und auch von allen erreicht werden können. Die meisten Internetanschlüsse dürften wohl den Wert von cl_updaterate 100 schaffen. Jedoch sind die meisten Computer immernoch zu schwach, um die cl_cmdrate 100, also die konstanten 100 fps, zu erreichen. Solange die meisten Spieler diesen Wert nicht erreichen, macht eigentlich auch cl_updaterate 100 keinen Sinn. Denn wenn zum Server nur alle 20 ms (50 fps oder auch cl_cmdrate 50) ein Paket geschickt wird, aber alle 10 ms ein Paket angefordert wird, erzeugt man eigentlich nur mehr Traffic, als die erhoffte Verbesserung. Dabei kommt es gerade bei nicht erreichbaren Settings zu einem schlechten Spielgefühl, da die Werte immer wieder schwanken und man manchmal das Gefühl hat, man trifft alles und beim nächsten mal der Gegner einfach nicht umfallen will. Mit konstanten 100 fps wie bei 1.6, wird auch der Netcode von Counter-Strike: Source mit unseren jetztigen Settings perfekt funktionieren.
cl_interpolate, cl_interp, lag compensation
Wie du schon erfahren hast, werden alle Informationen vom Server zu dir in Paketen geschickt. Da wie im ersten Abschnitt beschrieben, du dich nicht auf deinem Computer bewegst, sondern die Informationen erst von dir zum Server geschickt werden müssen und dann wieder zurück, hinkst du immer den Paketen vom Server hinterher. cl_interpolation 1 setzt dich in der Zeit zurück, damit neue Pakete ankommen können und du nicht auf diese erst warten musst und dadurch Ruckler vermieden werden. Das gesamte Spiel wird sozusagen gebuffert und vorhande Informationen werden absichtlich erst später zu euch geschickt. Damit die Interpolation korrekt funktioniert, muss cl_interp an den Wert von cl_updaterate eingstellt werden.
1000 Millisekunden (1 Sekunde) : 20 Pakete = 50 Millisekunden
Der Standardwert von cl_updaterate ist 20. Das heißt, alle 50 ms erreicht dich ein neues Paket. Damit die Bewegungen, Animationen zwischen zwei Paketen berechnet werden kann, müssen wir zum ersten Paket zurück. Wieviele Millisekunden die Interpolation zurück geht, steuert also cl_interp. Ein Wert von cl_interp 0.05 bringt dich die besagten 50 ms zurück zum ersten Paket. Valve setzt hier auf Nummer Sicher und setzt dich sogar zwei Pakete zurück. Dies entspricht den Standardwert von cl_interp 0.1, also 100 ms. So kann sogar ein Paket verloren gehen, ohne das die Interpolation aussetzt.
Snapshot steht gleich bedeutet für ein Paket
Also ist alles was du auf deinen Computer siehst 100 ms (bei cl_interp 0.1) vorraus gegenüber dem Server. Damit du nicht auch vorraus aimen musst, gibt es die serverseitige lag compensation (sv_unlag 1), die diesen Fehler behebt. Sagen wir mal, du schiesst auf ein Gegner zur client time 10.15 (command execution time). Die Feuerinformation wird mit dem nächsten Paket verschickt und während die Information zum Server gelangt (Ping), läuft der Gegner natürlich weiter. Wenn dann das Paket zur server time 10.20 (current server time) ankommt, würde der Schuss nicht registriert werden, da sich der Gegner schon weiter bewegt hat. Und dies obwohl du genau auf dem Models drauf warst. Genau dieser Fehler wird eben von der serverseitigen lag compensation behoben. Das lag compensation System speichert für ungefähr 1 Sekunde (dies kann mit sv_maxunlag geändert werden) alle letzten Positionen der Spieler. Wenn ein Befehl ausgeführt wird, wie der Schuss zum Beispiel, errechnet der Server wann der Befehl ausgeführt wurde. Command Execution Time = Current Server Time - Client Latency (Ping) - Client View Interpolation (cl_interp Wert) Wenn das Paket beim Server ankommt, werden alle Spieler zu der Position zurück gesetzt, wo sie zur command execution time (zum Augenblick wo du abdrückt hast) waren. Wenn der Befehl korrekt ausgeführt wurde, werden die Spieler wieder zur aktuellen Position verschoben. Du kannst dir mit sv_showimpacts 1 anzeigen lassen, wo sich die Hitboxen befinden.

Die blaue Hitbox ist die auf dem Server und die rote Hitbox ist die auf deinen Computer. Logischerweise hinkt die blaue Hitbox immer der roten hinterher. Umso besser die Verbindung zum Server ist, umso näher sind die beiden Boxen zusammen. Genau dies versuchst du zu verbessern mit den Netsettings. Das Model läuft inübrigen deshalb vor den Hitboxen, weil die Interpolation die 100 Milliesekunden buffert. Vergesse in diesen Moment nicht, dass der Server den cl_interp Wert automatisch abzieht. Würdest du auf die Hitbox anstatt auf den Model schiessen, würde der Treffer nicht registriert werden.
Die Netgraph
 fps: Zeigt dir an, wieviele fps (Bilder pro Sekunde) du hast. ping: Zeigt dir deinen durchschnittlichen Ping an. in/out: Zeigt dir, die Größe deines letzten erhaltenen und gesendeten Paketes, in Bytes an. in/out: Zeigt dir deine verbrauchte Bandbreite an. in/out: Zeigt dir an, wieviele Pakete du die Sekunde erhälst (Tickrate des Server) und verschickst (ist von deinen fps abhängig). loss: Zeigt dir an, ob Pakete verloren gegangen sind. choke: Zeigt dir an, dass du mehr Daten angeforderst hast (zu geringe Tickrate <100) oder verschicken möchtest (zu wenige fps <100), als vorhanden sind.
Besucht uns im Internet http://www.world-of-endless.de cya?Murdy?
|