Warum verwenden einige vernetzte Spiele die Interpolation und andere die Pfadfindung für Remotebewegungen?


21

Dies ist eine offene Frage, aber ich würde gerne sehen, dass jemand eine gute Begründung für beide beiträgt.

Ein kurzes Beispiel für beides:

Interpolationsmodell

Denken Sie an das Ventilmodell, bei dem der Client häufig Positionsaktualisierungen erhält und die Fernbedienungen ihre Positionen durch Interpolation dieser Daten aktualisieren.

Wegfindung

Denken Sie in diesem Modell, dass der Benutzer ein Ziel sendet und jeder den Weg dorthin findet.

Welche Arten von Spielen eignen sich jeweils und wann sollte man sie verwenden?


2
Ist es nicht ein bisschen zu breit für eine GDSE?
Kromster sagt Unterstützung Monica

@KromStern Ich kämpfte damit, daher "offene Frage". Obwohl ich denke, dass es fokussiert und objektiv genug ist, dass jemand mit Erfahrung darin, beides zu tun, in der Lage sein könnte, eine objektive Antwort darauf zu geben. Stimmen Sie mit Ihren Up- / Downvotes ab :)
Vaughan Hilts

Vielleicht wird es besser, wenn Sie diesen Teil hinzufügen: "Ich habe ein Problem A mit BCD-Einschränkungen". Im Moment ist es zu breit und es fehlt der Kontext, als ob "Was wähle ich, E oder F?" ohne jemals über ABCD zu erzählen.
Kromster sagt Unterstützung Monica

1
Die Kontrollen sind ein großer Teil. Verwenden Sie WASD oder einen Joystick, um sich zu bewegen? Interpolation passt gut. Mit der Maus auf das Ziel klicken? Wegfindung klingt viel besser.
Luaan

Antworten:


43

Ich habe an dem Netzwerkcode für zwei vernetzte AAA-Echtzeitspiele gearbeitet, eines für Smartphones und eines für eine Handheld-Konsole.

Um Ihre Frage "warum" direkt zu beantworten, verwenden einige Spiele das eine oder andere, weil es besser zu ihnen passt als das andere. Dies hängt nicht nur von der Art des Spiels ab, sondern auch von der Art des Netzwerks, über das wir sprechen (verknüpfte Arcade-Boxen haben andere Bedingungen als Spiele, die über 3G gespielt werden sollen). Einige Spiele verwenden tatsächlich beide oder sogar vollständig verschiedene Ansätze zur Synchronisation von Daten!

Ich möchte verallgemeinern und nicht nur Positionsdaten betrachten, sondern so ziemlich jede Art von Daten, die Sie zwischen zwei vernetzten Clients synchronisieren können.

Anstelle von zwei Möglichkeiten möchte ich ein Spektrum zwischen Hard- und Soft-Updates vorschlagen.

  • Sehr harte Aktualisierungen sind diskrete Ereignisse, die den Status auf dem anderen Client sofort und ohne Interpolation ändern, weil die Daten kritischer Natur sind (ein Spieler ist gestorben), da es sich nicht um eine Art von Daten handelt, für die Interpolation gilt (ein Online-Modus) Schachspiel, Chatnachrichten usw.) oder weil Ihr Netzwerk dies zulässt (denken Sie, dass verknüpfte Arcade-Schränke, in denen 60 Mal pro Sekunde zuverlässig der gesamte Spielstatus gesendet wird, durchaus möglich sind).

    Bei dieser Methode werden Netzwerkverzögerungen immer als verzögerte Aktualisierungen angezeigt und manifestieren sich als herumspringende Zeichen.

  • Hard-with-Inter- / Extrapolation- Updates sind sehr harten Updates ähnlich, aber für sich ständig ändernde Daten, für die es praktisch nicht möglich ist, die Daten jedes Mal zuverlässig zu senden, wenn sie sich ändern. Denken Sie daran, eine Position und einen Geschwindigkeitsvektor zu senden. Sie sollten in der Lage sein, Daten zwischen zwei Punkten zu interpolieren und danach zu extrapolieren. Sie sollten einen Notfallplan haben, wenn eingehende Daten nicht mit Ihren Hochrechnungen übereinstimmen. Ich würde sagen, dass die meisten Spiele, die Positionsaktualisierungen erfordern, diese Methode verwenden.

  • Hard-with-Synchronization- Aktualisierungen ähneln Hard-with-Inter / Extrapolation, erfordern jedoch nur selten eine Synchronisierung. Sie sollten dies für Daten verwenden, deren Inter- / Extrapolation wirklich trivial ist, z. B. die Uhr in einem Kampfspiel (einmal auf beiden Seiten eingestellt, ist es nicht wirklich notwendig, danach erneut zu synchronisieren).

  • Verzögerte Hard- Updates ähneln Hard-Updates, aber Sie sehen Daten aus der Vergangenheit. Ich vermute, dass Sie in vielen Musik-Arcade-Spielen in Japan, in denen Sie einen Song gegen einen anderen spielen können, tatsächlich gegen Spielerdaten spielen, die in der Vergangenheit aufgezeichnet wurden, möglicherweise Stunden oder sogar Tage zuvor. Diese Art von Updates kann natürlich nur verwendet werden, wenn Sie nicht wirklich mit dem anderen Spieler interagieren.

  • Soft- Updates bestehen aus dem Senden von Plandaten und dem Ausführen des Plans auf allen Hosts. Das nennt man "Wegfindung". Die Datenmenge, die zum Synchronisieren solcher Daten erforderlich ist, ist viel geringer. Sie können diese Art von Updates verwenden, wenn Sie bestimmte Unstimmigkeiten bei der Darstellung der Daten für den Benutzer vermeiden können, z. B. bei der Synchronisierung von Hunderten von Feinden.

    Planungsdatenaktualisierungen selbst können natürlich auch so hart / weich sein, wie Sie möchten.

  • Sehr weiche Aktualisierungen werden verwendet, wenn das Ergebnis einer Aktion viel früher zuverlässig berechnet werden kann. Sie senden einfach das Ergebnis und der andere Client spielt es einfach ab. Bei einigen Browser- und Smartphone-Spielen können Sie beispielsweise gegen andere kämpfen, die eigentliche Schlacht dauert jedoch Stunden (denken Sie an Travian-ähnliche Spiele). Es ist sehr wahrscheinlich, dass diese Spiele das Ergebnis in dem Moment berechnen, in dem der Kampf beginnt, und Sie sehen nur die Ergebnisse dieses Kampfes.

    Ein weiteres nicht vernetztes Beispiel hierfür wäre Civilization 4 mit aktivierten Kampfanimationen. Wenn Sie jemanden angreifen, wird das Ergebnis des Kampfes sofort berechnet, es wird jedoch eine Animation davon abgespielt. Ich kann Ihnen versichern, dass der Kampf nicht berechnet, sondern animiert wird.

