|
|
|
Канал Игры Мечты: «Расчет теоретического пика коннектов для UDP игр.» |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Итак дано:
ММО Space Shooter.
Метод обновления контента: UDP.
Необходимо: Реализовать максимально эффективную схему передачи данных считая что сервер бесконечно быстрый.
Итак... Мои мысли на этот счет:
Что надо передавать? Для каждого КА в момент времени (в кадр) надо знать его X, Y, Z и 3 компоненты поворота. (Не помню правильного их название... Тангаж, Рысканье и еще что-то).
Допустим в тупую: 6 double'ов... Это 6 * 8 = 48 байт на 1 КА. Если считать что у нас 30 кадров и 128КБит/сек, то будет: 11 КА. Все... Дальше не вытянет.
Мысли для оптимизации:
1) Всегда передавать координаты, с 0 точкой в КА наблюдателя и сократить XYZ до single. Тогда пакет на 1КА будет уже 3 * 4 + 3 * 8 = 36 байт.
2) Использовать механизм передачи изменений с синхро кадрами.
Допустим у нас есть КА. Мы знаем его текущие координаты и ориентирование. Передаем только приращение каждой из этих характеристик. и раз в, допустим, одну секунду - полный набор параметров.
Приращение будем передавать в половинной точности. Там примерно 3 знака точность.
Итого: 6 * 2 = 12 Байт и 48 байт на синхро кадр.
Для 30 кадров и 128Кбит/сек это уже 41 КА.
Ваши мысли?
добавлено спустя 3 минуты:
Да, 128Кбит взято из расчета что 1Гбит теоретически выдержит 9632 подключения по 128Кбит.
_________________ WARNING: By reading this post you accept that this post is genius.
Последний раз редактировалось: Варсик (13:11 31-01-2011), всего редактировалось 1 раз |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
Warstone : |
Всегда передавать координаты, с 0 точкой в КА наблюдателя
|
и как тогда понять де корабель?
или хочешь передавать постоянно координаты всех статических объектов тож?
EDIT: углы Эйлера лучче заменить на один кватернион гоню
забыл идентификатор корабля, хотя можно сделать "однопользовательскую ММО" типа Spore
ненада это делать для 3D а также для "необозримого" космоса который помещается в диапазон double
тогда полный слепок можно сделать 8 байт
добавлено спустя 9 минут:
я к тому что собсно приращения и UDP слегка несовместимы
_________________ This is what you get ...
(c) Radiohead
Последний раз редактировалось: Sh.Tac. (13:44 31-01-2011), всего редактировалось 2 раз(а) |
|
|
Kann
64 EGP
 Рейтинг канала: 3(45) Репутация: 7 Сообщения: 232 Откуда: Москва Зарегистрирован: 11.04.2008
 |
|
зачем передавать каждый кадр ?
10 раз в секунду возможно достаточно, далее написать алгоритм предсказания движения на клиенте
|
|
|
Guest
2075 EGP
              Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004
 |
|
Warstone : |
2) Использовать механизм передачи изменений с синхро кадрами.
Допустим у нас есть КА. Мы знаем его текущие координаты и ориентирование. Передаем только приращение каждой из этих характеристик. и раз в, допустим, одну секунду - полный набор параметров.
Приращение будем передавать в половинной точности. Там примерно 3 знака точность.
Итого: 6 * 2 = 12 Байт и 48 байт на синхро кадр.
|
При негарантированной передаче данных технику синхрокадров использовать нельзя. Во-первых, можно пропустить несколько приращений - и дальнейший ряд приращений будет ошибочен. Во-вторых можно пропустить несколько опорных кадров - и будет то же самое, но продолжительное во времени. Плохая идея.
Kann : |
10 раз в секунду возможно достаточно, далее написать алгоритм предсказания движения на клиенте
|
10 фпс для точности перемещения может быть маловато и с интерполяцией. А может быть и нет... Тут только практикой.
Но чем больше достоверных точек с метками времени - тем точнее интерполяция.
_________________ Трещит земля как пустой орех
Как щепка трещит броня
Последний раз редактировалось: Guest (15:10 31-01-2011), всего редактировалось 1 раз |
|
|
Kann
64 EGP
 Рейтинг канала: 3(45) Репутация: 7 Сообщения: 232 Откуда: Москва Зарегистрирован: 11.04.2008
 |
|
Guest : |
10 фпс для точности перемещения может быть маловато и с интерполяцией. А может быть и нет... Тут только практикой.
Но чем больше достоверных точек с метками времени - тем точнее интерполяция.
|
согласен, у себя мне хватает 10 кадров, но передача пакетов гарантированна...
так же на самом клиенте управление кораблем дублируется, и предсказание требуется только на соседях
|
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Так... 2 умных мысли: ID КА и такт времени...
добавлено спустя 7 минут:
Допустим ID КА будет 2 байта (64К объектов вы все-равно не увидите). метка времени... 1 байт. Циклично. При 30 фреймах это 8 секунд... За 8 секунд ни одного UDP... Все-равно ресинхронизацию надо будет запускать.
Итого, минимальный слепок: ID КА (2), Timestamp (1), DeltaPosition (2*3), DeltaRotation (2*3) = 15 байт
Sh.Tac. : |
и как тогда понять де корабель?
|
Ну синхро фреим расскажет где корабль, а остальные фреимы расскажут где как он двигается.
Kann : |
зачем передавать каждый кадр ?
10 раз в секунду возможно достаточно, далее написать алгоритм предсказания движения на клиенте
|
Что-бы более точно показать изменения... Чтоб пользователь мог отстрелить пушку у корабля. Вообще идея перетащить CS в космос при большом кол-ве народу.
Guest : |
При негарантированной передаче данных технику синхрокадров использовать нельзя.
|
Можно, я время забыл, каюсь. Если что-то пропустим - сплайны "замажут".
Guest : |
Во-вторых можно пропустить несколько опорных кадров - и будет то же самое
|
Это - хуже. Надо в этом случае просить переслать опорный кадр.
_________________ WARNING: By reading this post you accept that this post is genius.
Последний раз редактировалось: Варсик (15:58 31-01-2011), всего редактировалось 1 раз |
|
|
Guest
2075 EGP
              Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004
 |
|
Warstone : |
Это - хуже. Надо в этом случае просить переслать опорный кадр.
|
Чтобы просить переслать опорный кадр - надо понять, что он не дошёл, а у тебя из-за лага может ещё что-то прийти вместо опорного (мусор). Значит нужен по меньшей мере бит метки опорного кадра.
Метку ремени можно из пакета взять... Я могу ошибаться, но кажись метка времени ставится по моменту отправки пакета, а не прибытия. Надо посмотреть доки.
Ты не забывай, что нужно пересылать каждому клиенту положение всех остальных клиентов в радиусе видимости вокруг него.
Warstone : |
Ну синхро фреим расскажет где корабль, а остальные фреимы расскажут где как он двигается.
|
Есть ещё одно бяко - пульсирующая нагрузка на канал. если у тебя, для простоты, каждый 10-й кадр опорный и имеет размер в 4 раза больше промежуточного...
А с чего бы, кстати? Приращение у тебя намного менее точное, чем координаты и углы? Если так - будут прыжки. А если не так - то у тебя приращение всё равно по всем параметрам будет, кроме нулевых значений (можно поскипать, но пакет парсить будет сложнее)... Но нулевое значение приращения какого-либо параметра в экшнах - штука ппц как редкая, почти мифическая.
...да, так вот - если разница между ними в 4 раза - ты получишь пульсацию траффика раз в 10 кадров. Если пульсации по рандому сложатся в белый шум - будет ещё туда-сюда. А если засинхронизируются? Представляешь раскачку? Оборудованию сетевому тоже будет "хорошо"
добавлено спустя 3 минуты:
Kann : |
согласен, у себя мне хватает 10 кадров, но передача пакетов гарантированна...
так же на самом клиенте управление кораблем дублируется, и предсказание требуется только на соседях
|
При гарантированной передаче и без требования отстреливать уши пилоту с точностью до кадра всё намного проще - можно раз в такт обсчёта физики (а можно даже и реже раз в 10) передавать пакет с полной информацией всем абонентам. А между ними интерполировать. Или передавать чаще, но экстраполировать (исчезнут прыжки ошибок, но фактически все будут играть в гарантированном прошлом, и траектории иногда будут несколько странными).
Как-то так.
_________________ Трещит земля как пустой орех
Как щепка трещит броня
Последний раз редактировалось: Guest (16:24 31-01-2011), всего редактировалось 1 раз |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
я вот тут вспомнил одну неуспешную отечественную ММО на космическую тематику
в World of Tides симулятор был и на клиенте, соответственно передавались тока управляющие воздействия с отметками времени, которые обсчитывались практически идентично
т.е. картинка в целом таже самая у всех с небольшим запаздыванием, за исключением тока себя "родимого"
так вот когда "родимый" зарывался слека с точки зрения сервера, то ему в наказание слался полный слепок мира
Warstone : |
Вообще идея перетащить CS в космос при большом кол-ве народу
|
один раз прокатило, World of Tanks при комнатной организации легко догнал и перегнал EVE по онлайну
второй раз фкозмозе х.з. - стрёмновато
_________________ This is what you get ...
(c) Radiohead |
|
|
Kann
64 EGP
 Рейтинг канала: 3(45) Репутация: 7 Сообщения: 232 Откуда: Москва Зарегистрирован: 11.04.2008
 |
