Как сделать лерп 0 в ксс

Обновлено: 02.07.2024

Клиент-сервер - сетевой код игры созданный на основе обмена пакетами между сервером и клиентом (игрой). В этих пакетах информация о текущем состоянии игрового мира (расположении объектов и т.д.)
cl_updaterate - число пакетов которые клиент получает от сервера каждую секунду.
Интерполяция - получение промежуточных значений какой-либо величины, путем усреднения крайних. Интерполяция служит для сглаживания картинки, т.к. пакетов приходящих от сервера зачастую не хватает для того чтобы картинка смотрелась плавно.
Настройки клиентской части по умолчанию: cl_updaterate 20; cl_interp_ratio 2; cl_interp 0.1.
Как это работает

cl_updaterate 20 означает, что клиент будет получать от сервера пакеты 20 раз в секунду, разница между пакетами - 50 мс. Чтобы предотвратить лагание от возможной потери пакета, интерполяция должна происходить в промежуток времени равный 2*50=100 мс. Чтобы обеспечить такую интерполяцию, необходимо задать параметр cl_interp 0.1. Множитель два означает, что мы хотим интерполировать две области между тремя пакетами пришедшими от сервера: "._._.". Если мы хотим итерполировать только одну область "._.", мы должны изменить соответствующий параметр. Этим параметром является переменная cl_interp_ratio. Она может принимать значения 2, 1, 0. Как не сложно догадаться, если эта переменная равна нулю, то интерполяция на клиенте будет отсутствовать. В общем случае формула для промежутка такова: lerp = cl_interp, но не может быть меньше cl_interp_ratio/cl_updaterate. Итак, тут мы приходим к самому определению:

lerp - промежуток времени в котором пакеты полученные клиентом будут интерполироваться.

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

После теории перейдем к практике. С самого начала кажется, что в идеале lerp должен быть равен 0, ведь при таком значении lerp нет интерполяции и клиент видит то же, что видит сервер. Вы НЕ можете себе позволить lerp = 0 по двум причинам.

1) Ваш интернет канал оставляет желать лучшего.
Предположим, что вы счастливый обладатель модема или в вашем городе широкополосный интернет пока по карману только избранным или ваш сосед по общежитию по вечерам заливает на торрент пачку свежих немецких фильмов. Это значит, что вы можете себе позволить исключительно скромные сетевые настройки. Скорее всего те, что стоят по умолчанию, а быть может ваши дела еще хуже. При cl_updaterate 20, даже если все пакеты благополучно приходят от сервера к клиенту, вы видите 20 кадров в секунду (не имеет значения, какой у вас компьютер). Человеческий глаз воспринимает эту картинку как дерганую. Если же, не дай бог, потери (choke) есть, то играть вы просто не сможете, так как будете видеть слайдшоу.

2) Настройки серверов непозволяют клиентской части выставлять необходимые значения некоторых переменных.
Главная проблема тут безусловно cl_interp_ratio, на данный момент ни один европейский серверный конфиг не позволяет играть с этой переменной равной нулю. На данный момент я не знаю ни одного паблика с такими настройками. Только несколько КВ-серверов позволяют отключать интерполяцию. Сейчас добавление sv_client_min_interp_ratio 0 (эта команда отвечает за минимальное значение cl_inerp_ratio, которое может иметь клиент находясь на этом сервере) в евроконфиге скорее всего вопрос времени, и я пологаю, ждать осталось не долго. Но факт остается фактом: значение этой серверной переменной по умолчанию равно 1, а это значит, что клиент не может сделать lerp меньше, чем 10 мс.

Если вторая причина вопрос времени, то вот с первой причиной совладать способов не очень много.
Если у вас плохой коннект и постоянно теряются пакеты, то lerp=0 не для вас. Вам нужна интерполяция cl_interp_ratio 2.
Если же интернет не проблема, то тогда рецепт очень прост. Поднимайте рэйты: cl_cmdrate 66; cl_updaterate 66; rate 20000 - это ваш минимум. В идеале на 100 тиковом сервере у вас должно быть cl_cmdrate 100; cl_updaterate 100; rate 25000. Если сервер позволяет, ставьте cl_interp_ratio 0; cl_interp 0.
66, а тем более 100, кадров в секунду - вполне достаточно, чтобы комфортно воспринимать игру без интерполяции и лагов. Если же сервер не позволяет вам играть без интерполяции (пока что, это самый распространенный случай), рецепт очень прост:

1) Напишите в консоли cl_updaterate и запомните значение этой переменной
2) Напишите в консоли cl_interp_ratio 1
3) Разделите 1 на значение cl_updaterate
4) Напишите в консоли cl_interp и присвойте ему то что получили в пункте 3

Например:
Я играю с cl_updaterate 66, это значит что в 3 пункте я получу 0.0152, следовательно мне нужно написать cl_interp 0.0152. Это даст мне lerp = 15. Что уже довольно неплохо. Так как интерполяция таких временных промежутков не слишком сильно добавляет неточности вашим действиям.
Если вы пишите значение cl_interp меньшее, чем cl_interp_ratio/cl_updaterate, то на net_graph lerp будет отображаться оранжевым цветом. Если же lerp окрашен в желтый, то значит значение lerp больше промежутка времени между отсылаемыми пакетами на этом сервере. В обоих случаях lerp (а значит cl_interp) нужно увеличивать пока тот не станет белым. Если вы будете пытаться играть с НЕ БЕЛЫМ lerp, то вы обрекаете часть своих выстрелов застревать в промежутке клиент-сервер.

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

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

Чтобы не париться с математикой, можно забиндить клавиши так:

