Modellierung der Ausbreitungsgeschwindigkeit von Lichtinformationen im Weltraumkampf sim

29

Ich arbeite an einer Weltraumkampfsimulation, die sich über relativ große Gebiete erstreckt (ein Raumwürfel mit einer Seitenlänge von 20 Lichtminuten) und (meistens) realistische Physik verwendet. Eines der wichtigsten Elemente, die ich modellieren möchte, ist die Ausbreitungsgeschwindigkeit von Informationen über das Schlachtfeld - das heißt, wenn Spieler A sein Hauptlaufwerk auf einer Seite des Schlachtfelds einschaltet, gibt es eine Verzögerung von 20 Minuten, bevor Spieler B es sieht und kann darauf reagieren

Dies ist auch für relativ kleine Schlachtfelder ein wichtiger Faktor angesichts der damit verbundenen Geschwindigkeiten. Ein 500 m langes Schiff mit 30 km / s wird sich in 1/60 Sekunde um seine volle Länge verdrängen, sodass selbst das Zielen auf einen Gegner, der nur wenige Zehntelsekunden entfernt ist, von einer leichten Verzögerung betroffen ist.

Ich habe dies noch nie gesehen und frage mich, ob es einige bewährte Methoden gibt, um dies zu modellieren. Im Moment stempele ich jedes Ereignis mit einem Zeitstempel und markiere es mit einem Ort, stelle es in eine Warteschlange und prüfe dann bei jedem Häkchen, ob sich eines der Objekte in der Spielwelt am Rand des Lichtkegels befindet, und füge das Ereignis hinzu zu ihrer Sensorwarteschlange. Ich werde es (aber noch nicht) optimieren, indem ich alle Ereignisse entferne, die bereits von allen Objekten erfasst wurden, die es möglicherweise erfassen können, aber dennoch denke ich, dass dies verdammt schnell umständlich wird und viel auffrisst von Zyklen, wenn Hunderte von Abtastobjekten im Spiel sind (was ziemlich routinemäßig ist).

Gibt es Datenmodelle, die dafür besser geeignet wären, die ich auschecken sollte?

John Biesnecker
quelle
7
Keine Ahnung, aber ich sage, was für eine nette Frage!
Tim Holt
Whoa! Bei Spielen geht es hauptsächlich um Visualisierung. Ich muss wissen, wie Sie Gegner visualisieren wollen, wenn die Pixel viel zu groß sind. Einfache HUD-Indikatoren? Ein Textmodus-Abenteuerspiel? Bitte erleuchte mich!
Jonas Byström
1
Sie sagen, Ihr Modell ist physikalisch genau. Ist das Newton oder relativistisch? Das könnte bei solchen Maßstäben einen großen Unterschied machen.
MSalters
1
Nicht, dass es die Frage beantwortet, aber vielleicht gibt Ihnen ein Blick auf eine langsamere Lichtgeschwindigkeit einige Ideen.
Michael Pankov
@ JonasByström - die Fernsicht ist ziemlich komplex und ich versuche sie aufzuräumen. Grundsätzlich hoffe ich, dass es sich um eine wahrscheinlichkeitstheoretische Sicht auf die zukünftige Position des Ziels handelt, basierend auf der Lichtverzögerung und den Schätzungen Ihres Schiffscomputers zum maximalen Delta-v des Ziels. Im Moment ist es aber weniger großartig :)
John Biesnecker

Antworten:

9

Nur Brainstorming hier ...

Interessanterweise ist die Netzwerkverzögerung in diesem Fall Ihr Freund. Wie in Ihnen WOLLEN einige Datenpakete verzögert werden, zumindest wenn es um das Zeichnen geht. Anstelle einer Basisverzögerung, die jeder Spieler normalerweise für alle Datenpakete hat, die nur von der Netzwerkgeschwindigkeit betroffen sind, müssen Sie für jedes Ereignis eine spezifische Verzögerung für jeden Spieler basierend auf der Lichtgeschwindigkeitsverzögerung anwenden.

