Team Fortress 2

Team Fortress 2

813 ratings
Оптимизация сетевых настроек Team Fortress 2
By Алиса [ALTFS]
От сетевых настроек вашего Team Fortress 2 зависит полноценный обмен данными с сервером, на котором вы играете, и ваша успешность.
4
   
Award
Favorite
Favorited
Unfavorite
Статья предназначена
  • для тех, кого я до сих пор вижу дергающимися на своих серверах с пингом в 5 мс;
  • для ПРО, которым важна каждая милисекунда;
  • для геев, которые загрузили у себя ПРО-конфиги, не понимая их сути.
Для того, чтобы настроить сетевые параметры
Нам потребуется прежде все доступ к команде:
  • net_graph 4 - консольная команда отображает график, позволяющий в реальном времени контролировать сетевые параметры вашей игры.

Для удобства использования этой команды:
  • по пути "C:\Program Files (x86)\Steam\steamapps\common\Team Fortress 2\tf\cfg\" создаем файл autoexec.cfg. В него вносим:
    exec my_name.cfg

  • там-же создаем файл my_name.cfg со следующим содержанием:
    //net_graph 4 - команда отображает график, позволяющий в реальном времени контролировать сетевые параметры вашей игры. //Теперь по нажатию "N" у нас отобразится график, по следующему - исчезнет. alias netgraph4 "net_graph 4; alias +netgraph netgraph0" alias netgraph0 "net_graph 0; alias +netgraph netgraph4" alias +netgraph "netgraph4" bind "N" "+netgraph" //Эти алиасы, позволяют подстраивать lerp (что это узнаем дальше) клавишами "INS" "DEL" "PGUP" "PGDN" //в зависимости от качества трассы до сервера, на котором вы играете: alias lerpb+ "incrementvar cl_interp 0.01 0.09 +0.001" // cl_interp +0.001 alias lerpb- "incrementvar cl_interp 0.01 0.09 -0.001"// cl_interp -0.001 alias lerpc+ "incrementvar cl_interp 0.01 0.09 +0.01"// cl_interp +0.01 alias lerpc- "incrementvar cl_interp 0.01 0.09 -0.01"// cl_interp -0.01 bind "INS" "lerpb+" bind "DEL" "lerpb-" bind "PGUP" "lerpc+" bind "PGDN" "lerpc-"

  • итак:
    • теперь по нажатию "N" у нас отобразится график, по следующему - исчезнет;
    • клавишами "INS" "DEL" "PGUP" "PGDN" мы сможем из режима спектаторов подстроить свой lerp.
Теперь немного о том, как читать график (net_graph 4)
  • область 1 отвечает за данные, получаемые с сервера (читаем сверху вниз, справа налево):
    • кол-во пакетов в секунду, которое мы хотим получать от сервера (cl_updaterate из вашего конфига);
    • кол-во пакетов в секунду, которое мы реально получаем с сервера (это реальное cl_updaterate, назначенное сервером);
    • lerp - на сколько миллисекунд время вашей игры отстает от серверного. Эта задержка необходимо для интерполяции. Всегда надо добиваться минимальной задержки. Допустимы значения lerp белого и оранжевого цветов. Желтый lerp сигнализирует об ошибочно установленном времени интерполяции;
    • количество КБайт в секунду, которые мы получаем с сервера;
    • размер в Байтах последнего принятого пакета.
  • область 2 отвечает за данные, отправляемые на сервер (читаем снизу вверх, справа налево):
    • кол-во пакетов в секунду, которое мы хотим отправлять на сервер (cl_cmdrate из вашего конфига);
    • кол-во пакетов в секунду, которое мы реально отправляем на сервер (реальное cl_cmdrate, которое нам назначил сервер, наплевав на наши хотелки);
    • количество КБайт в секунду, которые мы отправляем на сервер;
    • размер в Байтах последнего отправленного пакета.
  • область 3 отвечает за возникающие ошибки (читаем слева направо):
    • loss - физически потерянные из-за плохой трассы между вами и сервером пакеты (лечится сменой провайдера);
    • chooke - количество пакетов, которые сервер не успел пропихнуть к вам из-за ваших кривых настроек (эти пакеты с обновлением игрового мира от сервера были просто отброшены).
  • sv - показывает реальный тикрейт игрового сервера.
    Максимально возможный тикрейт для TF2 - 66. Если тикрейт на графике гуляет в широких пределах, то железке просто не хватает процессорных мощностей, что не минуемо приведет к лагам на игровом сервере. Играть на таких серверах не следует.
