Netzwerk-Theorie in Computerspielen
-
Hallo,
ich beschäftige mich gerade mit einem für mich recht unbekanntem Terrain, der Netzwerkprogrammierung. Ich frage mich konkret, wie die Netzwerkumsetzung bei Spielen im Allgemeinen so funktioniert. Nehmen wir mal ein Strategiespiel als Exempel. Wie wird hier die Datensynchronisierung vollzogen? Es kann doch nicht bei jedem Frame für jede Einheit auf der Karte ein Paket versendet werden. Wie läuft das eigentlich überhaupt, wird die Spiellogik dann einzig auf dem Server berechnet und die Clients übernehmen nur kleinere Aufgaben wie Dead Reckoning bei der Physik? Dann würde es doch eine wahnsinnige Paket-Flut geben, wenn jede Aktion erst beim Server beantragt werden muss!?
Speziell würde mich auch interessieren, in welchem Umfang die Übertragung vonstatten geht - wie groß ist das Datenvolumen bei der Kommunikation zwischen Server und Client (natürlich nur als theoretischer Wert)? Besonders interessieren würde mich das im Falle von MMOGs, wo eine wirklich große Anzahl an Clients ein sparsames Übertragunskonzept voraussetzt.
Also, alles, was Ihr an weiterführenden Informationen und Eigenwissen habt -- her damit!
Dank & Gruß,
Markus
-
Es wird nur getrickst. Je Phantasievoller, desto besser.
Bei Ultima Online rennt man los und das ist soweit auch kein Problem, weil Server und Client die selbe Karte der statischen Sachen auf der Platte haben. Nur wenn dynamische Sachen im Weg sind, wird man gegebenenfalls zurückgebeamt. Bis zu 6 Schritte oder so können abgeschickt werden, bevor die Ausgangs-Queue voll ist. Alles wird vom Server gesteuert. Clientseitige Berechnungen sind nur Vermutungen, um es flüssiger erscheinen zu lassen.
Bei Age of Empires gibt man einen Befehl und der Soldat klackt die Hacken zusammen und sagt schneidig "Zu Befehl, Sir!" und geht dann los. Rundenbasiert (Frames), der schneidige Spruch verdeckt die Netzlatenz, denn das Paket geht vor dem Spruch ins Netz und nach dem Spruch erst bewegt such der Mann auf dem Bildschirm.
-
Bei Online-Spielen werden so oft Datenpakete verschickt wie nur möglich. Dabei gibt es eigentlich 2 Varianten:
1. Je nach Datenpaket wird die Position im Clienten neu gesetzt.
2. Es wird eine Richtung angegeben und dann vom Clienten aus auf eine neue gewartet.Leider ist mir von letzterer die Bezeichnung entfallen.
-
Hey, danke schonmal für eure Antworten!
Ist ja witzig, dass du ausgerechnet Ultima Online nennst, denn genau damit habe ich in letzter Zeit sehr viel herumexperimentiert. Aber dass es dort eine Queue für die Schritte gibt, ist mir neu - konnte auch in den UOX-Sourcen nichts derartiges entdecken. Das aber nur nebenbei
Zurück zum Thema. Wie siehts denn beim Mega-State-of-the-art-3D-Massive-Multiplayer-Physik-Grafikkarten-Killer-Spiel XYZ aus? Ich stelle mir zum beispiel ein synchrones Simulieren physikalischer Vorgänge sehr datenlastig vor. Ist die einzige Lösung hier, soviele UDP-Pakete rauszufeuern, wie nur möglich und zu hoffen, dass einige davon auch wirklich ankommen?
-
Nein, das waere unsinnig, mit steigender packetrate wuerdest du wenig mehr an nuetzlicher information verschicken, du wuerdest aber zu packetloss beitragen, das wirkt sich am ende nachteilig aus, denn der server schickt nur neue packete anhand der vorherigen die abgeschickt wurden von denen er gutmuetig glaubt dass sie auch ankamen.
State of the art zeichnet sich dadurch aus dass sehr genau bestimmt wird
-was ueberhaupt relevant ist
-was die prioritaet dessen ist
-was garantiert werden muss und was lossy istweiter hast du sehr gute kompressionsalgorithmen sowie interpolations und extrapolations verfahren.
aber die richtig guten tricks wissen nur die paar wenigen die das aus erfahrung wissen, entsprechend begehrt und rar sind die leute
-
Servus,
BTW:
UO ist ein lustiges Thema und mit einer schlechtesten Beispiele mit denen man sich befassen kann. Gerade was UO betrifft wird jede noch so kleine Animation vom Server gesteuert. Der Client ist hier nur für die Darstellung und die Annahme von Benutzerbefehlen zuständig. Dadurch gibt es ein enormen Wust an Paketen die vom Server gesendet werden. Volkard hat recht, es gibt eine Limitierung von "3" Paketen (z.B. Schritte) welche in der Ausgangsqueue vom Client warten und quittiert werden müssen.gruß
Hellsgore