Wie Sie sehen, gibt es viele Möglichkeiten, Daten zu synchronisieren, und ich bin sicher, Sie können sich viele andere vorstellen. Mit Ausnahme der einfachsten Online-Spiele wird höchstwahrscheinlich eine Mischung dieser Methoden verwendet, abhängig von der Art der zu synchronisierenden Daten, der Art des Spiels und sogar dem Status des Netzwerks um Aktualisierungen zu mildern, wenn die Verzögerung höher wird).


1
Das ist eine gute Einsicht. Gespeichert und verstaut.
Jitsu

Dem Sieger geht die Beute, danke für die informative Antwort!
Vaughan Hilts

3

Ich habe keine Einsicht in den Entwicklungsprozess von Valve, daher ist dies nur meine Meinung, aber:

Interpolation : Ich würde sagen, es ist besser für schnelle Spiele, wie zum Beispiel Egoshooter, bei denen es wichtig ist, dass der Gegner über alle Spieler hinweg pünktlich auf einer konstanten Position ist. Interpolieren bedeutet, dass Sie selbst dann eine reibungslose Bewegung auf dem Bildschirm haben, wenn einige Pakete verworfen werden (AFAIK, die meisten Multiplayer-FPS verwenden UDP anstelle von TCP / IP, wodurch weder die Integrität noch die Reihenfolge, in der die Pakete eintreffen, garantiert wird).

Pfadfindung : Wenn Zeit kein entscheidendes Element Ihres Gameplays ist und Ihr Algorithmus bei einer erneuten Ausführung einen konsistenten Pfad findet, kann die Pfadfindung interessant sein, da Sie keine häufigen und daher umfangreichen Aktualisierungen mit der Position der einzelnen Elemente senden müssen Entität. Ich würde sagen, dass dies beispielsweise für ein rundenbasiertes System geeignet erscheint, bei dem Sie die Anzahl der Netzwerkanforderungen begrenzen können (eine zu Beginn der Runde, eine nach Beendigung der Runde, um sicherzustellen, dass alle Clients in einem "gesunden" Zustand sind " Zustand.

Ich habe noch einmal nie an einem Netzwerkspiel oder für ein großes Spielstudio gearbeitet, aber nach dem, was ich gelesen habe, würde ich manchmal so vorgehen :)


0

Panda Pyjama Antwort ist ziemlich gut.

Grundsätzlich stellt sich die Frage, welche Datenmenge Sie mindestens senden können, um mehrere Clients in den gleichen Zustand zu versetzen, und wie Sie mit der Verzögerung umgehen, in der sich Clients während dieser Verzögerung möglicherweise in einem anderen Zustand befinden.

So wird am einfachsten prozedural generiert, wo alle Wechselwirkungen vorher bekannt sind, denn wenn alle Variablen bekannt sind, ist das Ergebnis bekannt. Isolieren Sie beispielsweise jemanden in einem Raum, dessen Verarbeitungsmethoden Sie kennen, und geben Sie ihm einen Datensatz, damit Sie die Ergebnisse genau vorhersagen können. Daher können Sie jedem anderen Kunden die Ergebnisse mitteilen, ohne dass dieser darauf warten muss, dass dieser seine Berechnung abschließt.

Eine Methode erwähnte er jedoch nicht. Erzwungene Ergebnisse.

Wenn das System eine Aktion einer Entität erwartet und andere Aktionen von dieser Aktion abhängig sind und andere Berechnungen diese Aktion berücksichtigen und bereits mit dem erwarteten Ergebnis vorverarbeitet wurden. Um die Synchronisation aufrechtzuerhalten, wird das gesamte System angehalten, während die eine Entität, die sich nicht am richtigen Ort befindet, wieder korrekt auf den Weg gebracht wird.

Ein Beispiel aus der Praxis sind alle anderen Unternehmen, die sich in einem Wartemuster befinden, um sicherzustellen, dass die richtige Vergütung an mich gesendet wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.