PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perfekter Netcode


=Floi=
2014-05-05, 08:04:15
Hallo!
Gibt es gute beispiele und anleitungen für einen perfekten netcode?
Was zeichnet ihn aus und wo liegen die stolpersteine?

Ist ein schlechter netcode früher nicht so aufgefallen, oder wurde da mehr liebe reingesteckt?

Ectoplasma
2014-05-05, 10:46:28
Zeig mir mal irgendein Stück - Software, bei der jemand oben ein Schild mit der Bezeichnung "perfekt" rangepappt hat. Ansosnten schlage ich vor, das Netz mal nach "DirectPlay", "SDL_Net", "RakNet", oder was auch immer, abzusuchen. Gibt ja genug Beispiele. In Duke Nukem 3D, sollte man auch den NetCode finden, falls man mal was "altes" begutachten möchte.

Ganon
2014-05-05, 10:48:10
Das hier ist ganz gut:
http://gafferongames.com/networking-for-game-programmers/

Abseits davon zählt halt auch der gesunde Menschenverstand. Aber oft reicht da dann die Zeit nicht für.

"Perfekter" Netcode (sofern es dieser denn überhaupt ist), ist halt, wenn auf jeden Störfall immer im Sinne des Spielers entschieden wird. Aber das wird schwierig und ist von Spiel zu Spiel verschieden.

Nehmen wir mal den Fall eines Verbindungsabbruches eines der Teilnehmer. Jetzt gibt es mehrere, jeweils eigentlich alles gute Varianten:

- der betroffene Spieler wird aus dem Spiel entfernt, alle Anderen spielen weiter
- der betroffene Spieler wird durch eine CPU ersetzt, alle Anderen spielen weiter
- alle anderen Spieler warten, bis der Spieler sich wieder einloggt
- alle anderen Spieler können aus den ersten 3 genannten Punkten abstimmen

Je nach Spiel und auch je nach Art das Spiels (Multiplayer über Internet oder LAN-Party) ist die ein oder andere Variante besser. Auf einer LAN-Party willst du eine Session kaum ohne den anderen Spieler weiterspielen. Im Internet ggf. schon, weil es dir egal ist, da du ggf. eh keinen kennst. Jedoch deswegen ständig alle Spieler immer anfragen ist auch unter umständen doof.

Und jetzt noch solche Konstrukte aufstellen für Desynchronisation, schlechte Latenz, etc.

Also wie du es nimmst, "perfekt" wird es nie.

Und Spiele damals waren halt deutlich einfacher gestrickt. Dort musste oft nur die aktuelle Spielerposition/Aktion übertragen werden. Heute musst du ja ganze Physik-Zustände synchronisieren.

EPIC_FAIL
2014-05-05, 16:59:58
Hallo!
Gibt es gute beispiele und anleitungen für einen perfekten netcode?
Was zeichnet ihn aus und wo liegen die stolpersteine?

Ist ein schlechter netcode früher nicht so aufgefallen, oder wurde da mehr liebe reingesteckt?

