Как стать автором
Обновить

Комментарии 20

Интересно, каково пересечение между VoIP-инженерами и netcode-инженерами? Проблематика по сути ведь одна и таже.
для voip существуют критерии качества и методы измерения, также куча своих специфических проблем (echo cancellation), плюс развитое signalling
Очень круто написано, спасибо.
Было интересно. Спасибо автору за статью.
Мы эти темы обсуждали 20 лет назад, играя в первый Call Of Duty по сетке 1мегабит. И, всё это было более играбельно чем тот же Battlefield 4 вышедший через 15 лет и на 100мегабитной линии! Про возросшие скорости железа смысла говорить нет, как и про то что скорость сигнала постоянна, т.е. пинг не может меняться, если это не по вине занятого канала. Тут скорее вопрос к прямости рук игроделов не только в неткоде но и в системе антилага, которая и экстраполирует в промежутки между синхронизацией.
Всё частично решилось бы игнорированием кривых игр. Как, в общем, и случилось с серией Battlefield. Даже новичок со временем начинает чувствовать косяки.
Сейчас тема с кривым неткодом уже не столь актуальна, особенно что многие играют в шутеры с геймпадов… ;) Более насущная проблема это проблема софта третей стороны — читов стало больше. Если 20 лет назад это считалось очень позорным, игрока изгоняли, сейчас многие просто считают это нормой 8-0. А ведь аимбот попадет чаще даже при плохом неткоде, и чтоб еще более качественно решить проблему — надо вернуть назад систему, когда пользователи ставили сервера и рулили всем от железа до банлиста.
P.S. если человек не пишет про предсказание, значит наболело и решил наконец разобраться — я лишь обьясняю что вопрос сложнее чем просто методы расчета, разработанные еще 20 лет назад. Другими словами: железо на порядок мощнее чем надо для решния проблемы, а интернет на столько «широкий», что дело уже совсем не в технической стороне, а в физически-экономическом плане: короче, разрабы халтурят потому что юзер не привередлив.
Вообще-то в серии Battlefield сетевой код один из самых технологичных начиная как раз с Battlefield 4 (но не с его релиза). В этой части разработчики упёрлись в ограничения традиционных методов коррекции задержек у разных игроков и решились на существенную переработку сетевого кода во время жизненного цикла игры.

На YouTube есть великолепный канал (на английском) Battle(non)sense, посвященный тестам сетевого кода. Где вы можете убедиться насколько был примитивен сетевой код в Call of Duty до новой Modern Warfare, но и в последней всё еще «не фонтан», в сравнении с той же Battlefield 5.
Если коротко, то в CoD по прежнему игроки с высокими задержками могут иметь преимущество в игре и портить всем игровой опыт. В Battlefield же специальный алгоритм корректирует регистрацию попаданий для игроков с высокими задержками, вынуждая испытывать неудобство только их (им требуется вести огонь наперёд), а игроки с отличным подключением взаимодействуют со всеми со своей точки зрения стабильно одинаково.

Кстати, для справки вам, серия Call of Duty не использовала баллистическую модель для огнестрельного оружия до того, как у них не появился режим «Королевской битвы». Они обходились простым методом hitscan, требования к сетевому коду у которого существенно меньше, чем у сетевой баллистической модели. Что уж и говорить о количестве игроков, размере карт, техники и разрушаемом окружении. Всё это требуется так же передавать по сети.

А успешность той или иной серии игр зависит от удачных или неудачных геймплейных решений. Сетевой код начинает волновать игроков скорее на киберспортивной сцене, нежели вечером на диване.
Батлнонсенс — делитант в этом плане. А BF4 использовал как раз отвратительную схему
если бы клиент мог послать сообщение «попадание» вместо сообщения «выстрел»

вплоть до BF5 и игры с BF3 по BF1 — имели отвратительный хитрег из-за разных характеристик железа и пингов, а также были раем для читеров, когда можно было убивать массово хоть аптечками не выходя с респауна. И только после тон фекалий вылитых на разработчиков и низкой популярности серии Battlefield было принято решение вернуться к более дорогой схеме серверных расчётов 20-летней давности.

Вы сравниваете разные вещи. У сетей есть два параметра - пропускная способность (в мегабитах в секунду) и задержка (в миллисекундах). Когда вы сравниваете игру по локалке и через интернет, надо помнить, что в интернете большие расстояния, на которых задержка из-за ограниченной скорости света может достигать сотен миллисекунд. Это не потому что разработчики бэттлфилд криворукие, а потому что вам можно играть через весь мир.