alias lerpa+ "incrementvar cl_interp 0.01 0.09 +0.0001"// cl_interp +0.0001
alias lerpa- "incrementvar cl_interp 0.01 0.09 -0.0001"// cl_interp -0.0001
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" "lerpa+"
bind "DEL" "lerpa-"
bind "HOME" "lerpb+"
bind "END" "lerpb-"
bind "PGUP" "lerpc+"
bind "PGDN" "lerpc-"

Кто онлайн

Именинники

Первый сервер

Второй сервер

Третий сервер

Что такое lerp в новом обновлении.


Администраторы

Что такое lerp?

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

Получается, чем больше значение параметра lerp, тем больше пакетов пришлет вам сервер. Поэтому, для русских серверов, где потери минимальные, следует ставить минимальное значение lerp. Для других расчет идет следующий:

lerp = 1000/cl_updaterate * cl_interp_ratio (оптимальное значение 2)

cl_interp_ratio - это множитель интерполяции. 2 - интерполируем область между 3мя пакетами. 1 - соответственно 1 пакет между 2х.

Вспомним пройденный ранее материал:

Rate (Рейт) - это максимальный предел байт в секунду который сервер может послать клиенту.
cl_rate - определяет максимальный предел байт в секунду который клиент может послать на сервер. (Вам не нужно беспокоится об этом параметре)
cl_cmdrate - число раз в секунду которое клиент информирует сервер о своих действиях.
cl_updaterate - это сколько раз в секунду сервер говорит клиенту что происходит на карте.

Продолжим. Lerp в CS:S настраивается следующими командами:

cl_interp_ratio (Если не 0, то 2)
cl_interp (Если не 0, то используя формулу выше - lerp*0.01)
updaterate зависит от сервера. Пинг тут не при чем.
Если lerp желтый - идут большие потери пакетов, а значит сервер- УГ.

Отвечают за минимальные и максимальные значения вашего cl_interp_ratio. Если min = 0, то можно сделать lerp = 0.

Делается это командами:

cl_interp_ratio 0
cl_interp 0БЕЛЫМ.

На сервере с тиком 66 лерп можно выставить силами движка всем клиентам одинаковый (30-31мс):

Апофиг – конфиг - лига

sv_client_min_interp_ratio 1.0
sv_client_max_interp_ratio 1.0
sv_client_predict 1
sv_client_interpolate 1

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

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

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

То есть дорисовывать на клиенте действия игроков на сервере, данные которые реально были недополучены, как сказано выше "придумывать". Проще говоря, человек выбегает из-за угла, ты его не видишь, по причине потери пакета или большого пинга, то клиент тебе его дорисует. Интерполяция зависит также от пинга. Величина задержки (в миллисекундах) при обсчете положения моделей в игре устанавливается командой cl_interp_ratio, которая грубо рассчитывается как 100/updaterate* и может принимать целые значения (нас интересует самый распространенный диапазон от 1 до 5). Дефолтным считается значение cl_interp_ratio 1 (примерно ссоответствует задержке 10 мс). Однако при игре на сервере с пингом под 100 значение cl_interp 0.01 может привести к тому, что ваша реальная задержка составит 100 мс, а отрисовывание у вас выставлено на 10 мс, в результате лаги могут только усугубиться.

Играя на русских серверах, где потери минимальны - выставляем lerp минимально возможный. Если же вдруг вас занесло поиграть на бурж сервер - расчет идет следующий:
lerp = 1000/cl_updaterate * cl_interp_ratio (оптимальное значение 2).

В CS:S lerp регулируется командами:

Значение cl_interp расчитывается: cl_interp = cl_interp_ratio / cl_updaterate
Если грубо, то:

Пинг 5-10 - cl_interp 0.01 cl_interp_ratio 1
Пинг 20-30 - cl_interp 0.02 cl_interp_ratio 2
Пинг 40-50 - cl_interp 0.03 cl_interp_ratio 3
и дальше по аналогии.


P.S. : Вообще это все расчетные значения, всегда нужно подбирать данное значение под конкретный клиент и сервер. Надеюсь многие решат вопросы о lerp'e. Уменьшайте значение lerp, по-умолчанию 100, но чем меньше, тем лучше. Главное, чтобы он стал белым.

Хотя я бы все-таки советовал пользоваться формулой: lerp = 1000/cl_updaterate * cl_interp_ratio (оптимальное значение 2)

Zivert - CRY | Премьера клипа

04:24

LOBODA - Americano (Премьера сингла, 2021)

03:31

Баста – Любовь и страх (feat. Дворецкая)

05:41

Ozoda - Esla Meni (Offıcıal Clıp 2021)

05:02

Султан Лагучев - Cкучает осень (премьера 2021)

02:29

Oliver Tree & Little Big - The Internet [Music Video]

03:36

Coldplay X BTS - My Universe (Official Video)

04:43

Counter-Strike: Source сочетает отмеченную наградами технологию командной игры и передовой движок Source, обладающий современной графикой, новейшими звуковыми эффектами и дающий ощущение физического присутствия.

У меня лерп в CSS 100.0 Это плохо или хорошо? Если плохо как его понизить? И вообще за что он отвечает?

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

Чтобы максимально понизить лерп, вводишь:

cl_interp_ratio 0
cl_interp 0

При 66 рейтах на многих серверах лерп будет 0 белый.

Я утром где-то читал, там было сказано 1 делишь на тикрейт(в моем случае 66) и получаешь(0,0151) значение cl_interp
А cl_interp_ratio нужен для изменения лерпа.
У меня лерп был оранжевый, значит плохо. Сейчас твое попробую.

Читайте также: