Star Citizen. Нервный Tick

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

Представим, что вы играете в одиночный шутер.

Игровой код (движок) выполняется локально, на вашем ПК.

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

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

Видеокарта формирует изображение этого "скриншота".

Монитор отображает этот "скриншот" на экране.

Один такой цикл "получение команд игрока - вычисление игрового мира" называется тиком (TICK), он формирует один кадр (FRAME). Больше циклов-тиков, больше кадров (FRAMES PER SECOND - FPS), плавнее геймплей.

Но сколько нужно этих самых FPS?

Окном в игровой мир является монитор, у него есть такая величина, как частота обновления изображения (REFRESH RATE). Измеряется в количестве единиц в секунду - герцах (Hz). Если у вас монитор 60Hz, то он сможет отобразить 60 кадров в секунду, и не больше.

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

Представим, что вы решили поиграть в онлайн шутер.

Теперь все главные события игрового мира должны просчитываться на отдельном компьютере (сервере).

К серверу подключаются компьютеры игроков (клиенты).

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

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

Один такой цикл называется SERVER TICK, измеряется в герцах (Hz).

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

Вы наверно уже догадались, что для монитора 60Hz нужно сформировать 60FPS, а значит и сервер должен поддерживать SERVER TICK RATE - 60Hz. Лишь при этом условии, каждый кадр, отображаемый на экране вашего монитора, будет содержать достоверную информацию об игровом мире. Противники будут находиться именно там, где вы их видите. А пули будут лететь в цель.

Серверу потребуются немалые ресурсы, ведь теперь ему приходится считать действие не одного игрока, а всех. А что, если вы играете против ботов? Тогда серверу придется еще и "думать" за них. Еще больше ресурсов.

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

Все эти условия закладываются на этапе проектирования игры и написания движка.

Вот SERVER TICK RATE некоторых современных игр:
Valorant - 128Hz
Counter-Strike: Global Offensive - 64Hz и 128Hz
Battlefield - 30Hz ~ 144Hz
Overwatch - 63Hz
Call of Duty: Warzone - 22Hz

Что-то уж совсем печально у Warzone. Но тут следует учесть, что на карте 150 игроков, размер карты большой. Да и Free-to-Play влияет на количество серверов, а значит и затраты.

Зависимость между SERVER TICK RATE и количеством игроков на карте отображают рекомендации разработчиков, на примере DICE:

Star Citizen. Нервный Tick

Но мы не за тем здесь собрались, что бы обсуждать другие игры.

Хотите узнать, как обстоят дела у "самой лучшей, самой проработанной, самой-самой-самой игры" за всю историю?

ЖЕЛАНИЕ:

За сетевой код Star Citizen "отдувается" Клайв Джонсон.

Когда у Клайва спросили, не планируют ли CIG поднимать серверный тикрейт до значения 128Hz (что уже стало стандартом), тот ответил:

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

Star Citizen. Нервный Tick

Но это планы, мечты, а что с текущим положением вещей?

РЕАЛЬНОСТЬ:

С недавних пор, "разработчики" начали проводить ивенты, под названием Xenothreat, цель которых - заставить игроков собираться вместе, и всячески активничать на сервере. Максимальное количество таких игроков на одном сервере - до 50 человек.

Пользователь ArusZerb воспользовался этой возможностью, и стал анализировать пакеты, которыми обмениваются клиент и сервер SC.
Cвоими наблюдениями он поделился.

Ознакомимся с результатами анализа от 30 000 до 70 000 сетевых пакетов, захваченных с помощью программы Wireshark.

Star Citizen. Нервный Tick

SERVER TICK RATE в Star Citizen: 3,19Hz

Это среднее значение, временами (5%) оно падает до 1,76Нz.

Задержка ввода - input delay (время от нажатия на клавишу, до отображения движения персонажа на экране) - 160ms.

Если вы выглянули из-за угла, и увидели противника, он увидит вас, выглядывающим из-за угла через 2 секунды! Результаты этого теста были получены путем съемки экранов двух ПК, находящихся в одной комнате.

Объем данных, передаваемых за один тик - 89705 байт.
И это при том, что сервер не рассылает игрокам всякий мусор (информацию об игроках, которых они не видят).

Если сервер будет работать на скорости 30Hz (как планируется), игроку потребуется стабильный канал интернета с гарантированной скоростью не менее 22 Mбит.

А сам сервер на 50 человек должен будет обладать каналом интернета > 1Гбит. ОДИН СЕРВЕР.

Для сравнения, в типичный день, без проведения ивентов, когда игрок не взаимодействует с другими (истинный геймплей "игры"):

Средний тикрейт - 6,1Hz, минимальный(5%) - 4,45Hz.

Объем данных, передаваемых за один тик (игрок стоит на одном месте в локации GrimHex) - 27648 байт.

В режиме Arena Commander (режим полетов - сражений с ботами, либо до 3-x игроков в "виртуальном пространстве") - 30Hz.

Как все это выглядит в реальном мире:
* отсутствие регистрации попаданий;
* телепорты игроков;
* NPC - противники, стоящие на одном месте (сервер не успевает за них "думать" и реагировать на ваши действия);
* неработающий бармен (ну как же без него);
* ...

Стоп, если это в 2021 году, спустя 10 лет разработки, то раньше было хуже, да? Ведь есть же прогресс???

Не волнуйтесь, скоро все будет.

Нужно только немного подождать...

1.9K
627 комментариев
150 ₽

— Мистер Степан?
— Да…
— Мистер Робертс передаёт вам гешефт за пиар!

63
Ответить

Вижу Степана - ставлю

503
Ответить

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

153
Ответить
Комментарий удалён модератором

Не люблю Степанов

3
Ответить

Вижу класс , думаю Степану.

1
Ответить

Вспоминаю (опять) PlanetSide 2, а там:
* Динамический тикрейт от 30 до 60, в зависимости от нагрузки на зону;
* На карте (континенте) - около 1000 игроков одновременно (на релизе было 2000), и каждого можно найти и пристрелить - ну или он вас может;
* Архитектура серверов - кластерная. Сервер игры разбит на зоны, каждая зона - отдельный континент, плюс сам континент разбит на гексы, и гексы обслуживаются отдельными серверами, без видимых границ гексов, подзагрузок и вообще каких-то ограничений.

305
Ответить