Sind völlig dumme Client-Multiplayer-Spiele machbar? [geschlossen]

7

Ist es möglich, ein vernetztes Spiel zu erstellen, bei dem jeder Client ein vom Server an ihn gesendetes Pixelarray anzeigt und Eingaben an den Server zurücksendet? Dies wäre viel einfacher zu implementieren als die Verwendung der clientseitigen Vorhersage, aber ich würde mir vorstellen, dass es zu langsam wäre. Wäre es möglich?

rlms
quelle
1
Es ist besser, wenn Sie den gesamten Weltstatus für jeden Frame senden, als für jeden Frame riesige Pixelpuffer zu senden. Wenn die Bildratenanforderung sehr niedrig wäre, könnten Sie möglicherweise mit dem Senden des Pixelpuffers davonkommen, aber es wäre eine Verschwendung.
Vaughan Hilts
6
Es gibt einen Dienst namens OnLive, der genau das für vorhandene Spiele tut. Aber sie verfügen über leistungsstarke Serverhardware, wahnsinnig schnelle Konnektivität und möglicherweise proprietäre Videokomprimierungsalgorithmen, um dies zu ermöglichen. Es ist also nicht einfacher und definitiv nicht billiger. Die Vorstellung, dass so etwas einfacher zu implementieren wäre, beruht auf dem Missverständnis, das viele Leute haben, dass das Schreiben von Netzwerkcode extrem schwierig ist, viel schwieriger als das Codieren des restlichen Spiels. Ist es nicht.
TC
1
Eine clientseitige Vorhersage ist aufgrund des clientseitigen Renderns nicht erforderlich. Eine clientseitige Vorhersage ist erforderlich, da einige Spiele für das weltweite Internet-Gameplay ausgelegt sind und aufgrund der Lichtgeschwindigkeit die absolute Mindestlatenz zwischen zwei Punkten auf der gegenüberliegenden Seite der Erde etwa 133 ms beträgt, was etwa achtmal langsamer ist als für ein Spiel erforderlich 60fps Spiel. Ein serverseitiges Rendern würde das Latenzproblem nicht lösen. Ihr dummer Client muss die Eingabe dennoch senden und mindestens 8 Frames warten, bevor er die Ausgabe rendern kann.
Lie Ryan
1
Die Latenz ist nicht in allen Spielen ein Problem. Den meisten Leuten würde es wahrscheinlich nichts ausmachen, Online-Scrabble mit einer Verzögerung von einer Sekunde zu spielen.
user253751
1
Zum Beispiel ist Ultima Online dem sehr nahe - der Server sendet Position und Typen sichtbarer Objekte (jedoch nicht deren Grafiken und statische Requisiten), der Client sendet nur 2-3 Byte lange Eingaben (Bewegung / Angriff / Zauber + Richtung / Ziel / Typ) usw.)
Tomáš Kafka

Antworten:

5

Ja, es ist machbar und nein, es ist nicht kosteneffektiv oder performant. Denken Sie darüber nach, wie Netflix funktioniert. Es kann Millionen von Kunden mit 1080p- und sogar 4k-Streaming bedienen.

Warum es sich nicht lohnt, zu versuchen, was Sie mit der aktuellen Technologie vorschlagen:

  1. Bei einer Latenz muss der Client die Benutzereingaben an den Server senden und auf das visuelle Feedback vom Server warten. Dies kann für Clients im Ausland bis zu einer halben Sekunde dauern. Selbst wenn es nur 0,1 Sekunden dauert, wirkt das Spiel träge und weniger reaktionsschnell.
  2. Renderkosten: Zum Rendern der Grafiken benötigen Sie zunächst eine GPU pro Client (?). Was ist mit Spielelogik und Physik? Sie benötigen so ziemlich eine CPU und ~ 3Gig Speicher pro Benutzer.
  3. Komprimierung: Wenn Netflix Videos sendet, handelt es sich um ein komprimiertes Format. Das rechtzeitige Komprimieren des Videos wäre schwierig, was zu Latenz und Hardwarekosten führen würde.

Sie könnten wahrscheinlich damit durchkommen, die gesamte Logik auf der Serverseite auszuführen. Ich würde niemals empfehlen, das Rendering auf der Serverseite auszuführen. Außerdem sollten Sie die Leistung des Clients nutzen, um auf Eingaben zu reagieren (auch wenn Sie diese später korrigieren), bevor die Antwort vom Service zurückkommt, um die Fluidität zu verbessern.

