Как разработчики онлайн-шутеров ставят игроков в равные условия — на примере VALORANT

Шутер Riot Games с точки зрения сетевой игры: серверы, матчмейкинг, борьба с читерами и другое.

Материал подготовлен при поддержке Riot Games

Как разработчики онлайн-шутеров ставят игроков в равные условия — на примере VALORANT

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

Разобрались, как Riot Games борется с читерами в VALORANT, стремится улучшить баланс и поставить всех в равные условия.

Как борются с читерами

Пример работы чита «воллхак» — он позволяет видеть противников сквозь стены

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

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

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

При этом до запуска игры Vanguard работает пассивно и ничего не сканирует в системе. Когда же он переходит в активный режим, то всё равно полностью автономен и не посылает никакой информации на удалённый сервер.

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

Например, вот как Riot Games борется с воллхаком — читом, позволяющим видеть противников сквозь стены. Как правило, такой чит работает потому, что в онлайн-играх сервер постоянно посылает клиенту (то есть, игроку) информацию о происходящем в матче. В том числе, где находятся враги. И уже на стороне клиента система решает, что игрок может видеть, а что нет (находится за препятствием). Воллхак же внедряется в этот процесс и даёт игроку всю информацию, что приходит с сервера.

Чтобы снизить эффективность этого чита, Riot Games ввела систему «Тумана войны». На тот момент она уже хорошо себя показала в League of Legends, оставалось только перенести её в VALORANT. Хотя это и потребовало значительных усилий — новый движок и 3D-окружение накладывали свои трудности.

«Туман войны» означает постоянную проверку на стороне сервера, какую информацию посылать клиенту о том или ином противнике. Если система решает, что игрок видит или слышит конкретного агента, его оружие или эффект от его способности, то посылается команда об отображении соответствующего объекта. В любом другом случае клиенту поступает информация о том, что объект необходимо скрыть от пользователя.

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

Схема принятия решения сервером, какие данные высылать игроку; В данном случае actor — это любой активный объект в игре, то есть моделька персонажа, оружие или эффект от применяемой способности
Схема принятия решения сервером, какие данные высылать игроку; В данном случае actor — это любой активный объект в игре, то есть моделька персонажа, оружие или эффект от применяемой способности

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

Особую роль в этом играет само сообщество. Чем более активно игроки посылают жалобы на нечестных по их мнению соперников (или тиммейтов), тем выше шанс, что в скором времени читера забанят. Так, Riot Games подтверждала, что благодаря активистам вроде GamerDoc удаётся более активно поддерживать эффективность античита — к августу этого года, помимо автоматических банов, было вручную изучено и заблокировано тысячи читеров и их компьютеров.

Что такое тикрейт, и на что он влияет

Эффективно внедрить «Туман войны» получилось только благодаря игровым серверам с тикрейтом в 128 Гц. Фактически это означает, что сервер посылает данные клиенту 128 раз в секунду, в том числе и данные о «тумане войны».

В первую очередь такая высокая частота обновления сервера нужна для более гладкого и комфортного геймплея. Например, снижается количество ошибок расчётов попаданий по врагу, а движения игроков выглядят плавными и не столь резкими, как при тикрейте 64 Гц, на котором работает большинство шутеров.

Как разработчики онлайн-шутеров ставят игроков в равные условия — на примере VALORANT

Ещё высокий тикрейт уравнивает шансы игроков в некоторых ситуациях. Чтобы было понятнее, зайдём издалека.

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

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

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

Как разработчики онлайн-шутеров ставят игроков в равные условия — на примере VALORANT

Однако такой игровой баланс сложно выдержать в сетевом шутере из-за так называемого Peeking Advantage, или преимущества атакующего — ситуации, которая присуща большинству шутеров. Из-за особенностей устройства сети и системы «сервер-клиент», игрок, который выходит за угол, увидит соперника, находящегося за этим углом, на несколько десятков миллисекунд раньше, чем тот увидит его. Учитывая низкий TTK (time to kill — время на убийство) в VALORANT, этих мгновений достаточно, чтобы убить противника, который остаётся беззащитным в такой ситуации.

Чтобы решить эту проблему, Riot Games пришлось предпринять сразу несколько действий. Среди них увеличение скорости обработки поступающей информации и запуск 128-герцовых серверов, которые позволяют посылать результаты обработки данных игрокам как можно чаще. Это позволяет свести к минимуму задержку передачи информации, то есть в бою враги увидят друг друга почти одновременно, а условия их перестрелки будут максимально честными.

Один из способов бороться с peeking advantage – минимизировать задержку. Для этого Riot построила собственную сеть Riot Direct, которая, благодаря собственным разработкам, дата-центрам и сотрудничеству с интернет-провайдерами, позволяет серьезно снизить пинг с поправкой на удалённость серверов.

Полностью искоренить проблему peeking advantage почти невозможно, однако на данный момент, по заверениям разработчиков, если у обороняющегося игрока пинг ниже 45ms (а пинг атакующего здесь не играет особой роли), то фактически преимущество остаётся за ним. Хотя, конечно, всё зависит от реакции играющих и даже от фреймрейта — у владельца 144-герцового монитора с соответствующим FPS будет несколько дополнительных кадров, чтобы успеть заметить противника.

