ПрограммированиеФорумСеть

Синхронизация физики по сети

Страницы: 1 2 3 4 5 Следующая »
#0
22:35, 2 авг 2023

Всем привет. Может кто, знает как прогнозировать поведения машин чтобы не было таких лагов?

https://www.youtube.com/watch?v=tUUYiN8YT5I&feature=youtu.be
https://www.youtube.com/watch?v=nh3VTm8pDzQ

#1
4:19, 3 авг 2023

https://gamedev.ru/code/forum/?id=256297&m=5281272#m3

#2
5:16, 3 авг 2023

https://gamedev.ru/code/forum/?id=271552

#3
8:25, 3 авг 2023

Нужна не интерполяция, а экстраполяция.
И линейной экстраполяции будет мало, для автогонок, нужна более сложная траектория. Типовая ситуация - две машины на большой скорости входят в поворот бок-о-бок, на расстоянии сантиметров друг от друга. Линейная экстраполяция покажет что они столкнулись, в то время как столкновения не было.
Учитывайте, что играть будут не только по локальной сети, но и при достаточно медленной доставке.

#4
12:41, 3 авг 2023

Zab
> две машины на большой скорости входят в поворот бок-о-бок, на расстоянии
> сантиметров друг от друга. Линейная экстраполяция покажет что они столкнулись,
> в то время как столкновения не было.
Блин, так умно задвинул, но если две машины едут на примерно одинаковой скорости и входят в поворот - то если дальняя от угла поворота машина не добавит в скорости (а этого на повороте не делают) - то столкновение будет с вероятностью близкой к единице.

А вообще что, считать коллизии объектов уже не модно? Нужно с фанфарами?

#5
13:14, 3 авг 2023

Где считать физику... Задержки по сети бывают до секунды, половина секунды - норма. Это очень заметно для автосимуляторов. Как минимум свою машину надо симулировать без таких задержек, т.е. на клиенте игры. На сервере тоже можно, но только для проверки и сверки, симуляцию на клиенте оно не отменяет. Мы не можем знать текущее положение прочих объектов, стимулируемых где-то далеко, нам доходят сведения об их состоянии некоторое время назад. Надо достаточно точно вычислить где они будут сейчас по той старой информации, это и есть экстраполяция. Если экстраполяция недостаточно качественная, будут прыжки.
Сеть у всех разная, от одних мы получаем информацию быстро, у других задержки близкие к катастрофическим. Полезным будет отрабатывать всех индивидуально, не сводя к общему знаменателю, чтобы от плохой сети страдал только тот, у кого она плохая, а не все, кому не посчастливилось попасть с ним в одну игру.

#6
14:49, 3 авг 2023

Zab
> Полезным будет отрабатывать всех индивидуально, не сводя к общему знаменателю, чтобы от плохой сети страдал только тот, у кого она плохая, а не все, кому не посчастливилось попасть с ним в одну игру.
Классический client side prediction обрабатывает всех унифицировано, а страдают только обладатели лагодрома.
На мой взгляд, проблемы вызывают только отклонения от унифицированного подхода, как часто делают в шутерах.

#7
15:12, 3 авг 2023

}:+()___ [Smile]
В шутерах часто усредняют, упрощают вычисления. Предполагают что задержки всегда одинаковые, к примеру. Но можно же сосчитать точно, обеспечив все данные, в симуляторах это имеет смысл, особенно в автомобильных. В авиасимуляторах точность не так важна, как бы странно это не казалось. В небе все на больших расстояниях друг от друга, неправдоподобное смещение на несколько метров никто не заметит, а на автомобиле заметят.

#8
23:23, 3 авг 2023

Zab
> Задержки по сети бывают до секунды, половина секунды - норма
Я кикаю на таком пинге, ибо это портит игру всем. Экстраполировать пинг 500 это задача из разряда фантастики. Играбельный пинг до 200, 250, который можно как-то предсказывать(и то точность будет не идеальная).
Гонки это достаточно линейные предсказания все таки.

FlashRoyal
> Всем привет. Может кто, знает как прогнозировать поведения машин чтобы не было
> таких лагов?
>
>
На видео прошло больше секунды, это обычный пролаг. Если таких много то следует кикать.
Если кто-то расскажет как предсказать резкий поворот на экстраполяции, я тоже с удовольствием послушаю. С учетом того, что мы не знаем куда поедет авто в ближайшую секунду)
Детерминированная физика тут работать не будет, потому что машиной управляет игрок.

#9
2:24, 4 авг 2023

Zab
> В шутерах часто усредняют, упрощают вычисления.
Наоборот, там для чистого client side prediction слишком резкие движения, поэтому врагов обычно не экстраполируют и показывают в серверном времени, а стреляют в прошлое. В случае чистого CSP каждый клиент сталкивается только со своей задержкой, на которую ему и надо интерполировать, а сервер, вообще, работает с одним глобальным временем, игнорируя задержки клиентов (это их проблемы, а не его). У лагучего клиента будут дикие глюки мира с телепортами врагов и полуслепым управлением, но его оппоненты будут видеть только сильно тупящего игрока.

ДобрыйБарин
> Если кто-то расскажет как предсказать резкий поворот на экстраполяции, я тоже с удовольствием послушаю.
В реальной физике не бывает резких поворотов, поэтому, как раз, во всяких гоночках предсказывать достаточно просто: считаем, что управление не будет меняться, и предсказываем позицию согласно физике. Если физика достаточно инерционная, никаких проблем не будет.

#10
15:13, 4 авг 2023

ДобрыйБарин
> Если кто-то расскажет как предсказать резкий поворот на экстраполяции, я тоже с
> удовольствием послушаю
Нейросетями, сделать маппинг прохождения карты и оптимальные пути, добавлять вес этих путей в предсказание и делать предикшн на основе соответствия\отклонения от оптимального маршрута. Достаточно того что бы карту прокатало 100-200 игроков и некая форма образуется сама. Ну это если общий какой-то фреймворк.

#11
15:41, 4 авг 2023

}:+()___ [Smile]
> Если физика достаточно инерционная, никаких проблем не будет.
Вопрос в том, как узнать что игрок нажал условную кнопку "влево", как на видеролике из первого топика, перед входом в резкий поворот. Если инпута не пришло, то и прогнозирование будет не верное. Экстраполяция сегодня не дает ресурсов чтобы прогнозировать в "долгую", чем больше прошло времени, тем больше отличается результат прогноза от референса.
Что касается веса путей маршрута, мне кажется, даже нейронка не предскажет правильного поведения, по той причине, что это будет лишь вероятность, игрок действительно может просто поехать в стену. Пока происходит делей мы не знаем никакой обновленной информации по плееру.
И речь скорее о том, что при частых подобных лагах, экстраполировать движения бОльшую часть времени, скорее всего, не получится правильно. А значит, лаги будут заметны. Вопрос не стоит чтобы скрыть единичные проявления, на видео машинки лагают почти весь таймлайн. При единичных пролагах я бы даже не заморачивался, и мне не кажется, что это было бы ошибкой.
Во многих играх есть счетчик ошибок, когда он перевешивает норму, игрока кикает автоматически. На пинге 500(что мы тут и обсуждаем на полном серьезе) играть в принципе невозможно адекватно, я не видел ни одной игры которая бы экстраполировала пинг 500 будучи в продакшене, играю преимущественно мультиплеерные проекты уже лет так 10. Нормальный пинг для мультиплеера в зоне 30-70. До 200-250 я лично предсказывал на клиентах путем линейной экстраполяции, дальше уже шли лаги которые невозможно скрыть. Применял техники плавного перемещения, прогноза, и прочее прочее, голая линейная экстраполяция тоже не будет эффективно работать с такими пингами. Поэтому я не представляю как предсказать 500 и более.

#12
18:53, 4 авг 2023

ДобрыйБарин
> это будет лишь вероятность
Так и эктраполяция - тоже вероятность. В конце концов можно ведь и комбинировать, связать одну с другим и получится хорошо. А если вам интересно что умеют делать боты openAI можете посмотреть как боты переигрывали чемпионов доты 2. Боты их просто выносят с счетом в районе 16-2. Вот что такое маппинг и поиск путей с развесовкой и векторами. Максимальная эффективность с минимальными затратами.

#13
0:40, 5 авг 2023

}:+()___ [Smile]
> В реальной физике не бывает резких поворотов, поэтому, как раз, во всяких
> гоночках предсказывать достаточно просто: считаем, что управление не будет
> меняться, и предсказываем позицию согласно физике. Если физика достаточно
> инерционная, никаких проблем не будет.
С одной стороны да. С другой стороны в гоночках достаточно часто бывают ситуации, когда скорость значительно меняется от управления за короткий промежуток времени. Например вхехал ты угол здания или нет зависит от того как именно ты рулил. Или например если в полёте выкрутить руль в сторону, то при приземлении может очень сильно и резко занести.
И можно было бы закрыть на это глаза, мол ситуация редкая и т.п., но т.к. это гоночки - то тут эта ситуация намного более критичная, чем в том же шутере.
Для гонок я считаю, что сервер должен частично "доверять" клиенту. Физика должна считаться на клиенте, а сервер просто проверять допустимый это рассчет или нет. Потому что на мой взгляд задержка положим в 200мс гораздо критичнее для гоночек, чем для какой-нибудь КС.

#14
8:08, 5 авг 2023

ДобрыйБарин
> Если инпута не пришло, то и прогнозирование будет не верное.
Если инпут задержался на 50 мс, но инерционность высокая, то игроки этого даже не заметят.
Если сетевой протокол неадекватный, а пакет выпал и не был послан повторно вовремя — это баг.
Если сеть просто лежала секунду — то тут уже ничего не поделаешь.

MrShoor
> Для гонок я считаю, что сервер должен частично "доверять" клиенту.
Непонятно, как это может помочь: если нужные данные физически не могут быть доставлены вовремя (ибо скорость света), то тут уже ничего не поделаешь, можно только физику более инерционной сделать (а углы — резиновыми).
А физика собственного автомобиля при стабильной сети без потерь пакетов и без взаимодействия с другими игроками, при условии корректной реализации CSP, будет одинаково идеальной и на клиенте и на сервере.

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумСеть

Тема в архиве.