Как изменить лерп в left 4 dead 2

Обновлено: 05.07.2024

Я слышу очень часто такой вопрос даже от опытных игроков лефта, ну конечно и от игроков других игр. Хотелось бы и тут рассказать про него.
Сначала объясню основу игры, откуда берутся так называемые лаги. Клиент-сервер - сетевой код игры созданный на основе обмена пакетами между сервером и клиентом. В этих пакетах информация о текущем состоянии игрового мира (расположении объектов и т.д.) Многие, кстати путают пинг с рассылкой пакетов. Если вы в игре нажимаете на ТАВ, то там слева от ника не пинг, а, так называемая, задержка рассылки пакетов. Чтобы посмотреть пинг надо в консоль прописать PING.
Далее, команда 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 должен быть равен 0, ведь при таком значении lerp нет интерполяции и клиент видит то же, что видит сервер. Вы НЕ можете себе позволить lerp = 0. Почему? Потому что у вас не огромный сетевой ящик, а всего лишь какой-то пк на процессоре интел, который вырубается при 65 градусах. Если же интернет не проблема, то тогда рецепт очень прост. Поднимайте рэйты: cl_cmdrate 66; cl_updaterate 66; rate 20000 - это ваш минимум. В идеале на 100 тиковом сервере у вас должно быть cl_cmdrate 100; cl_updaterate 100; rate 25000. Если сервер позволяет, ставьте cl_interp_ratio 0; cl_interp 0.
Как же записывать лерп в консоль?
1) Напишите в консоли cl_updaterate и запомните значение этой переменной
2) Напишите в консоли cl_interp_ratio 1
3) Разделите 1 на значение cl_updaterate
4) Напишите в консоли cl_interp и присвойте ему то что получили в пункте 3

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

Как изменить лерп в left 4 dead 2

As there is a huge misconception about the Lerp, even by the people who lerps, I believe that some explanations about it are needed.

  1. Your game tells the server what you are doing (moving, jumping, shooting)
  2. The server tells your game how the world is (position of other players or ennemis, if you can jump or shoot, and a lot of other things)
  3. Your game finally shows you what the new world is

The Lerp describes a time value, in milliseconds which is used by the game to smooth animations between each updates. Because of network capacity, latency or errors, 2 updates can arrive with a lot of delay between them, so if your game would only show you a frame when an update is received, it would look all jerky, as if your framerate was really low.
So what does the game do to smooth everything ? It take a state of the world before the most recent update and show you an interpolated version of it. The state taken is defined by your Lerp value, which is 100ms by default.

In other words, every frame you see shows how the world was 100ms before the last update you got.
Which means that, with a ping of 50ms, you will have a 150ms delay with the server.

Now, I'm going to talk about players who change this value, the reason why they do it, and my opinion about it.

tl;dr : if you lerp in pub matches, I despite you.

Players who modify there Lerp are commonly called lerpers, and if a player asks you if "you lerp ?", he want to know if your Lerp is not 100.
You can't change your Lerp from the game option menu, but you can easily do it using the Developer Console, which isn't enabled by default.

Having a latency in a FPS game can be really annoying because your reflex or your aim won't be optimal.
But, in L4D2, the delay (ping+Lerp) doesn't appear do be that important when you're shooting, because the server will mind your Lerp and ping when it calculates if your shot was accurate and you won't even notice that you have this 150ms delay.

So why is Lerp such a big deal ?

When it comes to a close combat situation, this delay makes things a little bit more messy.
Dodging infected by strafing, using melee/bashes and a lot of advanced techniques can be done much more easier if your Lerp is low. Having a default Lerp will requiers more anticipation by the player who wants, for example, to deadstop a hunter or level a charger. That's because the server doesn't use the player Lerp to calculate if there is a collision or not, so the lower your Lerp is, the more accurate your melee swings, bashes or grabs will be.

That's the reason why people lerps, to have all those little advantages. It's easy to understand why most of the good competitive players lerp, it makes the game at high level easier and less anticipation is needed.

Alright, time for opinions.

