Battlefield сетевой код

Обновлено: 05.07.2024

Первое видео показывает текущее состояние сетевого кода. Видео говорит само за себя

Это видео наглядно демонстрирует, насколько плохо обстоят дела

Еще одно видео показывает, как пострадали от сетевого кода снайпера

Это видео показывает, как сетевого кода иногда значительно отстает при стрельбе из оружия. Попадания по врагу не регистрируются, но мгновение спустя он подтверждает убийство.


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

Текстовая версия:
В течение последнего полугодия DICE LA потратили много времени и усилий на доведение сетевого кода до такого состояния, когда мы можем просто наслаждаться игрой. Было добавлено много новых функций, а существующий код был оптимизирован и доработан.

Поиграв в бф4 сегодня на ПК, я могу с уверенностью сказать, что их работа очень действенно повлияла на игру. Впрочем, положение дел все еще не идеально. Время от времени со мной случаются очень странные смерти, а начисление урона по-прежнему остается проблемой. Правда, над этим работают. Главное — то, что теперь я могу попросту наслаждаться игрой больше чем полгода назад, до всех этих исправлений.

К счастью, DICE LA не остановились после первых нескольких месяцев развития тестовой среды для сообщества. Они до сих пор работают над исправлением и улучшением сетевого кода. Недавно в тестовом режиме вышло немаленькое обновление, призванное еще больше улучшить ощущения от игры.

Впрочем, эти изменения не просто понять, прочитав о них. «Добавлен конус высокой частоты сетевого обновления» — это забавно читать в патчноуте, но четко представить себе, что это такое, сложно.

На прошлой неделе мне выпала возможность пообщаться с одним из разработчиков, которых активно занят работой над изменениями сетевого кода. Как вы догадываетесь, я просто засыпал его вопросами. После этого приятного разговора я получил достаточно четкое представление о том, как сейчас работает сетевой код в тестовом режиме. Так как рано или поздно эти изменения войдут в публичную версию БФ4, я решил сделать это видео и пояснить, как сейчас работает сетевой код.

Давайте освежим память и вспомним основы. Сервер и клиент (которым могут быть как ПК так и консоль), общаются друг с другом. Это общение происходит с интервалами, которые отличаются для отправки данных и их получения. Эти интервалы также называют «тикрейтом». Итак, клиент отправляет серверу 30 обновлений в секунду. Эта частота фиксирована и не изменяется.

Получение обновлений от сервера происходит со значительно более низкой частотой — 10 раз в секунду. То есть одно обновление за 100 миллисекунд. Можно представить, что ваш клиент смотрит наблюдает за остальными игроками в видео с частотой 10 кадров в секунду. То есть это больше похоже на слайдшоу, чем на плавную анимацию. Затем клиент восполняет пробелы между полученными обновлениями, пытаясь предсказать, что делают остальные игроки. Благодаря этому на наших экранах мы видим плавные движения.

Проблема с подобной частотой кадров заключается в том, что картинка, которую вы в данный момент видите, уже достаточно устарела. Это особенно актуально для плотного боя в закрытом пространстве, где часто встречаются расстройства типа убийств за углом. Дело в том, что на экране стрелявшего вы еще не скрылись за углом. Впрочем, и на большой дистанции порой непросто попасть в движущуюся цель — которая может быть не там, где вы ее наблюдаете.

Другая проблема заключается в том, что при 10 обновлениях в секунду любое оружие со скорострельностью выше шестисот выстрелов в минуту стреляет быстрее, чем может обновиться игра. То есть обновлений проходит меньше, чем выпущено пуль. Таким образом происходит ситуация, когда за один кадр вы получаете урон несколько раз — и это очень расстраивает.

Поэтому DICE LA внедрили в Battlefield 4 поддержку высокой частоты сетевого обновления. Таким образом игра может получать обновления 10, 15, 20 и 30 раз в секунду. Основываясь на показателях сетевого соединения, игра определит, какое значение использовать. Вы можете узнать, какая частота используется в настоящий момент, взглянув на оверлей качества сети. Если вы видите цифру 30, то ваш клиент получает от сервера 30 обновлений в секунду. Соответственно, если в графе указана цифра 20, то 20 раз в секунду и так далее. Тем не менее, отправляются данные всегда 30 раз в секунду. Это фиксированное и неизменяемое значение.

Теперь, когда мы освежили память, пора разобраться, где именно действует высокая частота сетевого обновления — это принцип недавно изменился в тестовой ветке Battlefield.

Это — разведчик армии США. Перед ним в виде полусферы действует высокая частота сетевого обновления с радиусом 40 метров. Кроме этого, перед бойцом простирается конус высокой частоты сетевого обновления, направленный в соответствии с направлением обзора. Если внутри зеленой зоны появится враг, то данные о его положении и ориентации будут приниматься с максимально возможной частотой, узнать которую можно в оверлее. В данном случае это 30 обновлений действий врага в секунду.

