W jakim rodzaju zmiennej pozycja gracza jest przechowywana na MMORPG, takim jak WoW?

18

Słyszałem nawet, że J. Carmack szybko o tym mówi ...

W jaki sposób oprogramowanie może tak dokładnie śledzić pozycję gracza, będąc na tak wielkim świecie, bez ładowania między strefami i na skalę dla wielu graczy? Jak formatowane są dane, gdy przechodzą przez kod sieciowy?

Rozumiem, w jaki sposób wierzchołki są przechowywane w pamięci karty graficznej, ale jeśli chodzi o synchronizację gry wieloosobowej, nie wyobrażam sobie, co jest najlepsze.

żart
źródło

Odpowiedzi:

26

Scott Bilas pracował nad Dungeon Siege i napisał artykuł „The Continuous World of Dungeon Siege” . Chociaż Dungeon Siege nie jest MMO, ma świat i mówi o pozycji gracza w swoim artykule. Uważam, że to świetna lektura. Oto odpowiednia sekcja:

Problem precyzji

Od samego początku zespół inżynierów wiedział, że ciągły świat będzie miał znaczący wpływ na konstrukcję silnika i treści, a głównym problemem była stabilność numeryczna. Wyobraź sobie dwie postacie idące w szyku dwa metry od siebie, zmierzające na wschód od miejsca pochodzenia. W pewnym momencie odległość od siebie jest przytłoczona odległością od źródła, a postacie wydają się znajdować „w tym samym miejscu”.

Dzięki zmiennoprzecinkowemu, im dalej od początku otrzymujesz, tym większą precyzję tracisz, co może powodować różnego rodzaju paskudne problemy. Rzeczy nie układają się dobrze, pojawiają się pęknięcia między sąsiednimi siatkami, przestrzeń zaczyna się kwantyzować, a koty i psy zaczynają żyć razem. Dungeon Siege używa FPU w trybie pojedynczej precyzji, aby uzyskać oczywiste korzyści w zakresie wydajności i dopasować się do natywnej precyzji sprzętu wideo. Jednak nawet jeśli zwiększymy precyzję, ostatecznie nigdy nie rozwiąże problemu, ponieważ planowano, że świat będzie niesamowicie duży.

Problem precyzji oznaczał, że nie byłoby możliwe zunifikowanie przestrzeni współrzędnych świata, jak w większości innych gier. Zamiast tego rozwiązaniem było podzielenie świata ciągłego na zestaw niezależnych przestrzeni współrzędnych i okresowe przełączanie między nimi w celu zresetowania precyzji. W ramach tych ograniczeń wypróbowano wiele pomysłów i ostatecznie zdecydowaliśmy się na odmianę standardowego systemu portalu.

Nasze rozwiązanie składa się z relacyjnego układu współrzędnych opartego na węzłach, w którym każdy fragment geometrii (węzeł oblężniczy) ma swoją własną przestrzeń współrzędnych i jest przestrzennie połączony z sąsiednią geometrią przez drzwi, które dzieli wspólnie z tymi sąsiadami. Układ węzłów połączonych drzwiami tworzy ciągły wykres reprezentujący całą mapę świata. Ten system węzłów ewoluował w czasie od pierwotnego celu, jakim jest utrzymanie precyzji FPU, aby stać się podstawową metodą efektywnego dzielenia przestrzeni i źródłem niezliczonych optymalizacji.

Aby zamknąć pojęcie pozycji 3D względem określonego węzła, tradycyjny wektor (x, y, z) musiał zostać uzupełniony o identyfikator węzła (x, y, z, węzeł) i reprezentować przesunięcie względem początku określonego węzła. Ten 4-krotek jest enkapsulowany jako pozycja węzła oblężniczego lub SiegePos. Później dodaliśmy SiegeRot (czwartorzęd, węzeł) w celu obsługi porównań między orientacjami w węzłach.

Wyrażenie „nie ma miejsca na świecie” stało się mantrą dla zespołu, chociaż dosłownie zajęło lata, aby wszyscy w pełni zrozumieli, co to znaczy.

Więcej jego dokumentów na temat Oblężenia Lochów można znaleźć tutaj .

Ricket
źródło
To wydaje się bardzo dziwna odpowiedź! Dzięki ! Zastanawiałbym się, czy dzisiejsza gra użyłaby liczb ograniczonych, jak to robią liczby całkowite gmp.
Jokoon
3

W wielkim świecie bez stref wybrałbym wierzchołek o podwójnej precyzji lub zmiennoprzecinkowy z mniejszymi fragmentami dzielącymi ziemię.

Każdy fragment miałby swój własny układ współrzędnych. Przekraczając granicę do każdej z tych części, przekształcasz wszystko w ten układ współrzędnych. I tak to robią w symulatorach lotów.

Jeśli masz małe strefy, myślę, że pływak wystarczy.

Mistrz
źródło
Podwójna precyzja szybko zapewnia ogromne korzyści w zakresie wydajności i pamięci. (x, y, z, strefa) ma 16 bajtów; (x, y, z) liczba podwójna wyniesie co najmniej 24. Nie można na nich wykonywać szybkiej matematyki i nie można ich używać na karcie graficznej.
Cóż, karty Fermi mogą mieć podwójną precyzję;) Ale tak, takie podejście sugeruje odpowiedź.
Nailer
2

Powiedziałbym, że dla rzeczywistej lokalizacji jest to wektor 3 pływaków. Ale z graczem byłby również indeks strefy. (Ale nie jest częścią lokalizacji, ponieważ wszystko obsługiwane przez ten serwer strefy znajduje się w tej samej strefie, a zatem nie musi być w tej samej strukturze danych).

Pamiętaj, że istnieją co najmniej 4 strefy. 4 główne kontynenty. Nie sądzę, żeby któryś z nich miał z boku więcej niż 10 km. Na przykład ten blog przed najnowszym rozszerzeniem oblicza cały możliwy do podróży obszar jako 41 mil kwadratowych. Wszystkie pola bitew, wszystkie instancje, znajdują się w swoich strefach i koordynują również przestrzeń.

Za pomocą interfejsu API LUA można uzyskać pozycję odtwarzacza. GetPlayerMapPosition () zwraca dwa zmiennoprzecinkowe, każdy w proporcji od 0 do 1, na całej mapie świata.

Doug-W
źródło
1

W przypadku WoW oczekuję, że używają prostej liczby zmiennoprzecinkowej x / y / z - ale w odniesieniu do określonej „strefy”

Pomogłoby to obsłużyć „strefy ruchu”, na przykład łodzie i zeppeliny

bluescrn
źródło
1

Zwykle gry online, takie jak Wow, Tibia itp. Przechowuj odtwarzacz poz. przy użyciu trzech zmiennych X + Y + Z w meta tabeli odtwarzacza SQl. Runescape robi to bez Z - w ten sposób gracz jest zawsze renderowany na górze siatki ziemi.

Mikołaj Marcisz
źródło
co to jest meta stół? Naprawdę wątpię, żeby przechowywał go w DB, musi być używany w czasie rzeczywistym ...
Jokoon,
(1) Meta tabelą w tym przypadku jest tablica DB z podstawowymi danymi znakowymi, na przykład. Płeć, pozycja xyz, ilość zdrowia, gotówka w banku itp. I cokolwiek innego może być. (2) Hostowałem otwarte serwery Tibii, tam gracz pos jest przechowywany w pamięci podręcznej serwera. Ale ... co 30 sekund zapisywany jest zapis serwera, a POS gracza będzie dodawany do metadanych Graczy. Więc jeśli serwer zostanie zamknięty / ulegnie awarii, pozycja graczy wróci do pozycji DB :)
Mikołaj Marcisz,
-2

Pływak? Cóż, zestaw 3 pływaków do gry 3D. Przynajmniej dla nas używamy stóp jako jednostek, więc wszystko, czego potrzebujesz, to 3-4 miejsca po przecinku, aby być w miejscu, w którym hałas nie jest problemem. Jeśli duża strefa ma tylko jedną lub dwie mile z boku, nie jest to wcale taka wielka sprawa. Co do przejrzystego podziału na strefy w MMO, to zupełnie inne pytanie. W wielkim schemacie trudnych problemów w MMO przechowywanie pozycji jest dość niskie na liście.

koderanger
źródło
Podczas opracowywania mieliśmy problemy z precyzją zmiennoprzecinkową w niektórych dużych strefach STO. Nie wiem, co się z nimi stało. Być może nie jest to najwyższy priorytet, ale należy wziąć to pod uwagę wystarczająco wcześnie, aby faktycznie osiągnąć kolejne poziomy.