Normalerweise sendet der Server Aktualisierungen zur gleichen Zeit an alle Clients. Sie müssen jedoch die "Lichtverzögerung" für jedes Ereignis (basierend auf der Entfernung des Betrachters) berechnen und erst dann eine Aktualisierung senden Zeit.

Berechnen Sie also für jedes Ereignis die Zeitverzögerung zwischen dem Ereignis und jedem Spieler und stellen Sie dieses Ereignis in eine Warteschlange, damit es erst nach Ablauf der Verzögerungszeit zum Ziehen an diesen Spieler gesendet wird.

Hiermit wird die Auswirkung einer Änderung der Position oder Geschwindigkeit des Spielers nach dem Eintreten des Ereignisses nicht behoben. Sie können jedoch möglicherweise Ereignisse anpassen, die aufgrund von Spielerwechseln in die Warteschlange gestellt wurden. Ein Spieler rückt näher, das Ereignis rückt zeitlich näher. Spieler zieht weg, zieht rechtzeitig weg.

Eine Doppler-Verschiebung wäre eine interessante Sache, die in den Mix eingehen könnte, basierend auf dem Bewegungsdelta zwischen Betrachter und Ereignis.

Tim Holt
quelle
Ich modelliere schon irgendwie die wechselnde Position und Geschwindigkeit. Trotz der Skalierung erreichen Objekte im Spiel im Allgemeinen keinen nennenswerten Teil der Lichtgeschwindigkeit, sodass Ereignisse sie relativ leicht überholen. Bei jedem Tick wird jedoch überprüft, ob sich der Empfänger in der Sphäre befindet, die er gesehen haben könnte Wenn Sie sich also auf einen guten Clip zu- oder von ihm wegbewegen, kann sich dies um einige Ticks auswirken. Doppler wäre allerdings interessant! Etwas zu untersuchen. :-)
John Biesnecker
2
Beachten Sie Folgendes: Wenn Sie diese Methode verwenden, kann niemand, der die Pakete scannt, Informationen abrufen, bevor dies erforderlich ist. Eve Online macht etwas Ähnliches mit getarnten Schiffen. Wenn sich ein Schiff in einem Gebiet bewegt, werden alle Kunden benachrichtigt, aber wenn sich ein getarntes Schiff bewegt, wird den Kunden nichts mitgeteilt. Andernfalls würden die Pakete, obwohl der Client das Schiff nicht anzeigt, angezeigt.
Ray Britton
5

Die Frage ist: Wie genau muss Ihr verzögertes Bild sein, damit es tatsächlich wiedergegeben wird? Wenn Sie eine 100% ige Genauigkeit anstreben, müssen Sie entweder die Aktionen oder den Status jedes Objekts auf der Karte bei jedem Tick speichern und sie, wie Sie sagen, mit einer auf der Entfernung basierenden Verzögerung wiedergeben. Wenn Sie sich nicht so sehr für die Genauigkeit interessieren, die Sie in Spielen selten benötigen, können Sie den Status in Intervallen speichern und zwischen diesen extrapolieren, wenn die Verzögerung aufholt. Sie können optimieren, indem Sie nicht identische Updates speichern.

Alternativ können Sie alle Bewegungen vektorisieren und einen Pfad für jedes Objekt zusammen mit einer Startzeit speichern, die von einem universellen Beobachter angezeigt wird. Dann können Sie einfach die erwartete Position eines Objekts für jeden Beobachter basierend auf dem Universalzeitzähler und der Ortszeit basierend auf den von ihm gespeicherten Pfadknoten berechnen. Wenn der Zeitstempel eines Pfadknotens hinter dem Lichtkegel aller relevanten Objekte liegt, verwerfen Sie ihn.

Bearbeiten: Das oben Gesagte setzt voraus, dass Sie die grundlegende Relativitätstheorie betrügen, indem Sie einen absoluten Beobachter haben (ich nehme den Spieler an). Dies würde Ihnen einige der interessanteren Aspekte der Zeitdilatation rauben, aber diese zu modellieren, wäre ein eigenes Projekt> _>

jono
quelle