kipar
> 100мбит
Не сходится, ты не описал как в 80 раз сократить размер контролзов.
kkolyan
> если детерминизм, то зачем?
Я уже говорил, раза 3: разные тайминги.
Ошибка накапливается. В итоге, ты у себя видишь слегка фантомного клиента.
А инпут приходит от реального.
В реальном мире (клиент-нициатор инпута) он допустим перепрыгнул через яму и бежит дальше.
А в твоём фантомном, он вовремя не прыгнул, свалился в яму и умер.
Der FlugSimulator
ты точно понимаешь что такое детерминизм? в детерминированной системе нет никакого накопления расхождения. из идентичного состояния одни и те же действия у разных игроков приводят к идентичному состоянию. нет полагания на тайминги. все игроки апдейтят свой мир идентичным тикам, а не DeltaTime. и инпуты строго привязаны к своим тикам. при этом FPS симуляции у всех ограничивается по самому медленному игроку, разумеется.
kkolyan
> при этом FPS симуляции у всех ограничивается по самому медленному игроку,
> разумеется.
Хахаха, я под столом!
Один игрок с 1 фпс уничтожит весь твой бизнес
kkolyan
> при этом FPS симуляции у всех ограничивается по самому медленному игроку,
> разумеется.
Хороший план, при онлайне в пару тысяч все будет ждать пока у владельцев архаичных вычислительных машин разогреются лампы?)
А конкуренты просто будут счастливы от такого подгона, не нужно будет закупать ботнеты для ддоса. Достаточно приоритет процессу игры скинуть на low
Вий
Не хочется портить твое торжество, но в чем проблема отключать игрока, который не вписывается в тайминг других игроков?
kkolyan
> Не хочется портить твое торжество, но в чем проблема отключать игрока, который
> не вписывается в тайминг других игроков?
А сколько нужно ждать до вынесения вердикта что пора его отключать? А что если он будет секунду лагать, секунду норм работать?)
Mephistopheles
1. убедиться что игра способна играться на машинах указанных в минимальных системных требованиях без просадки FPS
2. отделять шаг симуляции от шага рендеринга, чтобы игра могла красиво рендериться при относительно низкой частоте симуляции. (если по какой-то причине это еще не сделано)
3. дисконнектить тех кто не вписывается
4. тюнить частоту симуляции и партиционирование игроков, чтобы минимизировать п3.
Блин мужики - Вы бы попробовали что то сделать.
Как шкуру не убитого медведя делите.
А если так, ... нет, а если вот так, а если у тебя 1000х1000 биться будут, а если их больше будет, а давайте трафик посчитаем ...
Тут бы человек 500 играло - уже счастье.
В равной степени может получиться и что 20к держать нормально будет, и что 50 игроков уже лагать будут.
kkolyan
> 3. дисконнектить тех кто не вписывается
Знаешь какое дело... громче кричат те у кого игра лагает и вылетает, чем те у кого все норм.
А игра теряет продажи ниже 90% почти на порядок.
Mephistopheles
А хотя, вообще-то режим "все ждут медленного" прям уж необходим только для p2p как в Factorio. Если все через сервер идет, то медленных можно ущемлять мягко, пропуская их инпуты и обновляя мир с задержкой.
Mephistopheles
> Знаешь какое дело... громче кричат те у кого игра лагает и вылетает, чем те у кого все норм.
> А игра теряет продажи ниже 90% почти на порядок.
дак если игрок не успевает прогревать лампы - у него будут "ньюансы" и на другой архитектуре, из-за которых по этой логике он точно так же пойдет минусить игру.
UPDATE: но вообще да, в локстеп-варианте медленные игроки будут ущемлены больше чем при "обычной" архитектуре и, возможно, это шоустоппер.
563
что сделать? тема изначально исключительно про поговорить.
kkolyan
раньше в старых играх была настройка "плохая сеть" включая которую сервер с клиентом переходил на упрощенный протокол и более редкое обновление стейтов. Да и вообще резалось все что не сильно то нужно для геймплея.
Но интернет стал быстрый, прогеры ленивые, а манагеры не терпеливые. И такой настройки больше не встретить)
Ну а настройку графики "лижбы работало" тоже можно добавить.
563
> если так, ... нет, а если вот так
у всех противоречивый опыт, у кого-то вычисления с плавающей точкой детерминированы
у меня на сервере gcc, на клиенте cl и все стремительно расходится
kkolyan
> все игроки апдейтят свой мир идентичным тикам, а не DeltaTime.
Ну да, физику обычно считают по фиксированному DeltaTime, а не по экранной частоте.
Однако, ты физически не можешь на разных машинах выдержать этот DeltaTime одинаковым, без синхронизации.
Я же писал, в #71, даже на одной машине, аппаратный таймер плавает, std::chrono::high_resolution_clock будет давать физически разное время.
Погрешность небольшая, но она есть, и достаточна для накопления ошибки.
|----------|----------| Real time clock ticks |--------|--------| Player1 ticks |-----------|------------| Player2 ticks
И уж тем более, они не будут синхронизированы с инпутами.
Der FlugSimulator
Еще раз, в детерминированной системе нет полагания на тайминги (#107).
Для определения величины на которую персонаж сдвигается не используется никакой std::chrono::high_resolution_clock.
DeltaTime берется один и тот же (из константы, например) на всех тачках.