У якому типі змінних зберігається позиція гравця на MMORPG, наприклад WoW?


18

Я навіть чув, як Дж. Кармак швидко говорив про це ...

Як програмне забезпечення може так точно відслідковувати позицію гравця, опинившись у такому величезному світі, не завантажуючи між зонами та в багатокористувацькому масштабі? Як форматуються дані, коли вони проходять через мережевий код?

Я можу зрозуміти, як вершини зберігаються в пам'яті графічної карти, але коли мова заходить про синхронізацію мультиплеєра, я не можу уявити, що найкраще.

Відповіді:


26

Скотт Білас працював над облогою підземелля і написав статтю "Постійний світ облоги підземелля" . Хоча Dungeon Siege не є MMO, у нього є світ, і він говорить про позиціонування гравців у своїх роботах. Я вважав це чудовим читанням. Ось відповідний розділ:

Випуск точності

З самого початку інженерна команда знала, що безперервний світ суттєво вплине на розробку двигунів та контенту, а головним питанням була стабільність чисельності. Уявіть, що два персонажі йдуть у формації за два метри один від одного, спрямовуючись на схід від початку. У якийсь момент відстань один від одного перевищує відстань від початку, і символи будуть здаватися «в одному місці».

З плаваючою точкою, чим далі ви отримуєте походження, тим більше точності втрачаєте, що може спричинити всілякі неприємні проблеми. Речі не впорядковуються, між сусідніми сітками з’являються тріщини, простір починає квантуватися, і коти та собаки починають жити разом. Dungeon Siege використовує FPU в режимі єдиної точності для очевидних переваг продуктивності та для того, щоб відповідати основній точності відео апаратного забезпечення. Однак, навіть якщо ми збільшили точність, це врешті-решт не могло б вирішити проблему, оскільки світ планувався бути, і в кінцевому підсумку, неймовірно великим.

Проблема точності означала, що неможливо мати єдиний світовий координатний простір, як у більшості інших ігор. Натомість рішення полягало в сегментації безперервного світу на набір незалежних координатних просторів і періодично перемикатися між ними, щоб скинути точність. В рамках цих обмежень були випробувані різноманітні ідеї, і ми врешті-решт зупинилися на варіації стандартної портальної системи.

Наше рішення складається з реляційної системи координат на основі вузла, в якій кожен куточок геометрії (Облоговий вузол) має власний простір координат і пов'язаний просторово із сусідньою геометрією через двері, якими він спільний з тими сусідами. Розташування вузлів, з'єднаних дверима, утворює суцільний графік, який представляє всю карту світу. Ця система вузлів розвивалася з часом від своєї первісної мети - підтримання точності FPU, щоб стати основним методом ефективного підрозділу простору та коренем незліченних оптимізацій.

Для того, щоб інкапсулювати поняття тривимірного положення відносно конкретного вузла, традиційний вектор (x, y, z) повинен був бути доповнений ідентифікатором вузла (x, y, z, вузол) і представляти зміщення від початку певного вузла. Цей 4-кортеж інкапсульований як положення облогового вузла або SiegePos. Пізніше ми додали SiegeRot (кватерніон, вузол), щоб обробляти порівняння між орієнтаціями по вузлах.

Словосполучення «немає світового простору» стало мантрою для команди, хоча буквально потрібні роки, щоб усі повністю зрозуміли, що це означає.

Більше його праць про Dungeon Siege ви можете подивитися тут .


Це здається дуже goo відповідь! Спасибі ! Я б задумався, чи використовує сьогоднішня гра обмежені числа, як цілі числа gmp.
jokoon

3

Для величезного беззонного світу я б хотів або подвійну вершину точності, або плаваючу точку з меншими шматками, що розділяють землю.

Кожен шматок матиме власну систему координат. При перетині кордону до кожного з цих фрагментів ви перетворите все на цю систему координат. Ось так вони і роблять це в літальних симах.

Якщо у вас є невеликі зони, я думаю, плавати буде достатньо.


Подвійна точність швидко приносить величезні переваги продуктивності та пам’яті. (x, y, z, зона) - 16 байт; (x, y, z) удвічі буде принаймні 24. Ви не можете швидко робити математику на них, і ви не можете їх використовувати на графічній карті.

Ну, картки Фермі можуть використовувати подвійну точність;) Але так, начебто відповідь підказує.
Nailer

2

Я б сказав, що для фактичного розташування це вектор з 3 плавців. Але також буде індекс зони, пов’язаний із гравцем. (Але не частина локації, оскільки все, що обробляється цим сервером зони, знаходиться в одній зоні, а отже, не повинно бути в одній структурі даних.)

Пам'ятайте, що принаймні 4 зони. 4 основні континенти. Я не думаю, що жоден із них більше, ніж приблизно 10 км на стороні. Наприклад, цей блог до останнього розширення розраховує всю територію, яка може подорожувати, як 41 квадратний миль. Усі поля боїв, всі екземпляри, знаходяться у власній зоні та координують простір.

Використовуючи API LUA, ви можете отримати позицію гравця GetPlayerMapPosition () повертає два поплавці кожен від 0 до 1 як пропорцію по всій карті світу.


1

Для WoW я очікую, що вони використовують простий плаваючий x / y / z - але відносно конкретної "зони"

Це допоможе обробляти «рухомі зони», наприклад, човни та цепеліни


1

Зазвичай онлайн-ігри, такі як Wow, Tibia і т.д. з використанням трьох змінних X + Y + Z у мета-таблиці програвача SQl. Runescape робить це без Z - таким чином гравець завжди виводиться на верхню частину ґрунтової сітки.


що таке мета-таблиця? Я дуже сумніваюся, що він буде зберігати його в БД, його потрібно використовувати в режимі реального часу ...
jokoon

(1) Мета-таблиця в цьому випадку - це таблиця БД з основними символьними даними, наприклад, Стать, посада xyz, кількість здоров'я, готівка в банку тощо і все, що там може бути. (2) У мене розміщені відкриті сервери Tibia, там позиція гравця зберігається в кеш-сервері. Але ... кожні 30 ~ s зберігається сервер на мета-дані гравця і додаються в метадані гравців. Тож якщо сервер закриється / він вийде з ладу, позиція гравців повернеться до позиції БД :)
Mikolaj Marcisz

-2

Поплавок? Ну, масив з 3 плаває для 3D-гри. Принаймні для нас ми використовуємо ноги як одиниці, тому все, що вам потрібно, - це 3-4 десяткових знаки, щоб бути в точці, що плаваючий шум не є проблемою. Якщо велика зона стоїть милі або дві на боці, це не все так вже й велика справа. Що стосується прозорого зонування в ЗМО, то це зовсім інше питання. У грандіозній схемі складних проблем у MMO зберігання позицій є досить низьким у списку.


У нас були проблеми з точністю з плаваючою точкою в деяких великих зонах СТО під час розробки. Я не знаю, що з ними стало. Це може бути не першочерговим завданням, але це потрібно враховувати досить рано, щоб фактично зробити рівні.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.