Кроме того, внутри этого конуса действуют и другие частоты. На расстоянии до 100 метров конус поддерживает максимальную частоту показа позиции и ориентации положения врага. За стометровой отметкой начинается линейный спад частоты сетевого обновления. На отметке в 300 метров конус заканчивается. Это означает, что для территорий снаружи конуса и полусферы мы получаем обновления положения и ориентации врага 10 раз в секунду. Это действительно полезно для перестрелок на больших дистанциях, но разработчики этим не ограничились.

Когда вы вскидываете оружие для прицеливания, то замечаете, что поле вашего обзора сужается, отсекая зоны слева и справа, а вы больше сконцентрированы на том, что расположено на удалении. В этот момент происходит увеличение длины конуса, на расстоянии до 100 метров используется максимальная частота показа позиции и ориентации положения врага. Но на трехсотметровой отметке конус не заканчивается, простираясь за нее. Я не могу сказать вам точное расстояние, потому что масштабирование рассчитывается при помощи множителя, который (если я правильно понял) зависит от угла обзора. Таким образом, конус у разных игроков может слегка отличаться в зависимости от выбранного в настройках угла обзора.

Все это прекрасно звучит в теории — но работает ли на практике? Чтобы выяснить это, я провел несколько тестов, в ходе которых замерил задержку передачи данных положения и ориентации врага на расстоянии 125 и 225 метров. В публичной версии БФ4 на расстоянии 125 метров мне приходится ждать 216 мс, прежде чем я увижу изменение положения врага. В CTE эта задержка уменьшается до 149 мс — то есть благодаря конусу высокой частоты сетевого обновления ускорение составляет 32%. Однако на расстоянии 225 метров все становится еще интереснее. В публичной версии мне пришлось ждать обновления положения врага 300 мс. А в СТЕ задержка составила 150 мс. Это быстрее, чем на расстоянии в 125 метров в публичной версии.

Таким образом, конус высокой частоты сетевого обновления определенно работает. Это значит, что перестрелки на больших расстояниях начнут приносить больше удовольствия — ведь то, что вы видите на экране, теперь гораздо более актуально и точно.

Мы рассмотрели зону высокой частоты сети для пехоты, внутри которой вы получаете информацию о положении и ориентации врага максимально быстро. Я часто повторяю эту фразу потому, все сказанное верно только для команды врага. Позиция и ориентация союзников не обновляется чаще — вне зависимости, находятся они внутри конуса или снаружи, частота обновления составляет 10 Гц. Обычно это не является проблемой — в них нет нужды стрелять.

До сих пор я говорил про обновления положения и ориентации врага. Но что происходит, когда стреляю не я, а в меня? Как влияют зоны высокой частоты сети на то, как я получаю урон?
Скорость получения мной урона не зависит от зоны высокой частоты. Не имеет значения, находится стреляющий по мне внутри зоны или снаружи. Урон я буду получать на самой высокой частоте, вне зависимости от его положения на карте. Поэтому если в 150 метрах справа от меня есть враг, которому удается попасть в меня четырьмя первыми пулями из автомата, то я получу урон с максимально возможной частотой — в моем случае 30 Гц.

Прежде чем мы посмотрим на ширину канала, которая необходима для частоты сети в 30 Гц, давайте пройдемся по изменениям, затронувшим технику. Перед нами танк с полусферой высокой частоты сети радиусом 20 метров. Кроме того, позади него есть вторая полусфера радиусом 10 метров. Она нужна затем, чтобы корректнее обрабатывать коллизии. Помимо этого, существует такой же, как у пехоты, конус. Прильнуть к прицелу в танке нельзя, однако увеличительная опция точно таким же образом изменит конус. Таким образом функционал конуса тот же, только нужно использовать увеличительную оптику.

Так что же у нас с требованиями к ширине канала для BF4 при использовании частоты обновления сети 30 Гц? Во время тестирования я два часа играл на полном сервере на 64 человека в режиме «Большой Захват», логируя трафик TCP и UDP между процессом bf4 и сервером. По итогам этих двух часов средняя скорость загрузки составляла 16 кБ/с и пиками до 20,29 КБ/с. Отправка производилась со скоростью 4 кБ/с с пиковыми значениями 5,4 кБ/с.

После этого я сыграл два часа на полном сервере на 64 человека в режиме «Большой Захват» в тестовой версии и частотой обновления 30 Гц. Там загрузка происходила со скоростью 11 кБ/с (пики до 14 кБ/с). Скорость отправки была 2,7 КБ/с с пиковыми значениями 4,44 кБ/с. Это отчетливое снижение требуемой полосы пропускания, которая требуется для игры в BF4 с максимальной частотой сети 30 Гц. Это обрадует многих игроков со стабильным интернет-соединением, но с небольшой квотой на трафик.

Может ли это открыть дверь для более высоких частот, чем 30 Гц? Надеюсь, однажды это случится.

Вот такие изменения внесли DICE LA в тестовую версию BF4. Вскоре эти правки войдут в публичную версию игры. Если вы играете на консоли, то вполне в праве ждать этих изменений: разработчики заверили меня, что правки затронут все платформы.

Читайте также: