Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

21

23.12.2012, 14:50

@Blue meine Post war als Antwort auf Chromanoids Frage gedacht, aber in nachhinein betrachtet bin ich mir garnicht so sicher an wen sich seine Frage richtete :hmm: .

@Chromanoid Aus Erfahrung kann ich berichten, dass man als Spieler quasi automatisch eine Art Lastausgleich durchführt, weil wenn es in großen Schlachten zu schlimm wird, verzieht man sich halt in ruhigere Gebiete ;) .
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

22

23.12.2012, 15:36

Cool, wie macht ihr denn die Kollisionserkennung?
Ich denke dass ich mir diesen riesigen Aufsatz jetzt hier schenke, dazu gibt es ja genug Literatur. Vereinfachung der Geometrie ist aber natürlich der erste wichtige Fakt. Nicht Geometrie der Level oder Gebäude, sondern die der Spieler.

Bei mir geht JBullet spätestens bei ca. 1000 Kugeln in die Knie.
Kann ich nichts zu sagen, kenne ich nicht, klingt aber nach einem merkwürdigen Setup oder zu hoher Komplexität, die Du da willst.

Wie viele bytes braucht ihr denn pro Spieler wenn jeder so hundert bis zweihundert sieht?
Ich versteh irgendwie die Frage nicht. Ist "Bytes pro Spieler" in irgendeiner Art und Weise eine relevante Kenngröße? Davon mal abgesehen haben wir das nie gemessen. Warum auch?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

23

23.12.2012, 18:13

Mich würde der Datendurchsatz pro Spieler interessieren. Grob überschlagen: Pro Spieler eine ID (4 Byte), eine Richtung (bei einem MMO mit fußläufigen Akteuren reicht wohl ein Byte als bodenplanare Richtung) und ein Tempo (ebenso ein Byte). Dazu schickt wohl in regelmäßigen Abständen noch die absolute Position mit, weil das Aufaddieren solcher verlustbehafteten Angaben schon nach einigen Sekunden zu merklichen Differenzen führen kann, aber die will ich hier mal ignorieren. Macht 6+x Byte pro Spieler-Update. Bei 2 Updates pro Sekunde (MMOs sind in der Hinsicht für meinen Geschmack viel zu sparsam) für 2000 Spieler also 24kb/s an reinen Nutzdaten pro Client. Plus nochmal frei geratene 10% Overhead für UDP, Bookkeeping und sowas sind wir bei ~27kb pro Sekunde und Client. Bei 2000 Clients also bei ~50 MB/s Bandbreite am Server. Das sollte eigentlich machbar sein. Auch wenn da noch ne Menge zusätzlicher Traffic dazukommt.

Kollision und sowas: Bullet ist eine Physik-Simulation, es geht aber auch schlichter. Und MMOs machen es üblicherweise sehr viel schlichter. Ein schlichter Test, ob ein Spieler bei seiner Marschrichtung in der nächsten halben Sekunde etwas trifft, sollte deutlich schneller gehen. In diesem Fall wird wirklich die Client-Seite der limitierende Teil sein. Und natürlich die komplett künstliche Testsituation - wenn die 2000 Spieler sich ernsthaft kloppen würden, hätte man *sehr* viel mehr Traffic als 12 Byte pro Nase und Sekunde.

@BlueCobold: wie hieß das Spiel?
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

24

23.12.2012, 18:49

Die Daten waren sehr unterschiedlich. Einen kompletten Player oder NPC zu spawnen waren mehrere hundert Bytes, Bewegungs-Commands nur wenige, genau wie targeting, skillcast/use/start/launch. Das Minimum pro Paket war aber eher ~12 Bytes...
- SkillUse: Length (2), Type (1), Player (4), SkillID (4), SkillLvl (2)
- Move: Length (2), Type (1), Player (4), StartLoc (3*4), EndLoc (3*4)
- Target: Length (2), Type (1), Player (4), Target (4)

Letzteres Paket haben wir allerdings z.B. schon mal nicht per Broadcast an alle geschickt (nur Party), das muss erstens niemand wissen (Abuse, Aim/AssistBot) und zweitens muss es niemand wissen (keine relevante Info mit simplen Client), sowie natürlich Einsparung an Traffic, da Targeting ja doch sehr oft vor kommt, leider aber nicht so oft wie Targeting+SkillUse

Was der Server definitiv mehr gebraucht hat als bombastischer Socket-Code, das war Bandbreite :D Keine Ahnung wie viel die dafür bezahlt haben, das war zum Glück nicht meine Sache. War aber wohl nicht ganz wenig. Die Hardware selbst war allerdings kein sooo großer Kracher. Gut, das ist ein paar Jahre her, aber mein Arbeitslaptop würde heute da auch in etwa ran reichen.

@Schrompf: Es war ein Lineage 2 Server. Anfangs hat nur der Client limitiert, aber das hat bald zu Problemen mit Geo-Abuse geführt, weswegen wir erst eine eigene Geoengine hatten, die später aber mit der offiziellen des eigentlichen Server-Projekts ergänzt wurde. Und die haben sich ernsthaft gekloppt ;) Von 2000 ist aber schnell mal die Hälfte bis drei viertel tot oder laggt mit der eigenen Hardware (Grafik/CPU) so derb, dass der Server entlastet wird. :D Lag im Sinne von FPS unter 1, nicht im Sinne von langsamem Netzwerk, wobei es da auch welche gab, die den reinkommenden Traffic nicht verkraftet haben.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (23.12.2012, 19:00)


25

23.12.2012, 21:21

Cool, wie macht ihr denn die Kollisionserkennung?
Ich denke dass ich mir diesen riesigen Aufsatz jetzt hier schenke, dazu gibt es ja genug Literatur. Vereinfachung der Geometrie ist aber natürlich der erste wichtige Fakt. Nicht Geometrie der Level oder Gebäude, sondern die der Spieler.
Für mich war eher interessant mit welcher Güte ihr die Kollisionserkennung durchführt. Also eine physikalische Simulation mit Spieler-Spieler-Kollision oder nur Spieler-vs-Environment... Das klassische MMORPG ist in dieser Hinsicht ja ziemlich begrenzt und im Grunde dadurch auch grenzenlos, was die Anzahl der serverseitig unterstützten Spieler angeht (siehe 100K Users on BigWorld Server: Not “If,” But “Why?”).

Bei mir geht JBullet spätestens bei ca. 1000 Kugeln in die Knie.
Kann ich nichts zu sagen, kenne ich nicht, klingt aber nach einem merkwürdigen Setup oder zu hoher Komplexität, die Du da willst.
Naja, mir ging es um die Simulation eines FPS mit einem hohen Interaktionsgrad zwischen den Spielern (siehe http://zfx.info/viewtopic.php?f=10&t=112&start=495#p27266). Da wurde es bei 1000 Kugeln wirklich eng.

Wie viele bytes braucht ihr denn pro Spieler wenn jeder so hundert bis zweihundert sieht?
Ich versteh irgendwie die Frage nicht. Ist "Bytes pro Spieler" in irgendeiner Art und Weise eine relevante Kenngröße? Davon mal abgesehen haben wir das nie gemessen. Warum auch?
Ich bin, warum auch immer, davon ausgegangen, dass es sich bei eurem Spiel um ein MMOFPS handelt. Da ist eine hohe Update-Rate ja ziemlich wichtig und da hab ich bei mir Bandbreitenprobleme gesehen...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

26

23.12.2012, 21:32

Ich sehe bei der Update-Rate keinen großen Unterschied zwischen MMOFPS und MMORPG. Im Gegensatz zu einem FPS gibt es bei einem RPG ja viel mehr Zeug, was der Spieler selbst hat. Gerade was AOE angeht ist ein RPG ja meist wesentlich krasser als ein FPS, heißt es werden mehr Spieler von mehr Zeug gleichzeitig beeinflusst, was mehr Rechenleistung und Bandbreite erfordert. Gerade Lineage 2 ist ein sehr PVP-lastiges RPG im Endlevel-Bereich, wo schnelle Aktionen sehr wichtig sind. Ich denke also nicht, dass Du da pauschalisieren kannst, dass ein FPS da komplizierter als ein RPG wäre.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

27

23.12.2012, 21:43

Ich freue mich sehr über die rege Diskussion in diesem Thema, welche aber glaube alle recht weit an meiner eigentlichen Frage vorbei gehen. Zahlen wie 1000 Spieler (beispielsweise in einem RPG) sind da doch noch weit von einer zumindest theoretisch 'unendlich' Spielerzahl entfernt.
Wo ich ja meine 'Gedanken' dahingehend geäussert habe das es (ebend irgendwie?!) machbar sein müsste das nur dann eine (kurze) verbindung zum Server aufgebaut wird wenn es 'nötig' ist, was ja schon recht oft ist, was wiederum zu der gesamten Problematik und der Frage führt.

Aber nur um ein paar Gedanken zur Diskussion beizutragen ^^ :
Gerade was AOE angeht ist ein RPG ja meist wesentlich krasser als ein FPS, heißt es werden mehr Spieler von mehr Zeug gleichzeitig beeinflusst, was mehr Rechenleistung und Bandbreite erfordert.

Hier bin ich ganz anderer Meinung. In einem RPG (jedenfalls so wie ich es entwerfen möchte) spielt es keine Rolle ob ich ein AOE einen Normalen Hit mache oder einfach Dumm in der Gegend rumstehe. Client schickt Server einfach die Informationen. Spieler (ID) führt an Position (X,Y) Action (n) aus; Action (n) hat nun beispielsweise eine Reichweite von (a) mit Wirkung von (z) dieses wird Serverseitig lediglich berechnet. der Rest ist rein visuelles und Clientseitig...

28

23.12.2012, 21:47

Wenn ich auf eine Person ziele und diese Haken schlagend über eine Wiese läuft, dann ist es schon wichtig, dass ich entsprechend häufig von den Richtungswechseln mitkriege. Rollenspiele erfordern in der Regel spieltechnisch wesentlich weniger Updates. Klar kann man auch ein Action-RPG konzipieren, das wesentlich mehr Updates pro Zeiteinheit erfordert, aber in der Regel sind MMORPGs da recht harmlos.

29

23.12.2012, 21:49

Ich freue mich sehr über die rege Diskussion in diesem Thema, welche aber glaube alle recht weit an meiner eigentlichen Frage vorbei gehen. Zahlen wie 1000 Spieler (beispielsweise in einem RPG) sind da doch noch weit von einer zumindest theoretisch 'unendlich' Spielerzahl entfernt.
BigWorldTech schaffen mit ihren Servern ja schon 100k Spieler. Wie sie zurecht fragen ist: wozu und warum... Bei hochinteraktiven Spielen wie FPS sind da die Grenzen IMO noch eher technischer Natur.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

30

23.12.2012, 22:40

Wenn ich auf eine Person ziele und diese Haken schlagend über eine Wiese läuft, dann ist es schon wichtig, dass ich entsprechend häufig von den Richtungswechseln mitkriege. Rollenspiele erfordern in der Regel spieltechnisch wesentlich weniger Updates. Klar kann man auch ein Action-RPG konzipieren, das wesentlich mehr Updates pro Zeiteinheit erfordert, aber in der Regel sind MMORPGs da recht harmlos.

Dann ist Dir das PvP von Lineage 2 nicht bekannt. Sorry, aber da steht der Update-Aufwand einem FPS in nichts nach.


@EternalPain:
Du kannst das "visuell rein Client-seitig" gern machen, aber wenn es korrekt sein soll, muss immer der Server berechnen wer betroffen ist und diese Information auch an die Clients schicken - inklusive Damage, getriggerte Effekte und eventuell tot umkippende Player. Komplett unendliche Spieler-Zahl ist schon aus dem Problem an sich heraus nicht möglich, welches eine Komplexität von O ( n² ) aufweist und sich nicht auf O ( 1 ) reduzieren lässt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige