Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2010, 17:28   #1
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию MMOFPS: разработка и возможные грабли

Здравствуйте.
Решил заняться разработкой MMOFPS(или MMOTPS). Опыт в разработке игр имею, но вот полноценные MMO-проекты никогда не писал. Возникает вопрос в реализации. Все статьи, которые я нашел в интернете, затрагивают лишь поверхностно многие вопросы. Проект будет кроссплатформенный, так что планирую использовать Ogre+Boost::ASIO+OpenAL. Затеваться с OpenGL+SDL нету желания, равно как и с кроссплатформенной собственноручной реализацией сокетов.
Пока что меня интересуют такой вопрос:
Как правильно реализовать структуру для MMOFPS? Пока думаю насчет такого:
Пользователь жмет кнопку, ID действия, которая она осуществляет, отсылается на сервер, а пользователю возвращается результат. То есть обработка физики, действий и прочего происходит на сервере, а пользователю отсылаются лишь данные, нужные для рендринга. Но думаю, что такой способ будет крайне медленным. Что вы можете посоветовать?
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 20.12.2010, 19:06   #2
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ничего в этом тормозного не вижу. Сервер и должен контролировать любые действия пользователей, и на себе держать игровой мир, в грубой форме конечно, ...по индексам, кто где стоит/перемещается и что делает, секунда за секундой, поправляя клиентов, если их внутренняя система создания игрового визуального пространства отклонилась от серверной модели. Никакого управления сервером, только запрос с клиента и после проверки на подлинность пакета - команда на изменение параметров у клиента.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 20.12.2010, 19:21   #3
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Само собой, никакого управления сервером через клиент. Но а что-же насчет нагрузки на сервер? Если будет большой мир, то серверу придется много обрабатывать на себе... Конечно, многое можно оптимизировать, например, `усыплять` неиспользуемые части мира, но все равно медленно.
Взять систему рагдолл, ведь ее обработка на стороне сервера является недопустим действием. Но писать в клиенте модуль физики, только из-за рагдолла, как-то глупо. Ведь придется хранить физическую модель мира, использовать физический движок... Как поступить в этой ситуации?
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 20.12.2010, 19:23   #4
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

Ogre как и SDL это вродебы врапперы над gapi (на основе ogl’a.)
А Boost aka C++ STL?
В прочем может я и ошибаюсь.

Ресурсы накладно передавать.
Передать лучше «состояния всевозможные», и минимум данных о них)
Клиент уведомляет о намеренье, а сервер смотрит и разрешает или не....
И уж графику и физику сервер точно не должен считать, как мне кажется)

У вас уже вся иерархия запросов – ответов разработана, или есть наметки?
Как мне кажется надо начать с классификации запросов-ответов (пакетов действий)

На вскидку…

pass1.
- запрос
- ответ
pass2.
- запрос клиента
- ответ сервера
- запрос сервера
- ответ клиента
pass3. ( по частоте запросов)
- запрос клиента
- периодические
-по требованию
- ответ сервера
- периодические
-по требованию
- запрос сервера
- периодические
-по требованию
- ответ клиента
- периодические
-по требованию

pass4. (по приоритету)

уровень приоритета - запрос клиента
- периодические
-по требованию
уровень приоритета - ответ сервера
- периодические
-по требованию
уровень приоритета - запрос сервера
- периодические
-по требованию
уровень приоритета - ответ клиента
- периодические
-по требованию

Что-то в этом духе с дальнейшей детализаций запросов и ответов, пронумеровкой их ID…
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 20.12.2010, 19:41   #5
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Цитата:
Ogre как и SDL это вродебы врапперы над gapi (на основе ogl’a.)
И? Тут смысл не в том, над какой либой это враппер, а смысл в скорости разработки. Зачем изобретать велосипед там, где это не нужно?
Да и SDL+OpenGL, по большому счету, приведение OpenGL к кроссплатформенному уровню.
Цитата:
А Boost aka C++ STL?
Ошибаетесь. Boost - это сборник кроссплатформенных либ, по большому счету. Boost::Asio - кроссплатформенные сокеты.

Цитата:
И уж графику и физику сервер точно не должен считать, как мне кажется)
Графика на сервере? Это нонсенс.
Физику не стоит? Почему? Тогда юзер должен отправлять данные о своей позиции, а сервер должен ему верить, думая, что эти координаты - результат работы физического движка. Тут сразу появляется две уязвимости.

Цитата:
У вас уже вся иерархия запросов – ответов разработана, или есть наметки?
Нет, ещё даже библиотеки не все выбрал.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 20.12.2010, 21:12   #6
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

Цитата:
а смысл в скорости разработки
да ради бога используйте, я вам что палки в колеса вашего велосипеда вставляю?))

я лишь указал на природу Огра в света вашего поста
Цитата:
…планирую использовать Ogre+Boost::ASIO+OpenAL. Затеваться с OpenGL+SDL нету желания…
затеваясь с одним вы автоматически играетесь с другим.
интересно а у огра есть имплиментации под dx?)

Цитата:
Графика на сервере? Это нонсенс.
имелось ввиду это:
Цитата:
а пользователю отсылаются лишь данные, нужные для рендринга
надеюсь, что вы не собранную и просчитанную графику
собрались отправлять клиенту? данные для рендеринга))

Хоть облачные вычисления и набирают силу, и кто вас знает чего вы там задумали))
но графика просчитанная на сервере ровно как и физика для меня - нонсенс)

Цитата:
Физику не стоит? Почему?...
Хм… а что сервер без глаз, без рук?
Он проверить не может?
Позицию (или смешение) на «правильность»?
Не полный просчет физики действия, а некоторую мат. физ. выборку во времени.
Известно же кто прыгает, стреляет, передвигает объекты, известны его возможности и т.д. Т.е. есть некоторое физ. мат. ожидание его только надо проверить. Если оно нарушается это однозначно хак механики игры. Поскольку клиент сам пользуясь вашей разработанной физической моделью просто бы не допустил бы этого. Мне так кажется.

Пусть игрок прыгает куда угодно и как угодно, если это не правильно сервер его возвращает на грешную землю (правильную позицию).
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 20.12.2010, 22:05   #7
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Цитата:
да ради бога используйте, я вам что палки в колеса вашего велосипеда вставляю?))

я лишь указал на природу Огра в света вашего поста

затеваясь с одним вы автоматически играетесь с другим.
интересно а у огра есть имплиментации под dx?)
Да, все зависит от плагинов рендринга. То есть при запуске приложения ПОЛЬЗОВАТЕЛЬ выбирает тип gapi. Есть и dx11.

Цитата:
имелось ввиду это:

надеюсь, что вы не собранную и просчитанную графику
собрались отправлять клиенту? данные для рендеринга))

Хоть облачные вычисления и набирают силу, и кто вас знает чего вы там задумали))
но графика просчитанная на сервере ровно как и физика для меня - нонсенс)
Ну да, все правильно я сказал. Юзеру отправляются позиции всех объектов, их свойства, анимация etc. На основе этих данных, у юзера генерируется сцена и она рендерится. Что не так? Я же не сказал, что на сервере генерируется видео и потоком отправляется юзеру.

Цитата:
Хм… а что сервер без глаз, без рук?
Он проверить не может?
Позицию (или смешение) на «правильность»?
Не полный просчет физики действия, а некоторую мат. физ. выборку во времени.
Известно же кто прыгает, стреляет, передвигает объекты, известны его возможности и т.д. Т.е. есть некоторое физ. мат. ожидание его только надо проверить. Если оно нарушается это однозначно хак механики игры. Поскольку клиент сам пользуясь вашей разработанной физической моделью просто бы не допустил бы этого. Мне так кажется.

Пусть игрок прыгает куда угодно и как угодно, если это не правильно сервер его возвращает на грешную землю (правильную позицию).
Не вижу смысла, двойная обработка физики выходит.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 20.12.2010, 22:37   #8
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

russian-stalker, походу тема троллингом попахивает . Ты же все знаешь, тебе говорят одно, ты опровергаешь такими же мыслями, сказали:

Цитата:
Сообщение от .pixel
Клиент уведомляет о намеренье, а сервер смотрит и разрешает или не....
И уж графику и физику сервер точно не должен считать, как мне кажется)
т.е. НЕ должен он выполнять рендер и не должен считать гравитацию, а только передать десяток другой байт на состояние. Но тут же ответ:

Цитата:
Сообщение от russian-stalker
Графика на сервере? Это нонсенс.
...как будто кто-то утверждал обратное .