|
Warstone : |
Что-бы более точно показать изменения... Чтоб пользователь мог отстрелить пушку у корабля. Вообще идея перетащить CS в космос при большом кол-ве народу.
|
Для этого используется по моему лаго-компенсация.... так как все равно есть время прохождение пакета по сети от абонента до сервера которое надо учитывать...
вот ссылк вдруг кто не читал ....
http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking:ru
|
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Guest : |
Чтобы просить переслать опорный кадр - надо понять, что он не дошёл, а у тебя из-за лага может ещё что-то прийти вместо опорного (мусор). Значит нужен по меньшей мере бит метки опорного кадра.
|
Нет, если мы знаем в какой момент времени (время в timestamp байте), должен быть опорный кадр.
Guest : |
Метку ремени можно из пакета взять... Я могу ошибаться, но кажись метка времени ставится по моменту отправки пакета, а не прибытия. Надо посмотреть доки.
|
Так-же надо смотреть доки. Возможно таимстамп не нужен.
Guest : |
Ты не забывай, что нужно пересылать каждому клиенту положение всех остальных клиентов в радиусе видимости вокруг него.
|
Потому и 44 максимально народу пока-что получается.
Guest : |
Есть ещё одно бяко - пульсирующая нагрузка на канал.
|
А разнести синхронизацию по времени? То есть в этот фреим синхронизируются вот те 2 КА, а другой - следующие. Пульсации не будет. Что синхронизируется - договорились при появлении объекта (переслано по TCP или по UDP с подтверждением).
Kann : |
Для этого используется по моему лаго-компенсация....
|
Фраза "сплайны "замажут"" - это как-раз - оно.
Guest : |
А с чего бы, кстати? Приращение у тебя намного менее точное, чем координаты и углы?
|
Конечно. Так как приращение считаем в координатах того КА, к которому "приращаем". Там будут довольно маленькие потери, Так как половинная точность - это гуляющий 4-й знак после запятой, то это 0,1% погрешность (кто скажет точнее - грац.), если мы раз в секунду при 30 кадрах синхронизируемся, то Погрешность будет 3% в секунду. По скорости. По положению ИМХО должно быть меньше.
Есть у кого умнее алгоритм?
добавлено спустя 2 минуты:
Warstone : |
Guest :
А с чего бы, кстати? Приращение у тебя намного менее точное, чем координаты и углы?
Конечно. Так как приращение считаем в координатах того КА, к которому "приращаем".
|
А, или ты про 4 одинарную, а не двойную точноть? Так одинарная потому что это в системе КА считается. А так как он близко, то можно и одинарную точность.
Если КА далеко - можно понижать частоту синхронизации.
_________________ WARNING: By reading this post you accept that this post is genius.
Последний раз редактировалось: Варсик (18:47 31-01-2011), всего редактировалось 1 раз |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Посмотрел - в UDP нету метки времени.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
ну какбэ в UDP нету ни координат, ни айдишек кораблей
_________________ This is what you get ...
(c) Radiohead |
|
|
istorik
405 EGP
  Рейтинг канала: 1(1) Репутация: 75 Сообщения: 1057 Откуда: Андромеда Зарегистрирован: 18.02.2010
 |
|
Warstone : |
Посмотрел - в UDP нету метки времени.
|
Она есть в заголовке IP, опция 4 класс 2, согласно RFC 791.
_________________ Я Вам сейчас расскажу историю... |
|
|
Crush
285 EGP
  Рейтинг канала: 2(10) Репутация: 48 Сообщения: 1190 Откуда: Владивосток Зарегистрирован: 23.07.2003
 |
|
А зачем нужны такие детальные параметры для всех кораблей передавать? Ну понятное для кораблей которые находятся у тебя перед носом на какой то ограниченной дистанции (где их детально видно, а не просто "красный квадратик"), а остальные корабли для тебя по сути дела являются точками на радаре, для них и параметры можно обновлять гораздо реже, да и передавать только координаты точки на радаре.
|
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Crush : |
А зачем нужны такие детальные параметры для всех кораблей передавать? Ну понятное для кораблей которые находятся у тебя перед носом на какой то ограниченной дистанции (где их детально видно, а не просто "красный квадратик"), а остальные корабли для тебя по сути дела являются точками на радаре, для них и параметры можно обновлять гораздо реже, да и передавать только координаты точки на радаре.
|
Вы не были в масс ПвП... Когда с одной стороны 100 игроков и с другой - 100. UDP это не выдержит (с просчетом уровня шутеров).
Ну а во время простого полета - действительно, при большом удалении от корабля необходимо реже обновлять состояние корабля. Это все верно. Но я-то разбираю случай, когда большой замес идет.
Warstone : |
Guest :
При негарантированной передаче данных технику синхрокадров использовать нельзя.
Можно, я время забыл, каюсь. Если что-то пропустим - сплайны "замажут".
|
Тут еще раз подумал... Кажется - вы правы. При UDP нельзя использовать приращения.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Crush
285 EGP
  Рейтинг канала: 2(10) Репутация: 48 Сообщения: 1190 Откуда: Владивосток Зарегистрирован: 23.07.2003
 |
|
Действительно, после ЕВЕ с флотами по 1000 человек, масс пвп мне ни о чем не говорит. Но вообще вспоминая тот же фрил и БСГО, ну никак в зоне прямой видимости больше 20-30 кораблей не собиралось в бою (всякие показательные выступления перед камерой не в счет).
|
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
до 100 каждый день во флотах.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Guest
2075 EGP
              Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004
 |
|
Crush : |
Но вообще вспоминая тот же фрил и БСГО, ну никак в зоне прямой видимости больше 20-30 кораблей не собиралось в бою
|
Нельзя рассчитывать на то, что в теории не больше 30 кораблей будет. Нужно рассчитывать всегда на "былинный отказ" - что вся 1К кораблей соберётся в одном месте и захочет пострелять.
При этом сервис упасть не должен.
Вообще это совершенно дикая задача - разруливать лавинную нагрузку. В ряде случаев проще ограничить количество одновременных соединений с сервером.
добавлено спустя 24 секунды:
Яркий пример highload - облака и поисковые системы.
добавлено спустя 2 минуты:
Яркий пример былинного отказа - проблемы с Test Drive Unlimited 2: во время бета-тестирования всё было в норме, но после релиза туда ломанулся народ и сервера - сначала игровые, а потом и авторизации - рухнули.
добавлено спустя 2 минуты:
Warstone : |
Ну а во время простого полета - действительно, при большом удалении от корабля необходимо реже обновлять состояние корабля. Это все верно.
|
Это создаст крайне неприятный эффект "прыжков" цели на расстоянии. Даже если цель "в там" поразить нельзя - прыжки будут люто бешено раздражать, см. историю World of Tanks.
_________________ Трещит земля как пустой орех
Как щепка трещит броня
Последний раз редактировалось: Guest (20:56 21-02-2011), всего редактировалось 4 раз(а) |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Guest : |
Даже если цель "в там" поразить нельзя - прыжки будут люто бешено раздражать, см. историю World of Tanks.
|
Они через пол года про сплайны узнали. Это феил на самом деле.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
KrIM
90 EGP
 Рейтинг канала: 3(41) Репутация: 12 Сообщения: 200 Откуда: Russia, St.-Petersburg Зарегистрирован: 26.12.2009
 |
|
Warstone : |
Guest : |
Даже если цель "в там" поразить нельзя - прыжки будут люто бешено раздражать, см. историю World of Tanks.
|
Они через пол года про сплайны узнали. Это феил на самом деле.
|
Они, не они... у Варгеймингов покупной движок, исправить в нем неприятные "телепорты" смогли только после обращения к разработчикам оного. Двигло изначально было рассчитано на ближний бой, при удалении же объекта частота обновления информации о его позиции заметно снижалась. Изменить модель позиционирования вышло только сменив версию движка. Т.е. парни из Беларуси просто не смогли бы это сделать - ну кто им даст исходники чужого движка? ... Но знаешь, я иногда поигрываю, и складывается такое чувство, что программисты у них не очень то сильные...
_________________ Бесконечность и ещё дальше! (с) |
|
|
|
|
|
Канал Игры Мечты: «Расчет теоретического пика коннектов для UDP игр.» |
|