Когда вы сравниваете игру по локалке и через интернет, надо помнить, что в интернете большие расстояния, на которых задержка из-за ограниченной скорости света может достигать сотен миллисекунд.

Большая проблема для по настоящему массовых игр :(. Интересно, увидим ли мы когда-нибудь квантовые сети с пингом в 0, или проблема пинга никогда не будет решена из-за ограничения скорости света?
Иллюстрация выше представляет собой пример скриншота, сделанного на сервере сразу после того, как он подтвердил обращение. Красный хитбокс показывает позицию цели на клиенте, как это было некоторое время назад. Пока команда игрока (то есть, выстрел по цели) добиралась до сервера, цель продолжала двигаться влево. После того, как команда прибыла на сервер, для расчета факта попадания сервер восстанавливает позицию цели (синий хитбокс) на основе предполагаемого времени выполнения команды. Так сервер отслеживает траекторию выстрела и подтверждает или не подтверждает попадание.


Вы забываете про предсказание поведения. Т.е. не просто какая позиция была у игрока-мишени на стороне сервера, а какая ПРЕДСКАЗАННАЯ позиция была у игрока-мишени на стороне клиента.
В таком случае, у вас будет больше попаданий на стороне целящегося, и больше попаданий когда цель уже в укрытии.
Но тут как бы… попасть сложнее, чем убежать в укрытие.
В общем случае, или стрелок или мишень получают преимущество.
Джиттер — это колебания задержки, означающие, что пакеты отправляются и принимаются с разной скоростью. Это похоже на плохой frame pacing: то ваш пинг меняется с 20 миллисекунд до секунды, то с секунды до 90 миллисекунд, а затем возвращается к 30 миллисекундам, которые были когда-то уже давно.

Что? Что? Меня тут прям покоробило. Джиттер это не колебания задержки, это когда тактирующий сигнал плавает по частоте или фазе в следствии не совершенности схемы и генератора частоты. В случае со статьей там нет никакого джиттера, там обычный не стабильный пинг. Jitter может влиять только 1 физический уровень модели OSI. Пинг — этот ICMP пакеты — 3 сетевой уровень модели OSI. ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D1%81%D0%B5%D1%82%D0%B5%D0%B2%D1%8B%D1%85_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D0%BE%D0%B2

В статье смешали в одну кучу мух и котлеты…

Джи́ттер (англ. jitter — дрожание) или фазовое дрожание цифрового сигнала данных[1] — нежелательные фазовые или частотные отклонения передаваемого сигнала. Возникают вследствие нестабильности задающего генератора, изменений параметров линии передачи во времени и различной скорости распространения частотных составляющих одного и того же сигнала.
ru.wikipedia.org/wiki/%D0%94%D0%B6%D0%B8%D1%82%D1%82%D0%B5%D1%80
Это не единственное определение слова, и в качестве обозначения колебания пинга его тоже часто используют. Из той же Википедии:
In the context of computer networks, packet jitter or packet delay variation (PDV) is the variation in latency as measured in the variability over time of the end-to-end delay across a network.
Гугл переводчиком пользовались? Правильный термин на английском это packet delay variation. Джиттером называть колебания пинга не правильно в принципе. В случае пинга, это величина не являющейся константой. Джиттер возможен только относительно какого-то константного значения, который принят за эталон, в случае с генератором частоты на генераторе написана эта частота! И джиттер в принципе не превышает это эталонное значение и значительно ниже его, чего нет у пинга, и он может плавать в больших пределах. В случае пинга намного правильнее использовать термин плавающий пинг! Но самое главное по вашей ссылке Packet jitter написан, а не просто jitter. Разницу не заметили? И в самом начале там дано правильное определение и Packet jitter появляется только в середине. Если бы вы написали Packet jitter к вам не было бы вопросов, но вы написали Джиттер!

Все нормально, разработчики многопользовательских игр действительно называют это jitter. Никто не добавляет "packet", т.к. проблемы тактирующего сигнала лежат далеко за пределами стоящих перед нами задач.

А может это просто не правильный перевод? И в русском языке есть более подходящие термины, которые люди просто не знают?

Сорян, но нет:)
Да, можно сказать "packet delay variation", или "флуктуации пинга", и вас поймут. Но коммьюнити называет это jitter)

Можно назвать к примеру девиацией пинга, но все же значение джиттер в русской литературе другое.

У слова может быть несколько значений, зависящих от контекста. В данном случае именно так.

Вы серьёзно пытаетесь умничать используя абсолютно генерик слово jitter? А если бы там физику трясло, вы бы требовали Physics TOI resolution jitter?
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.