Agba schrieb:
Ich fände es sehr schön, wenn endlich spiele die 64-spieler grenze durchbrechen würden. Gerde ein battlefield könnte ivh mir sehr gut mit 128 spielern vorstellen.
Statdessen scheinen wir uns allerdings wieder zurück zu bewegen (battlefront 2: 40 Spieler)
Ist leider nicht so einfach umzusetzen, da die Ressourcen/Bandbreite mit jedem Spieler nicht linear skalieren, sondern annähernd exponentiell. Denn die Spieler wollen in einem kompetiven Spiel wie Battlefield hohe Tickraten, Server-Side-Calculation, echten Projektilberechnungen anstelle von Hitscan usw... Machen wir dazu mal eine sehr stark vereinfachte Kalkulation.
Ausgangslage: 30 Updates / Sekunde bidirektional zum Server. Dabei hat jeder Spieler nur folgende mitzuteilende Informationen:
* Spieler-ID [1 Byte]
* Ort (X-, Y-, Z-Koordinate) [3 * float32 = 12 Byte]
* Orientierung (wo schaut er hin, Rotation auf der X-, Y- und Z-Achse) [3 * float32 = 12 Byte]
D.h. um zu wissen wo sich ein Spieler befindet und wohin er schaut kostet 15 Byte pro Update, was bei 30 Updates / Sekunde 450 Byte/s macht - soweit kein Problem. Nur muss der Server auch die Positionen an alle anderen Spieler verschicken. D.h. bei 16 Spielern muss ich allen 16 Spielern die Position der 15 anderen Spieler sowie der eigenen (der Server ist schließlich authorativ und sagt mir auch wo ich mich gerade offiziell befinde) mitteilen. Bei 32 Spielern muss ich 32 Spielern die Positionsinfo der anderen 31 Spieler + der eigenen mitteilen etc...
# Spieler | Server/Spieler Eingehend | Server Ausgehend |
16 | 16 * 450 = 7,2 kByte/s | 16 * 7,2 = 115,2 kByte/s (~9,9 GByte Traffic pro Tag) |
32 | 32 * 450 = 14,4 kByte/s | 32 * 14,4 = 460,8 kByte/s (~39,8 GByte Traffic pro Tag) |
64 | 64 * 450 = 28,8 kByte/s | 64 * 28,8 = 1.843,2 kByte/s (~159,2 GByte Traffic pro Tag) |
100 | 100 * 450 = 45 kByte/s | 100 * 45 = 4.500 kByte/s (~388,8 GByte Traffic pro Tag) |
128 | 128 * 450 = 57,6 kByte/s | 128 * 57,6 = 7.372,8 kByte/s (~637 GByte Traffic pro Tag) |
Ist natürlich eine reichlich naive Berechnung, die davon ausgeht, dass jeder Spieler jederzeit mitgeteilt bekommt wer sich wo befindet und das alle fortwährend in Bewegung sind. Natürlich kann man da noch optimieren, indem man beispielsweise den jeweiligen Spielern nur Infos zu den anderen sendet, die sie sehen können. Außerdem kann man die Übertragung ein wenig komprimieren, weit entfernte Spieler nicht 30x sondern vielleicht 15x pro Sekunde bei den anderen Spielern aktualisieren und und und.... Wie auch immer, es soll nur veranschaulichen wie exponentiell die Datenmenge bei 30 Ticks mit den Spielerzahlen steigt. Und jeder Schuss, jedes Projektil etc... kommt da natürlich noch on-top und muss über die Leitungen an den Server und die Spieler. Außerdem will das alles verarbeitet und berechnet werden.
Merke: Netzwerkcode in einem kompetiven Echtzeit-Shooter ist alles andere als trivial, und skaliert - mit steigenden Spielerzahlen und dem ganzen bling-bling herum - ziemlich bescheiden. ;-)