Modelowanie prędkości rozprzestrzeniania się informacji świetlnej w kosmicznym symulatorze bojowym

29

Pracuję nad symulacją walki kosmicznej, która rozgrywa się na stosunkowo dużych obszarach (sześcian przestrzeni ~ 20 minut świetlnych w bok) i wykorzystuje (głównie) realistyczną fizykę. Jednym z kluczowych elementów, który chcę wymodelować, jest prędkość rozprzestrzeniania się informacji w przestrzeni bitwy - to znaczy, jeśli gracz A włączy swój główny napęd po jednej stronie przestrzeni bitwy, gracz B zobaczy 20 minut opóźnienia i może na to zareagować

Nawet w przypadku stosunkowo niewielkich przestrzeni bojowych jest to ważny czynnik, biorąc pod uwagę zaangażowane prędkości. Statek o długości 500 m, pracujący z prędkością 30 kps, przemieści się na całej swojej długości w 1/60 sekundy, więc nawet celowanie w przeciwnika w odległości zaledwie kilku dziesiątych sekundy świetlnej będzie miało wpływ na opóźnienie.

Nie widziałem tego wcześniej i zastanawiam się, czy istnieją najlepsze praktyki modelowania tego. W tej chwili oznaczam czasowo każde zdarzenie i zaznaczam je lokalizacją, umieszczam w kolejce, a następnie sprawdzam, czy którykolwiek z obiektów w świecie gry znajduje się na krawędzi lekkiego stożka i dodaje wydarzenie do kolejki czujników. Zoptymalizuję go (ale jeszcze tego nie zrobiłem), usuwając wszelkie zdarzenia, które zostały już wykryte przez wszystkie obiekty, które mogą to wyczuć, ale myślę, że to szybko stanie się niewygodne i zje dużo cykli, jeśli w grze są setki obiektów wykrywających (co jest dość rutynowe).

Czy istnieją modele danych, które lepiej by do tego pasowały, które powinienem sprawdzić?

John Biesnecker
źródło
7
Nie znam odpowiedzi, ale powiem, co za miłe pytanie!
Tim Holt
Zaraz! Gry polegają głównie na wizualizacji. Muszę wiedzieć, jak planujesz wizualizować przeciwników, gdy piksele są zbyt duże? Proste wskaźniki HUD? Gra przygodowa w trybie tekstowym? Proszę, oświeć mnie!
Jonas Byström
1
Mówisz, że twój model jest fizycznie dokładny. Czy to newtonowski czy relatywistyczny? To może mieć duże znaczenie w takich skalach.
MSalters
1
Nie to, że odpowiada na pytanie, ale może spojrzenie na wolniejszą prędkość światła da ci kilka pomysłów.
Michael Pankov
@ JonasByström - widok z dużej odległości jest dość złożony i staram się go oczyścić. Zasadniczo mam nadzieję, że będzie to probabilistyczny pogląd na to, gdzie będzie cel w przyszłości, oparty na lekkim opóźnieniu i szacunkach komputera statku na temat maksymalnej delty-v celu. W tej chwili jest to jednak mniej niesamowite :)
John Biesnecker

Odpowiedzi:

9

Burza mózgów tutaj ...

Co ciekawe, opóźnienie sieciowe jest twoim przyjacielem w tym przypadku. Tak jak Ty CHCESZ wystąpić opóźnienie dla niektórych pakietów danych, przynajmniej jeśli chodzi o rysowanie. Ale zamiast podstawowego opóźnienia każdy gracz normalnie miałby dla wszystkich pakietów danych, których dotyczy tylko jego prędkość sieci, musisz zastosować określone opóźnienie dla każdego zdarzenia dla każdego gracza w oparciu o opóźnienie prędkości światła.

Zazwyczaj serwer wysyła aktualizacje do wszystkich klientów w tym samym czasie, ale potrzebujesz, aby serwer obliczył „lekkie opóźnienie” dla każdego zdarzenia (na podstawie odległości widza), a następnie nie wyśle ​​aktualizacji, dopóki czas.

Tak więc dla każdego wydarzenia, oblicz opóźnienie między wydarzeniem a każdym graczem, a następnie ustaw w kolejce to wydarzenie, aby nie było wysyłane do losowania do tego gracza, dopóki nie upłynie czas opóźnienia.

Nie dotyczy to wpływu zmiany pozycji lub prędkości gracza po wystąpieniu zdarzenia, ale można potencjalnie dostosować zdarzenia, które zostały ustawione w kolejce na podstawie zmian gracza. Gracz zaczyna się zbliżać, zbliżać wydarzenie w czasie. Gracz się odsuwa, odsuwa się w czasie.

Przesunięcie dopplerowskie byłoby ciekawą rzeczą do włączenia w miks, w oparciu o deltę ruchu między widzem a wydarzeniem.

Tim Holt
źródło
Już w pewnym sensie modeluję zmieniającą się pozycję i prędkości. Pomimo skali, obiekty w grze na ogół nie poruszają się w znacznym ułamku prędkości światła, więc wydarzenia wyprzedzają je stosunkowo łatwo, ale przy każdym tyknięciu sprawdza się, czy odbiornik znajduje się w kuli, która mogła widzieć wydarzenie, więc jeśli zbliżasz się do dobrego klipu lub go oddalasz, może to wpłynąć na to kilka kliknięć. Doppler byłby jednak naprawdę interesujący! Coś do obejrzenia. :-)
John Biesnecker,
2
Coś, o czym należy pamiętać, jeśli użyjesz tej metody, nikt nie skanuje pakietów, zanim będzie mógł uzyskać informacje. Eve Online robi coś podobnego z maskami. Kiedy jakikolwiek statek porusza się w obszarze, wszyscy klienci są powiadamiani, ale kiedy statek zakryty porusza się, klienci nic nie mówią. W przeciwnym razie chociaż klient nie pokaże statku, pakiety by to zrobiły.
Ray Britton
5

Pytanie brzmi: jak dokładnie potrzebujesz opóźnionego obrazu, aby faktycznie został odtworzony? Jeśli szukasz 100% dokładności, będziesz musiał zapisać działania lub stan każdego obiektu na mapie przy każdym tiku i, jak mówisz, odtwarzać je z opóźnieniem w zależności od odległości. Jeśli nie przejmujesz się tak bardzo dokładną dokładnością, której rzadko potrzebujesz w grach, możesz zapisywać stan w odstępach czasu i ekstrapolować między nimi, gdy nadejdzie opóźnienie. Możesz zoptymalizować, nie zapisując identycznych aktualizacji.

Alternatywnie możesz wektoryzować cały ruch i zapisać ścieżkę dla każdego obiektu wraz z czasem rozpoczęcia widzianym przez uniwersalnego obserwatora. Następnie możesz po prostu obliczyć oczekiwaną pozycję obiektu dla każdego obserwatora na podstawie licznika czasu uniwersalnego czasu lokalnego na podstawie zapisanych węzłów ścieżki. Kiedy znacznik czasu węzła ścieżki znajduje się za stożkiem świetlnym wszystkich odpowiednich obiektów, odrzucasz go.

Edycja: Powyższe zakłada, że ​​będziesz oszukiwał podstawową teorię względności, mając absolutnego obserwatora (zakładam, że gracz). Okradłoby cię to z niektórych interesujących aspektów dylatacji czasu, ale ich modelowanie byłoby projektem samym w sobie> _>

jono
źródło