AturSams
quelle
1
Ich bin nicht einverstanden mit der Verwendung von Netflix als Vergleichsmodell - das über Netflix gesendete Video ist bereits stark komprimiert und wurde mit einer niedrigen Bildrate erstellt, die für die Komprimierung ausgelegt ist. Die Techniken, die für Filme verwendet werden, sind viel zu anspruchsvoll, als dass ein Spiel mithalten könnte. Daher konzentrieren sich die Spiele auf keine Komprimierung (da HDMI-Kabel im Vergleich zu einer Internetverbindung TONNEN Bandbreite tragen) und schnelle Bildraten (60 Hz sind Standard gegenüber 24) oder 30 für Filme / Netflix). Netflix verwendet auch Caches, da viele Benutzer genau dasselbe Video anzeigen - für verschiedene Player nicht möglich, da sie unterschiedliche Informationen benötigen.
user2813274
@ user2813274: Genau, es gab Informationen, dass Netflix ~ 120 vorcodierte Versionen desselben Films mit unterschiedlicher Bandbreite verwendet.
Andriy Tylychko
Hi @ user2813274 Ich denke, ich habe in meiner Antwort erwähnt, dass eine rechtzeitige Komprimierung in # 3 nicht möglich ist. Neben der Komprimierung sind die Renderkosten absurd hoch. Es gibt viele Gründe, warum man es nicht tut. Ich habe einige aufgelistet. Technologisch ist das nicht unmöglich. Es ist einfach absurd.
AturSams
6

Genau damit macht NVIDIA GRID . Die Idee ist, dass das Spiel vollständig auf einem Server läuft. Der Client sendet seine Tastatur- und Mauseingaben an den Server und empfängt einen Videostream (komprimiert mit einem Videocodec, keine unkomprimierten Pixelarrays) von dem, was der Server rendert.

Wie werden sie das Latenzproblem lösen? Ich weiß es nicht, aber NVIDIA scheint ziemlich zuversichtlich zu sein, dass es ihnen gelingen wird, eine Netzwerkinfrastruktur bereitzustellen, die eine ausreichend niedrige Latenz bietet, um Spiele unterhaltsam zu machen. Zumindest scheinen sie viel Geld darauf zu setzen.

Philipp
quelle
2
OnLive macht das auch und hat für eine Weile.
Kevin Reid
1
@ KevinReid Ich habe versucht, ein Rennspiel und einen Shooter auf OnLive zu spielen. Diese Spiele waren nicht spielbar. Während sie seit Jahren im Geschäft sind, haben sie das versprochene Produkt immer noch nicht geliefert.
aaaaaaaaaaa
6

Es funktioniert schon. Viele Spiele liefen über eine Telnet-Verbindung. Schon jetzt können Sie NetHack und viele andere ASCII-kompatible Spiele mit einer 80x25-Konsole spielen. Für ein ziemlich schnelles Gameplay sollten Sie 2000 Charaktere mit einer Rate von 2-5 pro Sekunde übergeben. Das wären 10 Kilobyte pro Sekunde, was in Ordnung ist.

Wenn Sie das Fenster vergrößern, mit dem Sie suchen, werden Sie sehr schnell gegen die Wand stoßen. Es ist keine Bandbreitenwand, sondern eine Latenzwand. Mit dem erhöhten Paket, das Sie über das Netz senden, wird Ihre Antwort widerstrebender sein. Es sieht aus wie "Bandbreiten-Latenz-Fenster", während die Bandbreite erhöht wird, steigt Ihre Latenz aufgrund von Caching überall.

Moderne Spiele können dieses Problem nicht lösen, und selbst einmalige Multiplayer-Spiele - selbst Counter-Strike oder League of Legends - haben Einschränkungen, die die Spielqualität beeinträchtigen, wenn Sie keine Computer haben, die direkt über LAN verbunden sind. Gute Spieler, die an Turnieren teilnehmen, unterscheiden sich von Gelegenheitsspielern, da sie ständig mit einer Latenz von <1 ms spielen.

Das Netzwerkdesign von League of Legends ist jedoch sehr gut synchronisiert. Wenn Sie sie also fragen, zeigen sie Ihnen möglicherweise, wo Sie es kaufen oder verwenden können.

Andere Alternative - "Pass by Elements", dh Sie übergeben Vektorgrafiken über das Netz. Viele Standards werden entwickelt, aber das bekannteste Beispiel ist "xorg-server". Ich habe ein wenig darüber nachgedacht, einen netten kleinen Sender-Empfänger für Vektorgrafiken zu schreiben, aber meiner Erfahrung nach leiden alle unter "Fenstern mit geringer Bandbreite - Latenz". Dies bedeutet, dass die beste Erfahrung mit direkt angeschlossenen Computern erzielt werden kann.

Wenn Sie einfach ein Bild über das Internet senden möchten, gibt es h264-Codecs mit Open Source. Das FFmpeg-Projekt arbeitete an verschiedenen Codecs. Es gibt viele offene Pakete, die von * VNC leicht unterschieden werden können. Normalerweise wird diese Software für die Remoteverwaltung verwendet.

Für Spiele mit kleiner Aktualisierungsrate, wie "versteckte Objekte" usw., ist es ideal, nur das Herunterladen bei Bedarf mit Caching zu implementieren. Browser erlauben dies, aber ich weiß nicht viel über das Schreiben von Browsergames.

Sanaris
quelle
+1, weil ich mich geschlagen habe, um auf Telnet-Spiele hinzuweisen, die dies vor Jahrzehnten getan haben.
Reirab