Es gibt da einige hilfreiche Originaldokumente von der Transition von quasi Terminalanwendung-ähnlichen Netcodes (Ur-Quake) und Netcodes mit gewissen Predictions auf Clientseite (Quake World). (--> http://fabiensanglard.net/quakeSource/johnc-log.aug.htm)

Der Link von Ganon ist auch ganz hilfreich. "Perfekt" zu definieren ist schwierig. Man könnte darunter verstehen, dass ein durchschnittlicher Spieler eine Spielsession im Multiplayer nicht von einer im Singleplayer unterscheiden kann. Die Umstände der Multiplayersession können aber in der Realität extrem unterschiedlich sein, zudem muss nicht nur die Latenz zwischen Client A und Server, sondern zwischen allen Clients und dem Server miteinbezogen werden.

Sinnvoller und Realistischer ist der Wunsch nach "stabilen" und "fairen" Netcodes. Stabil im Sinne davon, dass eine Synchronisation zwischen den Spielern stets möglich sein sollte (Mit Ausnahme von Verbindungsabbrüchen, extrem langen Antwortzeiten >2s usw...). Fair ist schwierig zu definieren. Es gibt ja die grobe Unterscheidung zwischen Client-Side-Hit-Detection und Server-Side-HD. Reine CSHD ist immer für jeden individuellen Spieler "fair", da eine Aktion des Spieler unabhängig von den anderen Spielern (oder Server) durchgeführt wird. Reine SSHD ist fair bezüglich des aktuellen Zustands auf dem Server, der quasi eine Schnittmenge der Zustände von allen Clients (zu einem gewissen Zeitpunkt +- delta(T) ) bildet. Darüber werden auch regelmäßig Glaubenkriege geführt, und viele denken, dass das "Hinter-der-Ecke-sterben" ein Sympton der CSHD ist, und deswegen das ganze Käse wäre. Kann aber ebenso bei SSHD passieren. Und die Hit-Detection ist nur ein Teil des Netcodes.

Auf jeden Fall sind die Ansprüche an die Netcodes gestiegen, weil einfach "mehr" gemacht werden muss. Teils müssen auch mehr Spieler bedient werden (teils >2000 Clients). Die Leute sind auch ein wenig verwöhnter, früher hatte halt jeder nen Scheissping, und man war Lag gewohnt. Da hat man das "schlechte" Spielerlebnis eben auf die Leitung geschoben und nicht auf das Spiel. Bei heutigen Leitungen mit <30ms Pings auf Server im gleichen Kontinent sowie Bandbreiten jenseits der 100Mbit ist das natürlich schwer. Da ist es von Seiten der Spieler natürlich einfacher auf die Devs zu prügeln, insbesondere wenn mangelnder Skill die eigentlich Ursache für den "ungerechten Death" war, und nicht irgendwas technisches im Hintergrund :freak:

pest
2014-05-14, 14:28:39
Die Leute sind auch ein wenig verwöhnter, früher hatte halt jeder nen Scheissping, und man war Lag gewohnt.

BS - du hast nie CS gespielt

wenn ich das im Vergleich zu heute betrachte :( - prey and spray

EPIC_FAIL
2014-05-14, 18:38:27
BS - du hast nie CS gespielt



Öh schon.

Standardping von 80-120 mit 56k Modems war nicht so der Hit. ISDN mit rund 60-90 war schon OK, ADSL mit (starkem) Interleaving hatte "damals" auch gerne mal 80-100. Deswegen wollten ja früher gerne die Progamer in DE auf QDSL, also einem Provider für SDSL Dienste, wechseln, da dort der Ping schon wesentlich besser ist. Heute gibts eigentlich für jeden Anschluss < 40ms für reines ICMP zu einem "nahen" Knoten.

Spiel doch mal bitte auf einem gut konfiguriertem CS-Server mit nem alten Modem und dann mit einem aktuellen Breitbandanschluss. Erst der Direktvergleich macht es deutlich, wie "schlecht" es damals war. Vorteil von CS war einfach, dass mal den Server gut anpassen konnte in Sachen Tickrate und ähnlichem. Das geht heute bei vielen Spielen nicht mehr so einfach. Da kommt halt nochmal ne menge "interner" Latenz dazu.

Spray and Pray hat auch erstmal nix mit dem Netcode zu tun. Wenn die Spielmechanik das Spammen belohnt wirds halt gemacht. Da isses egal obs im MP oder im SP abläuft.

pest
2014-05-14, 21:22:01
habe nie über Modem/ISDN aber ESL gespielt. Es war einfach ne andere Zeit...Aiming nach Gehör...Fadenkreuz auf den Monitor gemalt...da kam es auf jeden Pixel an...ist heute Vergangenheit

=Floi=
2014-09-02, 19:38:10
finde ich nicht. gerade CS:Go erlebt ein revival.

http://www.heise.de/developer/artikel/Verzoegerungen-in-Online-Spielen-durch-Client-Side-Prediction-kompensieren-2301773.html
netter artikel.

RattuS
2014-09-02, 21:55:46
Eigentlich hat sich in den letzten 10 Jahren doch gar nicht so viel getan, was Interpolation angeht. Ich denke, dass die HL-Engine damals schon eine recht brauchbare Implementierung bot. Das wurde noch verfeinert und ist zum heutigen Standard avanciert. Effektiv handelt man ja auch keine Szenarien mit 100+ ms mehr aus ohne ein Standbild zu präsentieren.

Monger
2014-09-02, 22:15:49
Eigentlich hat sich in den letzten 10 Jahren doch gar nicht so viel getan, was Interpolation angeht. Ich denke, dass die HL-Engine damals schon eine recht brauchbare Implementierung bot.
Ich glaub, da ist doch schon ne ganze Menge passiert. Die HL Engine hat Pfade immer noch relativ linear interpoliert. Moderne Engines blenden ja mehr oder minder eine KI über das Spielerverhalten, um Richtungswechsel, Veränderungen des Blickwinkels etc. vorherzusagen. Das fühlt sich teils auch über 100ms erstaunlich flüssig an.