Также высокий тикрейт позволяет установить единую высокую частоту обновления данных для клиента и сервера, вне зависимости от того, какой FPS в данный момент у игрока — 30, 60 или 240. То есть и сама игра у всех десяти участников матча, и сервер обрабатывают одну и ту же информацию с одинаковой частотой.

За одну секунду и сервер, и компьютеры всех игроков получат, обработают и отправят одинаковое количество действий — 128 «тиков». А системе уже останется только сверить и соотнести все эти действия друг с другом. Таким образом удаётся избежать рассинхронизации, вызванной разницей между частотой кадров в игре и частотой обновления сервера.

В случае потери данных от клиента, сервер предсказывает возможные действия игрока — и как правило удачно
В случае потери данных от клиента, сервер предсказывает возможные действия игрока — и как правило удачно

Создание честных условий

VALORANT не поддерживает «растянутый» широкоформатный режим на мониторах с соотношением сторон 4:3, который позволил бы сохранить широкий угол обзора и в то же время увеличить модели противников для преимущества в бою.

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

Ещё в Riot Games считают, что плохое соединение одного игрока не должно серьёзно сказываться на остальных. Так что даже если у кого-то слишком высокий пинг или наблюдается потеря пакетов данных, благодаря встроенному в игру компенсатору лагов, для всех остальных такой персонаж всё равно должен двигаться плавно, без резких скачков, а попасть по нему будет не сложнее, чем по кому-либо другому.

Система не идеальна, казусы случаются: например, игрок с хорошим интернет-соединением уже зашёл за укрытие, а по нему всё равно попадает противник с зашкаливающим пингом. Но часто компенсатор всё же выручает.

Зато, опять же благодаря высокому тикрейту и хорошей синхронизации между сервером и клиентом, надёжно работает система регистрации попаданий. При том, что каждый выстрел параллельно обрабатывается на стороне клиента и на стороне сервера (причём информация от сервера всегда в приоритете), результаты почти всегда совпадают.

Разными цветами обозначены данные, обрабатываемые клиентом и сервером: кадр слева взят из раннего билда игры, кадр справа <a href="https://www.youtube.com/watch?v=_Cu97mr7zcM" rel="nofollow noreferrer noopener" target="_blank">сделан</a> после перехода на 128-герцовый тикрейт и с новым неткодом
Разными цветами обозначены данные, обрабатываемые клиентом и сервером: кадр слева взят из раннего билда игры, кадр справа сделан после перехода на 128-герцовый тикрейт и с новым неткодом

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

По факту регистрация работает корректно. Но из-за особенностей неткода выстрел (дульное пламя и след от него) отрисовываются не сразу — только со следующего кадра после того, во время которого игрок выстрелил. Из-за этого может показаться, что он попал не туда, куда это засчиталось сервером.

<p>Хотя во втором кадре отчётливо видно, что выстрел совершается в голову, фактически он был осуществлен на один фрейм раньше, когда прицел был направлен в стену</p>

Хотя во втором кадре отчётливо видно, что выстрел совершается в голову, фактически он был осуществлен на один фрейм раньше, когда прицел был направлен в стену

Как работает матчмейкинг

И в казуальном, и в рейтинговом режимах людям подбирают оппонентов и соратников на основе статистики, закреплённой за каждым игроком. Riot следит не только за тем, какое у вас соотношение побед к поражениям, но также насколько вы эффективны в бою и в каком составе хотите играть — если вы зашли вместе с друзьями, то и соперников вам будут стараться искать среди заранее сформированных отрядов.

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

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

При этом помимо текущего ранга мастерства, который определяется и постоянно меняется в зависимости от результатов матчей, у каждого игрока в соревновательном режиме теперь есть ранг акта. Он никак не помогает в матчмейкинге, но мотивирует совершенствовать свои навыки.

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

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

В теории система глобальных рангов должна легко адаптироваться к любым ситуациям. В том числе к смурф-аккаунтам (новым аккаунтам под управлением про-игроков) и к случаям, когда игрок показывает себя в матче очень хорошо, но из-за слабых тиммейтов всё равно проигрывает. На деле ранжирование работает не так идеально, как хотелось бы.

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

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

Как разработчики онлайн-шутеров ставят игроков в равные условия — на примере VALORANT

VALORANT вышла в начале лета — она бесплатная и полностью на русском языке. 5 августа в игре стартовал второй Акт — в игру добавили нового агента Killjoy, обновлённую систему рейтинга и бета-версию режима Deathmatch.

213 комментария
146
Ответить
36
Ответить

Ого. Судя по галочке тебя взяли в редакцию? Круто.

Ответить

А почему рейтинг этого поста отображается только с мобильного приложения?

Ответить

При этом до запуска игры Vanguard работает пассивно и ничего не сканирует в системе

124
Ответить

Комментарий недоступен

16
Ответить