Что такое TickRate, причем тут Tick и откуда берется Rate?
Всем доброго времени суток! В этой очередной и долгожданной статье, я хотел бы затронуть такую тему, как tickrate, ведь это основа основ и понимать базовые принципы следует не только скриптерам, но и держателям серверов. Для любознательных администраторов - это отличный статья для того, чтобы открыть капот и посмотреть, что же там творится на самом деле, почему 128 тикрейт популярней 64 и стоит ли переплачивать деньги.
Для более мобильной навигации по статье, я сформировал подтемы, а в конце статьи привел ссылки для более глубокого изучения этого материала, помимо всего этого данную статью будет полезно прочитать не только администраторам игровых серверов, но и просто любителям поиграть в игры на движке Source Engine и моим коллегам по цеху - скриптерам.
Небольшой дисклеймер: Это не перевод официальной документации, а исключительно мое узкое размышление.
Навигация:
1. Начнем с истоков, что такое Rate?
2. Почему некоторые консольные команды начинаются с sv_, а некоторые с cl_?
3. Пинг, откуда он взялся и какое его назначение?
4. Интерполяция и экстраполяция?
1. Начнем с истоков, что такое Rate?
Rate - это число, обозначающее максимальный предел пропускной способности клиента, то есть число определяющее максимальное число байт, которое может передать сервер клиенту за одну секунду.
Подмечу, что в такой чудесной игре как CS:GO есть настройка рейта вшитая в пользовательский интерфейс игры, именуется она, как "Ограничение пропускной способности".
Особенность этой команды/настройки заключается в том, что она лежит исключительно на стороне клиента и оперировать с ней вы можете только на своей стороне, сервер никак не может изменить этот параметр, хотя есть исключение, когда она меняется только в рамках одного сервера, но как только вы покинете сервер, параметр рейта сразу же вернется в исходное состояние, которые вы прописывали собственноручно или выставляли в настройках.
Если окунуться в это еще подробней, то rate, который частенько игроки прописывают в консоле (rate 196608), число 196608 - это число Bps aka Б/с (Байт в секунду), если произвести нехитрые вычисления, а в одном мегабите 125000 байт, то мы получим, что
rate 196608
- это ничто иное, как 1.57 Mbps aka Мбит/с (Мегабит в секунду). На рисунке 1 вы можете лицезреть настройку рейта в CSGO, через общие настройки игры, да я знаю, что в других играх этого нет (возможно), но как общие сведения о том, что число, которые вы указываете в консоле - это число байт, в некоторых играх это число переводится в мегабиты.Рис.1. Настройка пропускной способности в CSGO.
А вот на рисунке 2, который располагается ниже, вы можете посмотреть на определение пропускной способности простым языком от Valve.
Рис.2. Определение rate от Valve.
Совершенно не секретно, что в интернете гуляет такая вот табличка сопоставления числа байт и мегабит для рейта, продублирую ее здесь:
0.5 Mbps – rate 62500 (Минимальный)
1.0 Mbps – rate 125000
1.5 Mbps – rate 187500
1.57 Mbps – rate 196608 (Стандартный)
2.0 Mbps – rate 250000
2.5 Mbps – rate 312500
3.0 Mbps – rate 375000
3.5 Mbps – rate 437500
4.0 Mbps – rate 500000
4.5 Mbps – rate 562500
5.0 Mbps – rate 625000
5.5 Mbps – rate 687500
6.0 Mbps – rate 750000
6.2 Mbps – rate 786432 (Максимальный)
1.0 Mbps – rate 125000
1.5 Mbps – rate 187500
1.57 Mbps – rate 196608 (Стандартный)
2.0 Mbps – rate 250000
2.5 Mbps – rate 312500
3.0 Mbps – rate 375000
3.5 Mbps – rate 437500
4.0 Mbps – rate 500000
4.5 Mbps – rate 562500
5.0 Mbps – rate 625000
5.5 Mbps – rate 687500
6.0 Mbps – rate 750000
6.2 Mbps – rate 786432 (Максимальный)
Я на своем примере попробую определить свою максимальную пропускную способность и за основу возьму официальные сервера вольв по CSGO. Обычно их физическое расположение это Стокгольм и Люксембург для стран СНГ, вы же можете проверять на серверах расположенных в Москве, Санкт-Петербурге и т.п., если большую часть проводите на серверах сообщества, а не официального матчмейкинга, для других игр алгоритм будет аналогичен. И так приступим:
1. Заходим на вот этот сайт или любой другой.
2. Выбираем страну и город (в моем случае я проверяю на Швеция, Стокгольм).
3. И смотрим на такие критерии, как Download и Upload.
4. Выставляем число не выше полученного значения, то бишь в моем случае - Download 11.53 Mbps, а Upload 19.21 Mbps (не смейтесь только), поэтому я могу смело выставить
rate 786432
, что соответственно равно 6.2 Mbps.Отлично, теперь мы знаем, что такое пропускная способность (rate), знаем, как ее настроить, но о каких подводных камнях еще предстоит узнать?
Например, еще есть такой квар для сервера, как
sv_minrate
- это минимальный пропускной порог, для сервера и если на сервере он больше вашего, то сервер автоматически изменит вашу пропускную способность на свою минимальную допустимую пропускную способность, учтите, что это изменение работает в рамках сервера.Давайте подведем черту под темой с рейтами, обобщим ее и пойдем дальше, итак мы имеем:
*
rate xxx
= Ограничению пропускной способности = Максимально допустимой пропускной способности = Максимальное число байт, которое может передать сервер вам (клиенту) *2. Почему некоторые консольные команды начинаются с sv_, а некоторые с cl_?
Обычно этому не уделяют должного внимания, но ведь практически каждая команда имеет определенное отношение к тому или иному аспекту игры. Например,
cl_radar_scale
- регулирует масштаб вашего радара, все верно, вашего и никого другого, а команда sv_cheats
- дает разрешение на использование чит-команд на сервере, и в рамках конкретного сервера эти команды будут доступны или недоступны. Вы будете совершенно правы, если еще в начале моих рассуждений поэтому поводу ответили, что sv_ - сокращение от слова server, а cl_ - client. Да, я уже упоминал эту терминологию в виде клиента и сервера, да и в принципе поверхностно вы уже это более менее должны понимать, но лишним вспомнить не помешает. Почему, я так акцентирую на этом ваше внимание? Все до безумия просто, все игры многопользовательские игры на движке Source Engine используют сетевую архитектуру Клиент-Сервер (рисунок 3). То есть отныне, если вы слышите про это впервые, ваше мировоззрение о таких играх, как CSGO, CSS, Dota 2, Team Fortress и т.д. кардинально поменяется. Но к этому вы еще вернемся в будущем, просто пока достаточно знать, что есть некоторое деление на клиентскую часть и серверную, а самое главное на самом деле клиент ничего не знает о другом клиенте из-за особенности этой архитектуру.
К чему я задел эту обширную тему, да еще и мельком? Потому что любые команды можно поделить на два типа:
1. Серверные - осуществляются на стороне сервера и работают исключительно на нем, они не могут нанести ущерб пользователю и сломать ему его персональную настройку.
2. Клиентские - осуществляются на стороне клиента/пользователя и работают исключительно на нем, они априори не могут нанести ущерб серверу, обычно ими являются персональные настройки пользователя, и обычно они вынесены в пользовательский интерфейс, но большая часть скрыта.
Рис.3. Архитектура Клиент-Сервер.
3. Пинг, откуда он взялся и какое его назначение?
Уже каждый юный игрок в любой многопользовательской игре знает о том, что такое пинг, ну как знает... Просто интернет плохой, на этом познания заканчиваются, но раз мы затронули его то, давайте расширять наш кругозор.
Я не просто так подвел вас к этому ужасному термину, но поверьте мне это того стоит, ведь он в совокупности влияет от вашей пропускной способности.
Ping (пинг) - это некий промежуток времени, за который пакет данных, отосланный с вашего компьютер доходит до сервера и возвращается обратно, рисунок 4. Единицы в которых изменяется пинг - это ms (миллисекунды), а значит, если условно на сервере вы имеет пинг = 50, то при помощи не больших преобразований мы переводим миллисекунды в секунды и получаем 0.05 секунд, согласитесь, такую задержку тяжело разглядеть.
Рис.4. Пинг.
Но, какой лайфхак использует Valve в своих играх, чтобы компенсировать эти лаги? Смотрим ниже.
4. Интерполяция и экстраполяция?
Вот тут есть дамп всех консольных команд для CSGO, а вот здесь есть руководство по тому, как сделать его собственноручно.
Ссылки на второстепенную литературу для более подробного изучения материала (для любознательных):