Линейная интерполяция (Linear interpolation, которую ещё называют ‘lerp’ или ‘mix’) — очень удобная функция при разработке игр, которая интерполирует в диапазоне [от..до] на основе параметра t, где t обычно находится в диапазоне [0..1].
JavaScript
function lerp ( start , end , t ) <
return start * ( 1 — t ) + end * t ;
console . log ( lerp ( 0 , 100 , 0.5 ) ) ; // 50
console . log ( lerp ( 20 , 80 , 0 ) ) ; // 20
console . log ( lerp ( 30 , 5 , 1 ) ) ; // 5
console . log ( lerp ( — 1 , 1 , 0.5 ) ) ; // 0
console . log ( lerp ( 0.5 , 1 , 0.5 ) ) ; // 0.75
К примеру, разделите время цикла на продолжительность цикла, и вы получите значение t между 0,0 и 1,0. Теперь вы можете отобразить это значение t в новый диапазон, например, lerp (20, 50, t) , чтобы постепенно увеличить радиус круга, или lerp (20, 10, t) , чтобы постепенно уменьшить толщину линии.
Другой пример: вы можете использовать линейную интерполяцию, чтобы плавно анимировать движение из одной точки в другую. Определите начальную точку (x1, y1) и конечную точку (x2, y2), затем интерполируйте измерения x и y отдельно, чтобы найти итоговую точку.
Что такое лерп
Или используйте линейную интерполяцию, чтобы прыгнуть к движущейся цели. Каждый кадр интерполировать от текущего значения к целевому значению с небольшим шагом t, к примеру, 0,05. Это всё равно, что сказать: приблизиться на 5% к цели за каждый кадр.
Пример посложнее — интерполирует один цвет (красный) в другой (синий). Чтобы сделать это, мы интерполируем (R, G, B) или (H, S, L) каналы цвета по отдельности, по аналогии с тем, как мы делали для 2D или 3D координат.
В комментариях заметили, что пример с телепортированием очень зависит от фреймрейта. Лучше учитывать deltaTime :
Источник: suvitruf.ru
Что значит Lerp
Недавно играл л4д2 в сражение на забугорном серваке походу(кроме меня русским был всего 1 чел), и меня тупо начали обвинять типо я читер(даже выгнать пытались, но слава богу моя команда была против), и такие фразы Lerp like hell, у меня и так лаги с фризами(хоть пинг более менее норм), а они ещё читером кличут — обидно. Ведь я никогда читы не ставил, да и вак никто не отменял.
Комментарии отключены
Лучшие комментарии
посмотри эти видео и думаю поймешь примерно:
youtu.be/znjwW5hfGxw
www.youtube.com/watch?v=vF25ZnMWPn0
Интерполяция или «лерп» — это предугадывание/предсказывание всего происходящего в игре. Сделано это для сглаживания движений игроков, ботов, предметов окружения и т. д. Работает эта технология не всегда правильно, снижая точность стрельбы и иногда даже визуально пропуская/задерживая быстрые действия, такие как прыжки охотников и жокеев, бег громилы и т. п. Проще говоря в игре вы видите одно — а на сервере происходит совсем другое или вы видите это с задержкой.
Из-за этого лерп можно сравнить с пингом. Чем ниже пинг — тем удобней играть, тоже касается и лерпа. Из-за этого многие игроки понижают лерп до 0, то есть отключают интерполяцию насовсем. Но сделать это можно не на всех серверах — сервер должен быть настроен для этого, иначе вы заметите лагающих/телепортирующихся мобов и ведьм. Лерп меняется с помощью переменной cl_interp, которая по умолчанию равна 0.1
Интерполяция в КС ГО | Настройка cl_interp; cl_interp_ratio; cl_interpolate; cl_lagcompensation
Также есть переменная, которая выбирает диапазон лерпов cl_interp_ratio
Так как лерп все меняют как хотят и идеального значения просто не существует, показываю только два варианта:
Вариант который подойдет для всех серверов:
cl_interp_ratio 0
cl_interp 0.0667
Вариант для соревновательных серверов. Подойдет почти для всех серверов с тикрейтом выше 30, так как администраторы повышающие тикрейт, также заботятся о комфортной игре с низкими лерпами, хотя есть вероятность встретить сервер с 30 тикрейтом и поддержкой низких лерпов или же наоборот сервер с тикрейтом 100 на котором будут лаги с низким лерпом.
cl_interp_ratio 0
cl_interp 0
Хочу отметить, что лерп в L4D2 можно изменить в любое время (в отличии от CS:GO) и этим часто пользуются «профессиональные» игроки, играя за выживших они ставят низкий лерп (например cl_interp 0), а играя за заражённых наоборот повышают (например cl_interp 0.0667), объяснять зачем это делается не стану. На многих серверах установлены плагины контролирующие лерп, они автоматически могут вас кикнуть или переместить в зрители за слишком высокие значения лерпа или за его слишком частые изменения. Поэтому не злоупотребляйте частой сменой лерпов.
в общем в инете достаточно инфы на эту тему, если загуглить lerp или cl_interp
Из фразы Lerp like hell я понял что Lerp на ихнем определенном сленге означает оскорбление или мат, так как like hell означает Как, черт возьми или Черта с два.
Источник: stopgame.ru
Настройки соединения, Lerp
cl_updaterate – число пакетов которые клиент получает от сервера каждую секунду.
cl_cmdrate – число пакетов которые клиент посылает серверу каждую секунду.
rate – максимальное количество байтов, которые Вы можете получить в секунду.
Интерполяция – получение промежуточных значений какой-либо величины, путем усреднения крайних. Интерполяция служит для сглаживания картинки, т.к. пакетов приходящих от сервера зачастую не хватает для того чтобы картинка смотрелась плавно.
Принцип работы:
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, тем большую долю в вашей картинке будет играть интерполяция.
С самого начала кажется, что в идеале lerp должен быть равен 0, ведь при таком значении lerp нет интерполяции и клиент видит то же, что видит сервер. Вы НЕ можете себе позволить lerp=0 по двум причинам :
- Ваш интернет канал оставляет желать лучшего. Как следствие вы можете себе позволить исключительно скромные сетевые настройки. Скорее всего те, что стоят по умолчанию, а быть может и еще хуже. При cl_updaterate 20, даже если все пакеты благополучно приходят от сервера к клиенту, вы видите 20 кадров в секунду (не имеет значения, какой у вас компьютер). Человеческий глаз воспринимает эту картинку как дерганую. Если же потери (choke) есть, то играть вы просто не сможете, так как будете видеть слайдшоу. Поэтому если у вас плохое соединение и постоянно теряются пакеты, то lerp=0 не для Вас. Вам нужна интерполяция cl_interp_ratio 2.
- Настройки серверов непозволяют клиентской части выставлять необходимые значения некоторых переменных. Основная проблема безусловно в переменной cl_interp_ratio, на большинстве серверов конфиг (настройки сервера) не позволит играть с этой переменной равной нулю. На данный момент значение серверной переменной sv_client_min_interp_ratio 1 (эта команда отвечает за минимальное значение cl_inerp_ratio, которое может иметь клиент находясь на этом сервере) не позволит клиенту сделать lerp меньше, чем 10 мс.
Как же настроить lerp.
Поднимайте рэйты: 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, кадров в секунду – вполне достаточно, чтобы комфортно воспринимать игру без интерполяции и лагов. Если же сервер не позволяет вам играть без интерполяции (пока что, это самый распространенный случай), рецепт очень прост:
- Напишите в консоли cl_updaterate и запомните значение этой переменной.
- Напишите в консоли cl_interp_ratio 1 .
- Разделите 1 на значение cl_updaterate .
- Напишите в консоли 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, оставляя его белым на каждом сервере, на котором играете. Это позволит вам снизить к минимуму все проблемы, связанные с вашим соединением с интернетом.
Настройки соединения и lerp by RedDog
cl_interp_ratio 1
cl_interp 0.045
cl_cmdrate 50
cl_updaterate 50
rate 30000
cl_lagcompensation 1
cl_resend 4
Источник: gmania.ru