Итак, начнем тонкую настройку
Мои серверы отдают и принимают пакеты с обновлением игрового мира не менее, чем 33 раза в секунду, но не более 66 раз в секунду (как и большинство серверов, собственно). Скорость потока, выделяемая сервером для одного клиента, ограничена: снизу 15000Байт/с, сверху не ограничена (но обычно она не выходит за диапазон :15000-60000 Байт/с).

Рассчитываем клиентский rate:
rate - максимальное количество байт в секунду, которое клиент хочет получать от сервера из-за узости клиентского интернет-канала.
  • возмем максимально возможную скорость, которую готов отдавать сервер для клиента (60000 Байт/с) и посчитаем необходимую для клиента ширину канала: необходимая ширина канала = 60000*8/1024 = 468 Кбит/с. Т.е., если ваша скорость больше 512Кбит/с, смело ставим:
    rate 400000 //т.е. фактически без ограничения
  • Когда ваша скорость инета менее 512Кбит/с, то rate надо считать. Например, у вас 256Кбит/с: rate=256*1024/8=32768Байт/с
    rate 30000 //немного занизим, чтобы не занимать весь канал

Рассчитаем клиентский cl_updaterate:
cl_updaterate - максимальное количество пакетов с обновлениями игрового мира в секунду, которое клиент хочет получать от сервера.
Казалось-бы, а зачем его считать? Мы сообщили серверу на какой скорости хотим получать обновления (rate), а дальше он пусть сам рассчитывает количество пакетов с обновлениями в секунду, чтобы не превысить rate.
Но размер пакетов с обновлениями, приходящими от сервера, дискретен - серверу нужно иногда передать горку с кучкой, а иногда просто кучку. Следовательно сервер должен динамически менять количество пакетов в секунду, но тут возникает косяк с интерполяцией.
Поэтому твердое количество пакетов с обновлениями за секунду приходится подбирать нам, дабы сервер его не занижал.
  • Для начала ставим:
    cl_updaterate 66
  • смотрим на график и на чоки. Если у нас график изобилует провалами (большие значения чоки):
    понемногу снижаем значение cl_updaterate так, чтобы у вас было минимум чоков и график смещался без провалов

Рассчитаем клиентский cl_cmdrate:
cl_cmdrate - максимальное количество пакетов в секунду, которое клиент хочет отправлять серверу.
  • Если у вас симметричный канал, принимаем:
    cl_cmdrate равным cl_updaterate
  • Если у вас не симметричный канал (например, ADSL-подключение):
    смотрим по графику исходящую скорость и занижаем cl_cmdrate до приемлемой для вашего канала на отдачу скорости

Интерполяция
Для того, чтобы между обновлениями игрового мира (а так-же в случае задержки или потери пакетов с ними) ваш ТФ мог самостоятельно интерполировать статичные промежутки между изменяющимся каждые 15 мс (1/66) игровым миром, необходимо правильно настроить параметры интерполяции.

Рассчитаем клиентский cl_interp_ratio:
cl_interp_ratio - клиент хочет интерполировать игровой мир, используя не более: "1" - 2-х пакетов от сервера (1 промежуток), "2" - 3-х пакетов от сервера (2 промежутка).
cl_interp_ratio зависит от качества трассы между сервером и вами:
  • при стабильной трассе без потери пакетов выбираем:
    cl_interp_ratio 1
  • при поганой трассе с плавающим пингом и потерей пакетов, выбираем:
    cl_interp_ratio 2

Рассчитаем клиентский cl_interp:
cl_interp - временной промежуток в течении которого клиент интерполирует игровой мир.
Формула рассчета базового cl_interp такова: cl_interp = cl_interp_ratio/cl_updaterate.
Ремарка:
cl_updaterate здесь берется не то, которое вы запросили у сервера, а то, которое он вам разрешил. Некоторые гейские серверы не разрешают нормально играть игрокам со слабым инетом, лоча их cl_updaterate на 66 (сервер фигачит пакеты по максимуму и его не заботит, что половина пакетов у игрока не обрабатывается). Правильно настроенный сервер разрешит вам диапазон cl_updaterate:33-66.

Теперь можно посчитать и ввести в консоль подходящие пары команд:
  • при стабильной трассе без потери пакетов между вами и сервером:
    - cl_updaterate=66 (скорость инета более 512Кбит/с)
    cl_interp_ratio 1; cl_interp 0.0152
    - cl_updaterate=33 (скорость инета менее 512Кбит/с)
    cl_interp_ratio 1; cl_interp 0.0304
  • при поганой трассе с плавающим пингом и потерей пакетов:
    - cl_updaterate=66 (скорость инета более 512Кбит/с)
    cl_interp_ratio 2; cl_interp 0.0304
    - cl_updaterate=33 (скорость инета менее 512Кбит/с)
    cl_interp_ratio 2; cl_interp 0.0608

Более тонкую корректировку cl_interp (в зависимости от сервера, на котором играем) мы сделаем забинджеными в начале статьи алиасами, жамкая клавишами "INS" "DEL" "PGUP" "PGDN".
Помним, что lerp должен быть белого или оранжевого цвета. Желтый lerp сигнализирует об ошибочно установленном времени интерполяции.

ВАШИ СЕТЕВЫЕ ПАРАМЕТРЫ НАСТРОЕНЫ!!!
Примеры
НЕ ЗАБЫВАЕМ ЗАНОСИТЬ СДЕЛАННЫЕ НАСТРОЙКИ В my_name.CFG
  • я играю с инетом в 20Мбит/с, стабильным пингом 10-20 мс. без потери пакетов.
    В конец my_name.cfg забиваем:
    rate 400000; cl_cmdrate 66; cl_updaterate 66; cl_interp_ratio 1; cl_interp 0.0152
  • я играю с инетом в 256Кбит/с, стабильным пингом 20-40 мс. без потери пакетов.
    В конец my_name.cfg забиваем:
    rate 30000; cl_cmdrate 33; cl_updaterate 33; cl_interp_ratio 1; cl_interp 0.0152
  • я играю с инетом в 6Мбит/с, ужасным плавающим пингом 40-120 мс. и потерями пакетов.
    В конец my_name.cfg забиваем:
    rate 400000; cl_cmdrate 66; cl_updaterate 66; cl_interp_ratio 2; cl_interp 0.0304
  • я играю с инетом в 256Кбит/с, ужасным плавающим пингом 40-120 мс. и потерями пакетов.
    В конец my_name.cfg забиваем:
    rate 30000; cl_cmdrate 33; cl_updaterate 33; cl_interp_ratio 2; cl_interp 0.0608

(с) Алиса [BND]
Статья так-же опубликована в моей группе Alice's TF2 Servers
Кому интересна физика процесса
Может вникнуть более глубоко:
Дополнения и изменения
Тут я буду вносить изменения, если они будут:
  • большинство переменных теперь возможно менять только находясь в спектаторах;
  • "rate 0" более не является значением без ограничения. Если у вас хороший инет, следует задавать максимальное значение, к примеру, больше чем "rate 100000".
92 Comments
который раз смотрю это руководство, чтобы починить пинг. Благодарю автора за работу
:demoticon::steamthumbsup:
Mr Snake 21 Mar @ 2:38pm 
пиздец
BackStab 1 Oct, 2023 @ 12:55am 
Спасибо, много полезного узнал, а кто нибудь подскажет нужны ли команды cl_lagcompensation "1"
cl_pred_optimize "2"
cl_smooth "0"
cl_smoothtime "0.01"?
Просто в гайде о них не написано
FooFick 30 Apr, 2023 @ 3:53am 
Поставил эти значения "rate 400000; cl_cmdrate 66; cl_updaterate 66; cl_interp_ratio 1; cl_interp 0.0152", если я не ошибаюсь, пинг снизился на 18-20, с 70 до 56, но меня это не устраивает, хотелось бы, чтобы пинг был 30, но не знаю как это сделать (инет у меня 90 мбит/c)
spy_potato 20 Apr, 2023 @ 8:37am 
нехуя не понял , но очень интересно
ютуб 31 Oct, 2022 @ 10:09am 
У меня значение in в нетграфе фризит на пару секунд и вместе с ним фризит тф2, то как это решить?
crazy_ass164 11 Oct, 2022 @ 10:08pm 
у меня интернет 50 мегабит и что мне тогла ставить, интернет то хороший, а в игре пинг ужасно высокий
Яго Мофоб 22 Jul, 2022 @ 2:57am 
Нихуя не понял. Ставлю лайк.:steamthumbsup::demoticon:
last fall 28 May, 2022 @ 9:25am 
Алиса [ALTFS], как вернуть настройки?
f.fred04 #save_tf2 25 May, 2021 @ 2:42am 
что делать если независимо от изменений пинг не меняется?