In many other Valve game nowadays, the Lerp related variables (the ones you change using the Console) are flagged as "cheats", so you can't modify them and play on official servers. Which means the same delay for everyone.

The reason why lerping is allowed in the old Valve games, and in l4D2, is because this setting was intended to be modified by player having a lot of network latency (high ping).
Lowering the Lerp was meant to decrease the graphical performance (jerky game with a low framerate) in exchange for a better connexion.

But today, the internet connections are fast enough to justify this use of the Lerp anymore. The only reason players still lerp is to have the most optimized setting to play, and of course to win.

No more missed charge that looked like you went through the body of the survivor, no more jockey leaps failed while you are following a survivor like his shadow, no more tanks with a 3 meter arms and so on . It sure is tempting to lerp.

But this is a matter of fairplay. I don't mind players lerping on competitive servers (i.e Promod or Confogl) as everyone else does it too, but when it comes to play a public match, most of them keep those settings, to ensure an easy victory among people who doesn't even know how to enable the Developer Console.

To me, this is just like cheating. It doesn't make you invincible like an aimbot, for sure, but it does help in a lot of situation. More like an aimhelp, somehow.
I usually ask someone I suspect to lerp to turn it back to 100, in order to not disadvantage the players who use the default setting (about 95% of L4D2 players) and I usually get insults or taunts as answer.

To all of you lerpers in public matches :
Are you all so proud of winning easy that you don't even wanna try getting a bit of challenge and playing fair?
Are you all handicapped so you need to be helped in order to play?
Stop lying to yourself, lerping helps a lot and you probably won't be doing so well without it.
Try to play at 100, it will learn you to anticipate your deadstops, your levels, and after a bit of playtime, you won't even need to use this unfair setting anymore.

Just please . set it back to 100 if you're going pub.
Add a bind for it, add an addon for it, I don't know . but comon, be fair.

I do hope someday this will be flagged as a cheat, so everyone will be forced to have the same Lerp.
And I also hope that it won't be 100 anymore, as the internet connection are fast and stable enough to handle an update every 33ms.

========
Sorry for this wall of text, and thanks to everyone who took the time to read it.
So yeah, I also wanna know if you guys lerp, if you don't mind telling it.

Как изменить лерп в left 4 dead 2


Лерп. Интерполяция. Гайд по настройке лерпа. (Oxford only)


4,078 уникальных посетителей
86 добавили в избранное











Интерполяция помогает сделать игровой процесс более плавным, даже при потере пакетов, или в ожидании обновления пакетов.

При использовании значения интерполяции в 100 мс, всё, что вы видите (другие игроки/позиции объектов), является интерполированным состоянием игры, которое получается из: последнее полученное состояние игры (последнее обновление/тик) и состояние игры 100 миллисекунд назад.

В сущности, это означает, что при cl_interp 0.1 то, что вы видите будет отставать на 100 мс от последнего состояния игры, полученного вами. Добавьте к этому пинг в 50 мс, и, по итогу, то, что вы видите, отстает от происходящего на сервере на 150 мс при каждом обновлении.

  • Как рано/поздно вам следует дать приклад (и где будет находиться охотник или жокей, когда вы махнете прикладом)
  • Как близко или далеко вам нужно находиться к Выжившему, когда вы царапаете или бьете его (к примеру: длинные руки Танка)
  • Сколько времени у вас есть на скит/приклад до того, как Зараженный коснётся вас
  • Насколько сильно всё изменится если у вас начнется потеря пакетов
  • Насколько плавно будет выглядеть происходящее вокруг вас

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

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

При игре за Выживших лерп следует ставить как можно ниже. Максимальное используемое значение обычно не превышает 67 мс, а минимальное 0 мс. Другие популярные значения: 10 мс, 16.7 мс, 20 мс, 33 мс, 38 мс, 40 мс.

Важно упомянуть, что время между тиками в L4D2 составляет 33 мс, поэтому мы видим разделение в предпочтении < 1 тика интерполяции и > 1 тика интерполяции. Теоретически, многие из этих значений излишни, и мало влияют на то, что вы будете видеть на своем экране и как сервер высчитывает ваше положение и ваши удары.

За Зараженных будут более полезны более высокие значения лерпа, так как Выжившие чаще всего убегают в противоположную от Зараженных сторону. Обычно Выживший старается выйти из зоны поражения Танка. Но если танк использует высокое значение интерполяции, то он не увидит, что Выживший начинает двигаться на дополнительные 100+ мс. Используя очень высокие значения лерпа, такие как 400 мс или 500 мс, данная проблема значительно усугубляется. Этот же феномен возникает, когда Особые Зараженные царапают Выжившего. По этой причине Конфогл блокирует значения лерпа выше 100 мс.

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

Значение вашей интерполяции (лерп) определяется по следующей формуле, основанной на ваших консольных переменных (cvars):

Теперь по-русски: ваше значение cl_interp ограничено до минимума значением cl_interp_ratio/cl_updaterate и до максимума в 0.5 (500 мс), и устанавливается значением консольной переменной cl_interp. Обратите внимание, что, например, cl_interp 0.04 равняется 40 мс.

При выставлении своего лерпа, будет отличной идеей выставить переменную cl_updaterate как можно выше, cl_interp_ratio как можно ниже, а cl_interp выставить по вашему желанию. Это минимизирует лимит, наложенный значением cl_interp_ratio/cl_updaterate и позволит выставить нужный вам лепр.

Например, я использую лепр 16.7, и мой autoexec выглядит следующим образом:
rate 100000 cl_cmdrate 100 cl_updaterate 100 cl_interp 0.0167 cl_interp_ratio -1 // фактическое значение опустится до минимального значения, дозволенного сервером.

Обычные сервера допускают 60 updaterate и минимальное количество точек интерполяции (cl_interp_ratio ) в 1. Конфогловские сервера позволяют выставлять значение updaterate на 100 и позволяют ставить количество точек интерполяции 0.

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

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

Значение вашего лерпа отображается на net graph’е примерно посередине:

Это значение, в большинстве случаев, является вашим финальным высчитанным значением, т.е. это значение будет результатом, высчитанным по приведенной выше формуле min/max. Это может быть полезным при определении того, выставлены ли ваши консольные переменные правильно или нет.
ЦВЕТА на net graph’е, по правде говоря, ничего особого не значат. Всё, что они делают, так это вводят в заблуждение и порождают слухи, подобно этим:

35 на серверах Valve оранжевого цвета является нормой. Он является предупреждением о возможной потере пакетов. Желтый цвет говорит о потере пакетов. Я знаю это всё с чужих слов и решил не ознакомляться с существующей литературой на эту тему. Частота кадров сервера такова, что его собственный внутренний интервал обновления ниже чем ваше время интерполяции. Обычно серверы L4D2 высчитывают 30 кадров в секунду, поэтому, опять же, все значения лерпа ниже 33 мс буду отображаться желтым цветом на обычных серверах. На самом деле, ваша интерполяция, конечно же, функционирует по-прежнему и всё с ней в порядке.
Ваше значение интерполяции выставлено ниже чем 2/updaterate. Этот цвет может появиться только если не вызвано состояние Желтого лерпа.

Все эти сказки про Оранжевый лерп также являются бредом сивой кобылы. По сути Оранжевый лерп является предупреждением, что если у вас начнется потеря пакетов, то объекты вокруг начнут дергаться. Значение, которое они используют (2/updaterate), не является абсолютно произвольным. Если вы попробуете выставить значение вашей интерполяции 2/updaterate или выше, вы получите 2 дополнительных буферных пакета в диапазоне вашей интерполяции в случае, если пакет обновлений будет потерян. Еще раз, Оранжевый лерп является лишь предупреждением о том, что объекты вокруг вас могут начать дергаться при потере пакетов.

Ни желтый, ни оранжевый лерп на net graph’е не является показателем потери пакетов или каких-то проблем с сетью.

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

lerp и его особенности



Клиент-сервер - сетевой код игры созданый на основе обмена пакетами между сервером и клиентом. В этих пакетах информация о текущем состоянии игрового мира (расположении объектов и т.д.)
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-"

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