Цитата:
Сообщение от russian-stalker
Физику не стоит? Почему? Тогда юзер должен отправлять данные о своей позиции, а сервер должен ему верить, думая, что эти координаты - результат работы физического движка
Как будто любой движок тщательно скрывает параметры объектов и ни при каких обстоятельствах не позволяет управлять моделями по параметрам, таким как: тип объекта, подтип объекта, индекс на сервере, индекс в списке клиента, положение (X,Y,Z), номер анимации, и пр. Сервер прислав такой пакет просто задаст, например, точку, а клиент сам будет топать туда, и ему сервер уже не нужен. Но сервер у себя "знает", где был игрок, куда он захотел пойти, и после того как запрос пользователя подтвержден, сервер начинает по своему глобальному таймеру двигать игрока у себя в заданном направлении, просто в математической модели. Как только на сервере персонаж достигает точки, идет еще один пакет клиенту, где он должен стоять теперь, ...если клиент не разошелся по времени, то он и у клиента будет стоять в том же месте, а если затянул, то будет шагать дальше, пока не дойдет в ускоренном виде, или рывком (это зависит от метода предугадывания). Другие пользователи, только вошедшие в игру, получат пакет от сервера, в котором параметры вашего персонажа и текущее положение, ...в какой он сейчас точке и куда идет, ...и плевать все хотели, что у одного пользователя ваш персонаж топает правой-левой, а у другого левой-правой, и какой сейчас запущен ролик бряцания оружием.

Нужно начинать делать, подводные камни в сомнениях, тут их полно, даже воды не видно.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 20.12.2010, 22:43   #9
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

Цитата:
позиции всех объектов, их свойства, анимация etc
я обеими руками за такой подход, главное что бы не вершинки и не текстурки там передавались.))

Цитата:
Не вижу смысла, двойная обработка физики выходит.
Делайте, как вам заблагорассудится…
И если вы считаете что вместо проверки на стороне сервера стоит просчитывать всю физику сцены одного игрока - флаг вам в руки…)) много флагов и стягов разных…)) поскольку их – игроков должно быть много по идее… и для каждого придется считать и флаг его держать… а если еще нагрузить близким к натуральному просчетами частиц и усугубить все это дело для натуральности каким-нибудь пфизиксХ и ему подобными... думаю красиво будет, но сервер только и будет этим заниматься основное свое время)

Думаю тогда надо хотя бы разделить/группировать какие физ. явления можно считать тут на стороне пользователя, а какие только на стороне сервера. Спец эффекты можно отвязать от сервера, наверное? К примеру, кому какое дело как у юзверя разлетаются искры и другие партиклы и еще что-нибудь отвязать мало важное)
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 20.12.2010, 23:18   #10
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

To Beermonza:
Цитата:
Сообщение от Beermonza Посмотреть сообщение
russian-stalker, походу тема троллингом попахивает . Ты же все знаешь, тебе говорят одно, ты опровергаешь такими же мыслями, сказали:
Знаете, в упор не вижу троллинга. Мне не нравится данная концепция, почему я обязан с ней согласиться? Я не отрицаю идеи, я прислушиваюсь к каждой идее, и если, по моему мнению, идея не оправдывает себя, то я пишу почему. Опять-таки, споры, споры и только споры дают правду. Если я услышу весомый аргумент, то я с радостью соглашусь.
Цитата:
...как будто кто-то утверждал обратное .
По поводу графики, у нас вышло недопонимание.
Да и я не отрицал, а лишь подтвердил, что так считаю.
Цитата:
Как будто любой движок тщательно скрывает параметры объектов и ни при каких обстоятельствах не позволяет управлять моделями по параметрам...
Про это я и говорил
Цитата:
Нужно начинать делать, подводные камни в сомнениях, тут их полно, даже воды не видно.
Знать бы с чего начать... Очень много раз проходили, когда начинал делать по одному плану, а заканчивал по совершенно по другому. Вот и выходило, что код получался несколько потрепанный, весь в заплатках и костылях. Вот и хочу хотя бы основы на берегу узнать

.pixel:
Цитата:
я обеими руками за такой подход, главное что бы не вершинки и не текстурки там передавались.))
Ни в коем случае, не у всех интернет железный. Да и нагрузка на сервер будет зверская. Хотя, видел в некоторых MMO-играх некоторую P2P систему для обмена контентом(то есть контент динамически подгружался в ходе игры).

Цитата:
Делайте, как вам заблагорассудится…
...
А я не хочу, как заблагорассудится. Смысл темы как раз в обмене опытом, мне интересно послушать, как другие реализовывали свои проекты.
В целом вы правы. Сейчас вспоминаю игру Point Blank, там расчеты гравитации, базовых столкновений проходили на стороне сервера, а остальные на стороне клиент. Вот к такому варианту и склоняюсь.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможные комбинации из чисел Serg1k Microsoft Office Excel 17 17.12.2021 13:27
Показательные грабли guz Общие вопросы C/C++ 1 25.11.2010 11:11
Все возможные варианты строки Vikenty Общие вопросы Delphi 3 29.08.2010 03:30
графы - Все возможные пути manuk Помощь студентам 9 23.05.2010 23:58
Все возможные слагаемые anGeee Паскаль, Turbo Pascal, PascalABC.NET 4 04.12.2008 20:22