Переведено специально для сообщества Halo Russian Community.
Автор: Ричард Уотсон
Всем привет, я Ричард Уотсон, Главный Инженер команды Песочницы (Sandbox) в 343. В последнее время было много дискуссий и отзывов, касательно онлайн составляющей в мультиплеере Halo Infinite, включая примеры проблем и спекуляций вокруг возможных причин и решений данных проблем.
Команда 343 и я, хотим сделать данную дискуссию открытой и продолжать обсуждать с вами все, что связано с сетевой составляющей Halo Infinite и, с данными мыслями, я хотел бы:
- Пройтись по некоторым привычным сетевым проблемам, которые люди испытывают и объяснить, почему они происходят
- Обсудить наши планы по смягчению данных проблем
- Пройтись по самым часто задаваемым вопросам и разобраться с возможным недопониманием о том, как все работает.
БЫТЬ ЗАСТРЕЛЕНЫМ/ЗАСТРЕЛИТЬ ЗА УГЛОМ
ПРОБЛЕМА:
Данная проблема является самой частой, в плане отзывов, поэтому давайте я попробую все объяснить. Фундаментально, проблема связана с компенсацией задержки. Компенсация задержки это то, как мы справляемся с фактом задержки между действиями на вашей машине, передачей информации на сервера, а затем сравнения результатов с вашим оппонентом.
Нам необходимо было предоставить каждому игроку лучший возможный игровой опыт. Для того, чтобы предоставить данный опыт, мы должны быть уверены, что сервер справится с работой с многими машинами, которые работают на разных задержках. Представьте, что сервер - это арбитр множества параллельных вселенных и ему приходится работать со всем, что происходит на них, чтобы предоставить игрокам максимально логичную картину.
Существует множество способов, как можно решить проблему с компенсацией задержки, но в Halo мы отдали предпочтение стрелку. То есть, практически, стреляющий получает приоритет для сервера. Если игрок выстрелил и видит, что попадает в цель, то наша система делает все возможное, чтобы обеспечить данное попадание. Но все же, как это работает?
Когда стреляющий делает выстрел, мы сначала симулируем это локально. Клиент стрелка создает линию, которая идет в направлении, куда игрок хотел выстрелить. То есть по факту, локально, стрелок должен увидеть все эффекты нажатия на курок: саму пулю, линию за пулей и факт попадания. В этот же момент на сервера отправляется сообщение о том, что стрелок нажал на курок.
Когда сервер получает сообщение о том, что выстрел произошел, он его выполнит. Если сервер просто выстрел пулей в ту сторону, что и стрелок, здесь будет большая проблема. Учитывая, что с момента нажатия на кнопку стрельбы и отправки сообщения от машины на сервер прошло часть времени, цель уже не будет в том же месте, что была на момент начала стрельбы. Это привело бы к проблеме, когда стрелок должен помимо концентрации на цели, учитывать возможную задержку между ним и сервером.
Для того, чтобы избежать данной проблемы, сервер частично перематывает время назад, и устанавливает все элементы на свои места в момент стрельбы. Это обеспечивает тот момент, что игрок видит то, что происходит на сервере. Затем сервер отправляет результаты стрельбы на все виды клиентов (ПК и Xbox)
Если выстрел попадает в цель, то стрелявший видит хит-маркеры, а цель либо получает урон, либо умирает. Но доставка сообщения на обе машины занимает время, в итоге получается задержка в сообщениях.
Именно эта задержка ведет к тем моментам, когда вы можете умереть за углом. Если игрок, который стреляет в вас, обладает большой задержкой, то серверу придется отматывать время дальше, чем надо, а сообщение о попадании будет попадать на сервер дольше. Если же высокая задержка у цели, то она будет дольше получать информацию о том, что в нее попали и в результате будет умирать дальше, чем происходит на самом деле. Если у всех задержка, то все становится только хуже.
ДЕТАЛИ:
Давайте приведем пару примеров. В Halo Infinite наши игроки могут двигаться очень быстро - на полной скорости Спартанец двигается со скоростью 8,5 метров в секунду, а когда использует крюк-кошку, то скорость достигает 24 метра в секунду. Задержка, которую вы будете испытывать от выстрела выражена как:
Задержка Стрелка для Сервера + Буфер Команд Стрелка + Время Обработки Сервера (16-33 мс, в зависимости от тик-рейта) + Задержка Цели для Сервера.
Первые три части данного уравнения - количество компенсации задержки, которая нужна серверу, чтобы произвести ввод вашей информации, а последняя часть - время передачи информации цели.
Время Обработки Сервера (ВОС), которое было озвучено выше, строится на тик-рейте, количество обновлений информации в секунду и, когда информация поступает на сервер, в идеале, она поступает ровно в момент, когда сервер готов обновить информацию, но зачастую так не бывает. В худшем случае информация поступает ровно в момент после начала обработки информации и в таком случае приходится ждать целый цикл, чтобы потом обработать недостающую информацию, и только затем мы увидим результаты.
Буфер Команд Стрелка - интересный топик. Сервер хочет выполнять согласованный поток входных данных от клиента и поэтому предполагает, что он получает обновления с постоянной скоростью. Однако, если у вас непостоянное (в плане скорости прим.) соединение, то ваши команды будут поступать либо раньше, либо позже, вместо постоянной скорости. Все соединения обладают различиями в скорости, однако это обостряется от пиковых скоростей или от пользователей, использующих параллельно с вами сеть. Чтобы справляться с такими проблемами, мы буферизируем входные данные на сервере. Для хорошего соединения, значение буферизации должно равняться 0 или 1 (лишние 16 мс), но для плохого соединения значение может достигать нескольких кадров, из за невозможности опираться на получаемую информацию от клиента.
Для следующих примеров, давайте предположим, что значение буферизации равно нулю. Соединение идеально, и значит система "Время на Туда и Обратно" (ВТО), которая отвечает за время, требуемое на поступление информации на сервер и обратно на машину, работает симметрично (время на поток сервер -> клиент равно времени на поток клиент -> сервер). Если вы включили Статистику Сети, то ВТО это то, что вы видите на экране.
Изображения ниже приводят примеры того, как скоро Цель будет получать информацию об уроне, в зависимости от задержки.
Вид стрелка:
Вид цели:
С двумя клиентами с 33 мс ВТО, мы можем увидеть задержку:
16.66 (половина ВТО) + 16.66 (Время Обработки Сервера) + 16.66(половина ВТО), где то 50 мс
Если у вас 33 мс ВТО, но игрок, который выстрелил в вас играет с 100 ВТО, то задержка будет:
50 (половина ВТО стрелка) + 16.66 (Время Обработки Сервера) + 16.66(половина ВТО Цели) = 83.33 мс
Если у вас 33 мс ВТО, но в вас выстрелил игрок с задержкой в 150 мс ВТО, то задержка будет:
75 (половина ВТО стрелка) + 16.66 (Время Обработки Сервера) + 16.66(половина ВТО Цели) = 108.33 мс
Как вы можете заметить, даже при идеальном соединении с сервером у обоих игроков, вы все равно получите шанс быть убитым за углом, а игра с теми, у кого задержка выше, повысит шансы на такие смерти. Данная проблема присутствует во всех онлайн играх, но особенно хорошо ее ощущают игроки в шутеры от первого и третьего лица. Если коротко - чем больше сумма задержок Стрелка и Цели, тем больше времени необходимо серверу, чтобы обновить информацию. Но эта проблема также существует и в случаях, когда у вас плохое соединение, а у Стрелка оно хорошее, ибо вы все равно будете думать, что вас убивают за углом.
Пометка: даже если вы стрелок и у вас хороший интернет, то вам надо сказать, что вы убили цель в правильный момент. Задержка будет ощущаться на клиенте Цели.
СМЯГЧЕНИЕ ПРОБЛЕМЫ:
Так как мы можем исправить данную проблему? Если смотреть на текст выше, то понятно, что мы должны уменьшить задержку между клиентом и датацентром. Если же выразиться иначе, то мы должны соединять игроков с ближайшими датацентрами, чтобы обеспечить им минимальную задержку. Система подбора игроков Halo Infinite была разработана с такой целью, но к сожалению не смогла выполнить ее правильно, в частности из за игроков в малонаселенных регионах.
Сегодня мы выпустили обновление, которое направлено на исправление данной проблемы, особенно для игроков в малонаселенных регионах. Да, скорее всего время поиска матча будет увеличено, но мы хотели бы посмотреть на то, какое влияние данное изменение окажет на вашу игру.
Итак, наши шаги:
- С сегодняшнего дня, мы увеличили приоритет низкого пинга на наших серверах. Данное изменение поможет вам играть с местными игроками и благодаря этому иметь лучшее соединение. Чем больше вы играете на таких датацентрах, тем меньше шанс оказаться на другом.
- Помимо вышеприведенного пункта, мы предприняли шаги, чтобы вы получили качественные матчи с соперниками из вашего региона, в частности в малонаселенных регионах. Статистика показывает, что данное обновление уже приносит свои плоды и мы продолжим улучшать данную систему.
- Также сегодняшнее обновление отключает геофильтрацию игр в онлайне.
В комбинации с данными обновлениями и подкруткой нашей системы поиска игроков, мы верим в то, что сможем сделать лучше со временем. Если мы когда-нибудь почувствуем, что не можем предоставить вам хорошие матчи, или они не будут соответствовать нашей системе оценок, то мы будем вводить дополнительные средства, чтобы улучшить ваш опыт игры - включая выделенные сервера, как в МСС (прим. в игре можно отключать датацентры) и в Halo 5.
Также мы будем расширять нашу работу с игроками по всему миру, а также обеспечивать качественную работу серверов, чтобы у вас не было проблем с игрой.
Конец первой части.