ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» Расчет теоретического пика коннектов для UDP игр. | страница 2 |
|
|
|
Канал Игры Мечты: «Расчет теоретического пика коннектов для UDP игр.» |
|
|
Guest
2075 EGP
              Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004
 |
|
Всем надо где-то набираться опыта, Варгеймовцам в том числе - нигде не учат делать игровые движки. Давайте назад к передаче данных.
_________________ Трещит земля как пустой орех
Как щепка трещит броня |
|
|
Aerton
70 EGP
 Рейтинг канала: 1(8) Репутация: 4 Сообщения: 67 Откуда: Новосибирск Зарегистрирован: 20.08.2004
 |
|
Во-первых, размер маленького пакета * кол-во пакетов = пропускная способность - это неверное уравнение. Маленькими пакетами средняя скорость всегда будет ниже. Во-первых, чем меньше пакет, тем больший процент занимают накладные расходы на заголовки UDP, IP (+Ethernet или через что оно там передаётся). К тому же, например в случае Ethernet есть ограничение на минимальный размер пакета в 64 байта. Кроме того, между посылкой пакетов должна выдерживаться некоторая пауза. Так что если по локалке посылать по 48 байт, скорость будет в несколько раз ниже, чем если посылать пакеты максимального размера.
Кроме того, действительно незачем посылать данные каждый кадр.
Вообще, это очень сильно зависит от того, с какой скоростью перемещаются объекты. Причём значение имеет скорость относительно габаритов объекта. Медленные тяжёлые махины изменяют курс очень долго - их координаты можно передавать в 20 раз реже, чем данные про маленькие, юркие ракеты, которые каждый кадр пролетают расстояние в несколько своих корпусов.
Во-вторых, самое важное - это не чтобы все данные точно соответсвовали друг другу, а чтобы у игрока было впечатление плавной игры без лагов. Если этого добиться честным путём нельзя - значит придётся прибегать к фокусам.
Например, что самое важное для игрока? Это его КА и КА, в который он целится. Если союзник, который тащится где-то за спиной окажется на несколько метров не в том месте, это не беда (особенно, если он в камеру вообще не попадает). А вот цель немного не в том месте - это уже чревато промахом, особенно раздражающим, если на мониторе игрока выстрел был произведён абсолютно точно в цель.
Про интерполяцию и компенсацию лагов стрельбы очень хорошо написано на сайте Valve. http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
double в сетевых пакетах, - это колоссальная трата бит на ветер. Большая часть такого числа в условиях реальной игры либо никогда не меняется, либо содержит совершенно ненужную точность. Начать с 11 бит под порядок - это позволяет хранить данные в огромном диапазоне, но координаты кораблей изменяются в достаточно ограниченном пределе. Кроме того, точность как в double, так и во float, распределена неравномерно - чем дальше от 0, тем хуже точность. Гораздо лучше использовать int. Например, в 20 бит влезет координата в диапазоне 100км с точностью 10см. Причём это только для передачи по сети - если в движке используется float/double, то преобразование делается в одно умножение.
Кроме координат, надо ещё передавать информацию и о событиях, например что такой-то корабль выпустил ракеты (т.е. создал новые игровые объекты, которые возможно тоже надо синхронизировать по сети). Или что кто-то взорвался. Эти данные уже нельзя просто передавать по UDP - надо как-то гарантировать их доставку.
Когда я делал сеть (в одной не-ММО игре), я в каждом пакете делал две части - одна содержала координаты, которые можно было потерять, вторая - данные о подобные собитиях, доставка которых гарантировалась механизмом, похожим на то, как это сделано в TCP.
Поэтому вопрос сформулирован неправильно. Надо брать какой-то лимит (128 кбит - это явно слишком много для игры про космолёты) и когда передача всех данных будет готова его превысить, то надо выстраивать приоритеты, и жертвуя чем-то неважным, вписываться в лимит. Ещё раз повторю основную мысль - главное, какое будет впечатление у игрока. Если будут мелкие расхождения, никто на них не обратит внимание, пока то, что непосредственно касается игрока, работает как надо.
|
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Aerton : |
Во-первых, размер маленького пакета * кол-во пакетов = пропускная способность - это неверное уравнение. Маленькими пакетами средняя скорость всегда будет ниже. Во-первых, чем меньше пакет, тем больший процент занимают накладные расходы на заголовки UDP, IP (+Ethernet или через что оно там передаётся). К тому же, например в случае Ethernet есть ограничение на минимальный размер пакета в 64 байта. Кроме того, между посылкой пакетов должна выдерживаться некоторая пауза. Так что если по локалке посылать по 48 байт, скорость будет в несколько раз ниже, чем если посылать пакеты максимального размера.
|
Спасибо Кэп. Дальше почитайте... Считалось что одновременно будет посылаться слепок мира, возможно разбитый на части.
Aerton : |
Вообще, это очень сильно зависит от того, с какой скоростью перемещаются объекты. Причём значение имеет скорость относительно габаритов объекта. Медленные тяжёлые махины изменяют курс очень долго - их координаты можно передавать в 20 раз реже, чем данные про маленькие, юркие ракеты, которые каждый кадр пролетают расстояние в несколько своих корпусов.
|
Это интересное замечание. Спасибо.
Aerton : |
Это его КА и КА, в который он целится.
|
И которые в него целятся.
Aerton : |
Про интерполяцию и компенсацию лагов стрельбы очень хорошо написано на сайте Valve.
|
Мы тут все туда ночевать ходим. Я серьезно.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Kann
64 EGP
 Рейтинг канала: 3(45) Репутация: 7 Сообщения: 232 Откуда: Москва Зарегистрирован: 11.04.2008
 |
|
мне интересно как вы обеспечите лагокомпенсацию в масштабах ММО, у валве этот текст написан для КС.... хранить слепки мира до секунды и сдвигать потом объекты на величину лага, по моему несколько проблематично с учетом количества игроков, так же надо учитывать то что используется скажем так мгновенные попадания по цели, а если у нас космос где например плазменный заряд имеет время полета до цели ?
|
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
Aerton : |
скорость будет в несколько раз ниже, чем если посылать пакеты максимального размера
|
вот тут есть небольшая загводка, теоретически размер UDP пакета ничем не ограничен, хоть 64к посылай, а на практике есть магическое число в 576 байт
_________________ This is what you get ...
(c) Radiohead |
|
|
Aerton
70 EGP
 Рейтинг канала: 1(8) Репутация: 4 Сообщения: 67 Откуда: Новосибирск Зарегистрирован: 20.08.2004
 |
|
Warstone : |
Aerton : |
Это его КА и КА, в который он целится.
|
И которые в него целятся.
|
А зачем? Мы может вообще его не видим. Даже если и видим, то чаще всего всё равно издали не очень-то понятно, как он там целится. Тогда уж куда интереснее например, ракеты, которы уже летят в нас, особенно самонаводящиеся.
Kann : |
мне интересно как вы обеспечите лагокомпенсацию в масштабах ММО,
|
Накладные расходы на один объект возрастают не слишком сильно, да и хранить надо не слепки всего мира, а только координаты двигающихся объектов. "Неспящих" по терминологии физических движков.
Kann : |
надо учитывать то что используется скажем так мгновенные попадания по цели, а если у нас космос где например плазменный заряд имеет время полета до цели ?
|
Да, для медленных снарядов это вообще неприменимо - надо использовать другие решения.
Т.к. все подобные приёмы работают на создание иллюзии у игрока, то они должны расчитываться из специфики каждой конкретной игры. Если игра по динамике не похожа на сокростной шутер, где важную роль играют хедшоты, то надо придумать что-то другое. Для той же EVE эта техника не даст ничего.
Например, я считал физику по тому, как её видит сервер, а клиентам координаты подлетающих (самнонаводящихся) ракет шли как относительные от стрелка и от цели. На клиенте пропорционально расстоянию брались веса для обоих и так отображалось. В результате, смотрелось нормально, даже если для стрелока или цели позиция была рассинхронизированна.
Sh.Tac. : |
от тут есть небольшая загводка, теоретически размер UDP пакета ничем не ограничен,
|
Если его посылать не силой мысли, а по реальным проводам, то упирается в лимиты нижележащих протоколов. чаще всего это ethernet, через котороый всё равно проходит на каком-то участке пути до пользователя.
Sh.Tac. : |
а на практике есть магическое число в 576 байт
|
А вот про него, я честно говоря, совсем забыл, как про сугобо теоретическое Интересно, где такое вылезит на практике? Учитывая, что лимит даже не на уровне железа, в каких системах из этого тысячелетия он может быть?
|
|
|
KAV13
88 EGP
 Репутация: 13 Сообщения: 99 Откуда: :адуктО Зарегистрирован: 03.03.2010
 |
|
Цитата: |
Интересно, где такое вылезит на практике? Учитывая, что лимит даже не на уровне железа, в каких системах из этого тысячелетия он может быть?
|
Включая 2К точно есть, ХР - не знаю, к моменту ее широкого распространения успел уволиться из той конторы. Насчет 576 байт тоже не знал, эмпирическим путем выставил ограничение 512 байт.
БОльшие объемы отправлял другим методом, но в данном случае он неактуален, задержка в полсекунды-секунду никого не интересовала.
Ну а на практике - пакет просто не приходит. На каком этапе режется - тоже особо не интересовался, тот софт небольшие задержки вполне допускал.
|
|
|
Delta_Q
245 EGP
  Рейтинг канала: 2(12) Репутация: 46 Сообщения: 1722 Откуда: Русь Зарегистрирован: 07.02.2001
 |
|
Из своего опыта работы с сетями могу сказать следующее:
Каждый кадр передавать нет смыла. Иногда банально проще передавать 1-5 данных в секунду. При такой скорости потока линейное интерполяция более менее приемлема.
Сложность возникает когда надо очень много объектов. Естественно для этого посылают данные реже чем 1 раз в 1 секунду. Но тогда возникает уже сильная погрешность и появляется эффект (вы иногда его видели когда играли в сетевые игры)вы видите что объект как бы дёргается рывками.
В шутерах это сложно решит ибо там высокая динамика движения, но для задач где динамика движения является более инерциальной то это решается так называемым способом "Сплайн интерполяцией". Идея проста система математически как бы предсказывает где будет находится объект. при таком подходе уже можно передавать данные 1 раз в 2 секунды и более. Всё зависит от динамики.
Я встречал библиотеку сетевую в которую уже были встроены мат.функции таких интерполяций. Если таких нет то можно написать самим.
_________________ Двенадцатый пилот.
In nomine patris, et filii, et spiritus sanctis.
Последний раз редактировалось: Delta_Q (18:03 27-04-2011), всего редактировалось 1 раз |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Как рассказывал мне мой лид - в CryEngine2 (который он тогда делал) сетевой двиг работает без предсказаний. Но в нем реализована техника сжатия. То есть передается протокол в xml виде, в котором описаны все типы пакетов что будут передаваться по сети (будь то статус игрока или еще что-то) и содержание этих пакетов. Содержание - это размер и характер данных. Например если характер данных - мировые координаты - сжимать их не нужно. А если количество здоровья - то они лежат в границе (0..100).
А вообще - юзайте какой-нить RakNet
_________________ MOV topka, C++ |
|
|
3d.Maxuz
1032 EGP
    Рейтинг канала: 3(28) Репутация: 47 Сообщения: 6023 Откуда: Краматорск, Донецкая область! Зарегистрирован: 28.09.2004
 |
|
Есть вопрос по местной специфике.
Игра - Фрилансер
Ситуация: по утверждению некоторой группы пилотов, наблюдается определённая взаимосвязь между включенной/отключенной вертикальной синхронизацией и отображением положения корабля игрока у других игроков в онлайне. Конкретно, при отключении всинк, ОС Вин7 (только! в ХП не проявляется), и определённых видеодрайверах (не всех и вроде как только для нвидии) в ситуации если fps выходит на значение 180, корабль игрока начинает зверски прыгать по экрану (или же второй вариант мелко дрожать при движении, т.е. теже рывки, только очень короткие) других игроков при pvp. Т.е. полный эфект лагов. При этом конект абсолютно нормальный (пинг, трейс, флюкт, потери и прочее). И у этого игрока на экране всё нормально.
Вопрос - реально ли это.
Т.е. я понимаю, если бы это проявлялось у всех и всегда при 180 fps, но тут не всё так просто. Или как?
_________________ Гоп-стоп, мы подошли из-за угла,
Гоп-стоп... |
|
|
Guest
2075 EGP
              Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004
 |
|
3d.Maxuz : |
Вопрос - реально ли это.
|
Потенциально - реально всё.
На практике - зависит. При отрубленном vsync и асинхронной отправке сетевых пакетов может быть забивание одного потока другим.
Впрочем, это крайне маловероятно, а вот вариант полной синхронизации по апдейту, т.е. обработка всего с частотой draw (вспомнить год выхода Фрила) - может.
Я не знаю, есть ли ограничение в протоколе по количеству пакетов, отправляемых в секунду, но 180 пакетов могут и не пролазить. Часть теряем, часть плавает во времени (задержка разная) - вот вам и лаги или их имитация
добавлено спустя 44 секунды:
А у игрока всё нормально, т.к. ему приходят пакеты с нормальной частотой.
_________________ Трещит земля как пустой орех
Как щепка трещит броня
Последний раз редактировалось: Guest (14:02 28-04-2011), всего редактировалось 1 раз |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
жесть, я думал они там головастые ребята
а так напоминает банальное вотЪ
_________________ This is what you get ...
(c) Radiohead |
|
|
Guest
2075 EGP
              Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004
 |
|
Sh.Tac. : |
жесть, я думал они там головастые ребята
|
Тогда многопоточности ещё не было, насколько я помню
_________________ Трещит земля как пустой орех
Как щепка трещит броня |
|
|
3d.Maxuz
1032 EGP
    Рейтинг канала: 3(28) Репутация: 47 Сообщения: 6023 Откуда: Краматорск, Донецкая область! Зарегистрирован: 28.09.2004
 |
|
Guest : |
а вот вариант полной синхронизации по апдейту, т.е. обработка всего с частотой draw (вспомнить год выхода Фрила) - может.
Я не знаю, есть ли ограничение в протоколе по количеству пакетов, отправляемых в секунду, но 180 пакетов могут и не пролазить. Часть теряем, часть плавает во времени (задержка разная) - вот вам и лаги или их имитация
|
Это логичный вариант, но прикол в том почему оно проявляется только в Вин7 и только на некоторых дровах и карточках??? В том и загвоздка, что часть народа утверждает, что это 100% проверенный факт, а другая часть говорит "вот у меня так и всё нормально".
Т.е. либо это реально глюк фрила, либо что-то постороннее.
Как вариант, может ли Вин7 в отличие от остальных, специфически работать с пакетами по протоколу, делая как ты написал?
_________________ Гоп-стоп, мы подошли из-за угла,
Гоп-стоп... |
|
|
Guest
2075 EGP
              Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004
 |
|
3d.Maxuz : |
Как вариант, может ли Вин7 в отличие от остальных, специфически работать с пакетами по протоколу, делая как ты написал?
|
Я не знаю, насколько глубоко переписано ядро Вин7 по сравнению с другими. Вот введение слоя полной абстракции программной части от драйвера для direct- устройств начиная с Висты - вот это доставляло мощно.
Может быть что-то такое есть и в Семёрке.
Лучше всего пользовать vsync и не палить карточку.
_________________ Трещит земля как пустой орех
Как щепка трещит броня |
|
|
3d.Maxuz
1032 EGP
    Рейтинг канала: 3(28) Репутация: 47 Сообщения: 6023 Откуда: Краматорск, Донецкая область! Зарегистрирован: 28.09.2004
 |
|
Guest : |
Лучше всего пользовать vsync и не палить карточку.
|
Это и есть камень холивара. Во фриле курсор програмный, т.е. условно чем выше fps тем выше скорость реакции, что даёт возможность более эффективно вести бой. А всинк рубит частоту на 75-80.
Итого с одной стороны преимущество в скорости, с другой какбы "защитные лаги".
_________________ Гоп-стоп, мы подошли из-за угла,
Гоп-стоп... |
|
|
Shirson
1605 EGP
           Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002
 |
|
3d.Maxuz : |
Это и есть камень холивара. Во фриле курсор програмный, т.е. условно чем выше fps тем выше скорость реакции
|
Речь про мышиный курсор? Если да, то как это работает? Всмысле, данные с мышки откуда берутся в программе?
Я просто пытаюсь представить, как тут курсор замешан
_________________ У меня бисера не доxеpа. |
|
|
3d.Maxuz
1032 EGP
    Рейтинг канала: 3(28) Репутация: 47 Сообщения: 6023 Откуда: Краматорск, Донецкая область! Зарегистрирован: 28.09.2004
 |
|
Во Фриле мышиный курсор=прицел как в шутерах. Т.е. чем больше fps, тем быстрее и чётче он реагирует на реальное движение мыши, соответсвенно повышается точность огня и прочее. И всё бы ничего, еслибы небыло таких вот подводных камней непонятного происхождения
Я не знаю как там это программно работает, но факт есть, при маленьких fps курсор заторможен. На 20 это вообще ппц.
Вот где-то здесь чуть более подробно.
http://www.elite-games.ru/conference/viewtopic.php?p=2567028#2567028
А тут развитие темы
http://www.elite-games.ru/conference/viewtopic.php?p=2606178#2606178
_________________ Гоп-стоп, мы подошли из-за угла,
Гоп-стоп... |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Адаффайте оффтопик уберем из темы?
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
|
|
|
Канал Игры Мечты: «Расчет теоретического пика коннектов для UDP игр.» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: Мы же не звери. Сначала зарэжем, потом четвертуем, потом утопим...или сначала утопить? Ну ладно, там разберемся. (Loki)
|
» Расчет теоретического пика коннектов для UDP игр. | страница 2 |
|