Multiplayer and physics engine
От: Сергей  
Дата: 07.10.05 10:54
Оценка:
Добрый день!
Предположим, нужно написать сетевую мультиплеерную игру с реалистичным поведением твердых тел (то, что называют "физикой" в играх). Т.е. есть игровой сервер, есть клиенты. Как совмещать расчет физики и сетевое взаимодейстивие клиентов с сервером? Можно сделать, чтобы только сервер рассчитывал физику, но что-то мне подсказывает, что это не есть гуд. Как вообще по-хорошему можно сделать такую вещь, причем собственный физический движок писать не хочется?
Re: Multiplayer and physics engine
От: WolfHound  
Дата: 07.10.05 12:55
Оценка: 1 (1) +2
Здравствуйте, Сергей, Вы писали:

С>Как совмещать расчет физики и сетевое взаимодейстивие клиентов с сервером?

Клиенты шлют на сервер команды, а сервер возвращает состояния объектов.
С>Можно сделать, чтобы только сервер рассчитывал физику, но что-то мне подсказывает, что это не есть гуд.
И что именно тебе это подсказывает?
С>Как вообще по-хорошему можно сделать такую вещь, причем собственный физический движок писать не хочется?
Все считать на сервере. Иначе будет куча проблем с синхронизацией.
Однако имеет смысл дублировать расчеты и на клиенте для обеспечения плавности но как только с сервера пришли данные то нужно замещать расчеты клиента на то что прислал сервер.
Полностью на клиенте имеет смысл делать расчеты не влияющие на состояние в игре.
Нпример есть в игре какойнибудь исключительно визуальный эффект... скажем круги на воде от пуль.
Тк эффект искючительно визуальный то рассинхронизация в данном случае ничем не грозит, а раз нам это ничем не грозит то нефиг напрягать сервер всякой фигней.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Multiplayer and physics engine
От: M.Faith Германия  
Дата: 07.10.05 13:38
Оценка:
Здравствуйте, Сергей, Вы писали:

С>Добрый день!

Привет
С> Как вообще по-хорошему можно сделать такую вещь, причем собственный физический движок писать не хочется?

Если не хочешь напрягать сервер — предлагаю следующий подход:

На сервере должен идти основной обьект управления — назовём его — "карта", распределительное ядро — скажем "синхронизатор" и информационный блок — пусть будет "телеком".

"карта" должна предоставлять публиц функции objectXY_changed, object_dissapiered ...

"телеком" получает сообщения от клиентов в виде двух пакетов: физика, персонаж.

оба передаются "синхронизатору".

В "синхронизаторе" всё разбивается по очередям и приоритетам,

Как только очередь прозесса приходит, изменение некоторых физических данных рассылается всем клиентам через "телеком", персонаж же когда подходит его очередь передаётся на "карту", а от туда и "телекому".

В это время на узерах логические движки принимают информацию и отстраивают миры — каждый локально.

Такой конструкт хорошим не назовёшь, потому что существует ни один мир а столько сколько клиентов подключено, таким образом больше вероятнасть ошибок и у каждого uzera дожна быть полная версия программы. Но эффект разгружения сервера на лицо — сервер в данном случае выполняйет лишь синхронизирующую роль — конструкт старых игрушек — "Warcraft I, Dune II"
Re[2]: Multiplayer and physics engine
От: Сергей  
Дата: 07.10.05 20:55
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Клиенты шлют на сервер команды, а сервер возвращает состояния объектов.

Команды какого рода?
WH>И что именно тебе это подсказывает?
Ну, предположим, клиентов штук 8. А частота обновления мира на сервере 60 гц. Получается, каждому клиенту 60 раз в секунду следует отправлять матрицы трансформаций каждого объекта? Не будет ли это слишком большой нагрузкой?
WH>Все считать на сервере. Иначе будет куча проблем с синхронизацией.
WH>Однако имеет смысл дублировать расчеты и на клиенте для обеспечения плавности но как только с сервера пришли данные то нужно замещать расчеты клиента на то что прислал сервер.
Мысль безусловно хорошая, но не совсем ясно как реализовывать.
WH>Полностью на клиенте имеет смысл делать расчеты не влияющие на состояние в игре.
Ну, это ясно.
Re: Multiplayer and physics engine
От: minorlogic Украина  
Дата: 08.10.05 10:55
Оценка:
Здравствуйте, Сергей, Вы писали:

Есть статья , описывающая , как это реализованно в Age of Empires. Рекомендую почитать.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[3]: Multiplayer and physics engine
От: DEMON HOOD  
Дата: 08.10.05 12:25
Оценка: :)
Здравствуйте, Сергей, Вы писали:

WH>>Клиенты шлют на сервер команды, а сервер возвращает состояния объектов.

С>Команды какого рода?
О, великий сервер! Пришли мне состояние объекта "игрок" и заодно вот того камня.



в самом деле, что за дурацкий вопрос?
silent RSDN@Home 1.2.0 alpha [618] Windows XP 5.1.2600.65536
Re[2]: Multiplayer and physics engine
От: Сергей  
Дата: 08.10.05 13:21
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Есть статья , описывающая , как это реализованно в Age of Empires. Рекомендую почитать.


А что, в этой игре есть физика? Собственно, вопрос в том, как совместить физику и мультиплеер.
Re[4]: Multiplayer and physics engine
От: Сергей  
Дата: 08.10.05 13:30
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

DH>О, великий сервер! Пришли мне состояние объекта "игрок" и заодно вот того камня.

На команды такого рода я сначала и подумал. А потом мне стало кое-что неясно, что именно, см. ниже.
DH>
DH>в самом деле, что за дурацкий вопрос?
На сервере есть мир, состоящий из твердых тел. Каждый раз нужно запрашивать положения всех тел? Тел много, а если не всех, то как определить, состояние каких тел надо запрашивать, а каких нет? А если всех, то зачем запрашивать, пусть сервер сам шлет всегда и все.
Или имелись ввиду команды от клиентов типа "Игрок 'orbb' повернул руль на -31 градус и вдавил акселератор до упора", т. е. по сути клиенты должны представлять собой лишь устроиства ввода, подключенные через сеть?
Re[3]: Multiplayer and physics engine
От: minorlogic Украина  
Дата: 08.10.05 14:47
Оценка:
Здравствуйте, Сергей, Вы писали:

С>А что, в этой игре есть физика? Собственно, вопрос в том, как совместить физику и мультиплеер.


Нет там описание сетевой модели , в которую можно вписать физику любой сложности.

Я бы вообще рассматривал две основные модели
1. Event Locking которая как раз в стать есть.
Преимущества — сколь угодно сложный мир , все считается на клиенте, совершенно не жрет трафик .
Недостатки — заведомо чуть большая инерционность (время отклика).

2. Не знаю как называется , но она в 3д шутерах. Когда "важные решения " принимает сервер , и рассылает для синхронизации клиентам.
Преимущества — Высокое время отклика
Недостатки — трафик напрямую зависит от сложности взаимодействующего мира.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[5]: Multiplayer and physics engine
От: DEMON HOOD  
Дата: 09.10.05 11:46
Оценка: 1 (1)
Здравствуйте, Сергей, Вы писали:

С>На сервере есть мир, состоящий из твердых тел. Каждый раз нужно запрашивать положения всех тел?

как вариант — консоль отсылает текущее положение игрока, а сервер возвращает положение тел только "в зоне видимости"

С>Или имелись ввиду команды от клиентов типа "Игрок 'orbb' повернул руль на -31 градус и вдавил акселератор до упора", т. е. по сути клиенты должны представлять собой лишь устроиства ввода, подключенные через сеть?

можно и так.
silent RSDN@Home 1.2.0 alpha [618] Windows XP 5.1.2600.65536
Re[2]: Multiplayer and physics engine
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 10.10.05 06:06
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Нпример есть в игре какойнибудь исключительно визуальный эффект... скажем круги на воде от пуль.

WH>Тк эффект искючительно визуальный то рассинхронизация в данном случае ничем не грозит, а раз нам это ничем не грозит то нефиг напрягать сервер всякой фигней.

Т.е. один чел эти круги увидит, а другой — нет?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Вселенная бесконечна как вширь, так и вглубь.
Re[3]: Multiplayer and physics engine
От: WolfHound  
Дата: 10.10.05 08:05
Оценка: 5 (1) +1
Здравствуйте, Real 3L0, Вы писали:

WH>>Нпример есть в игре какойнибудь исключительно визуальный эффект... скажем круги на воде от пуль.

WH>>Тк эффект искючительно визуальный то рассинхронизация в данном случае ничем не грозит, а раз нам это ничем не грозит то нефиг напрягать сервер всякой фигней.
R3>Т.е. один чел эти круги увидит, а другой — нет?
Не совсем так.
У разных челов эти круги могут иногда отрисоваться немного по разному. (ибо пули это важная часть состояния мира и они синхронизированы)
Но в данном случае овчинка выделки не стоит ибо кто будет в кваке во время разборки сравнивавать круги на воде на разных компах?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: Multiplayer and physics engine
От: WolfHound  
Дата: 10.10.05 08:06
Оценка: 1 (1) +1
Здравствуйте, Сергей, Вы писали:

С>На сервере есть мир, состоящий из твердых тел. Каждый раз нужно запрашивать положения всех тел?

Нет. Сервер должен присылать состояния видимых объектов.
С>Или имелись ввиду команды от клиентов типа "Игрок 'orbb' повернул руль на -31 градус и вдавил акселератор до упора", т. е. по сути клиенты должны представлять собой лишь устроиства ввода, подключенные через сеть?
Именно так.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Multiplayer and physics engine
От: Сергей  
Дата: 10.10.05 13:38
Оценка:
Всем участвовавшим спасибо, вопрос можно считать закрытым.
Re[3]: Multiplayer and physics engine
От: serge_levin Россия  
Дата: 10.10.05 14:39
Оценка: 1 (1)
Здравствуйте, Сергей, Вы писали:

С>Ну, предположим, клиентов штук 8. А частота обновления мира на сервере 60 гц. Получается, каждому клиенту 60 раз в секунду следует отправлять матрицы трансформаций каждого объекта? Не будет ли это слишком большой нагрузкой?


Зачем? Можно пересылать, например, пакеты примерно такого формата :
timeStamp // синхронизация во времени
пространственные координаты
ориетнация объекта (3 угловые координаты)
первые производные пространственных и угловых координат (скорости)
при необходимости более плавного перемещения — вторые производные пространственных и угловых координат (ускорения)

Данные для объекта пересылать как только старые потеряют актуальность. И для синхронизации изредка. В реальной жизни за глаза хватает пересылки такой структуры около 5 раз в секунду для движущегося объекта.

Таким образом, расчет весь идет на сервере, а у клиента есть достаточно адекватная позиция любого объекта на любой момент времени.
... << RSDN@Home 1.1.3 stable >>
Re[4]: Multiplayer and physics engine
От: Сергей  
Дата: 11.10.05 07:02
Оценка:
Здравствуйте, serge_levin, Вы писали:

_>Зачем? Можно пересылать, например, пакеты примерно такого формата :

_>timeStamp // синхронизация во времени
_>пространственные координаты
_>ориетнация объекта (3 угловые координаты)
_>первые производные пространственных и угловых координат (скорости)
_>при необходимости более плавного перемещения — вторые производные пространственных и угловых координат (ускорения)

_>Данные для объекта пересылать как только старые потеряют актуальность. И для синхронизации изредка. В реальной жизни за глаза хватает пересылки такой структуры около 5 раз в секунду для движущегося объекта.


_>Таким образом, расчет весь идет на сервере, а у клиента есть достаточно адекватная позиция любого объекта на любой момент времени.


Спасибо за идею, буду реализовывать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.