Что такое lerp и его особенности

41153
Оффлайн
*
952
Rating
GOLD0Respect11
Сообщений124DisRespect10
Counter-StrikeЛев (Leo)RandomM4A1
Расположение:
Russian Federation, Tomsk

chto_takoe_lerp_i_ego_osobennosti
Небольшой ликбез

Клиент-сервер - сетевой код игры, созданый на основе обмена пакетами между сервером и клиентом. В этих пакетах информация о текущем состоянии игрового мира (расположении объектов и т.д.).
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 30000 - это ваш минимум. В идеале на 100 тиковом сервере у вас должно быть cl_cmdrate 100; cl_updaterate 100; rate 35000. Если сервер позволяет, ставьте 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, то вы обрекаете часть своих выстрелов застревать в промежутке клиент-сервер.


Еще совет:
Чтобы не париться с математикой, можно забиндить клавиши так:
Скрытый текст
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-"


Источник:
Скрытый текст
Редактирование: 12 Декабрь 2012, 12:12 от ropox  #1
Оффлайн
*
1680
Rating
GOLD11Respect13
Сообщений406DisRespect55
Скорпион (Scorpio)Headhunter
Расположение:
Belarus


cl_interp 0.0152.
12 Декабрь 2012, 12:36  #2
GOLD0Respect12
Сообщений33DisRespect6
Расположение:
Russian Federation
c Илсани вроде статья ксс посвешена , если не ошибаюсь, лучший ресурс был в свое время
12 Декабрь 2012, 16:51  #3
GOLD0Respect12
Сообщений33DisRespect6
Расположение:
Russian Federation

alias lerpa+ "incrementvar cl_interp 0.01 0.09 +0.0001"// cl_interp +0.0001alias lerpa- "incrementvar cl_interp 0.01 0.09 -0.0001"// cl_interp -0.0001alias lerpb+ "incrementvar cl_interp 0.01 0.09 +0.001" // cl_interp +0.001alias lerpb- "incrementvar cl_interp 0.01 0.09 -0.001"// cl_interp -0.001alias lerpc+ "incrementvar cl_interp 0.01 0.09 +0.01"// cl_interp +0.01alias lerpc- "incrementvar cl_interp 0.01 0.09 -0.01"// cl_interp +0.01bind "INS" "lerpa+"bind "DEL" "lerpa-"bind "HOME" "lerpb+"bind "END" "lerpb-"bind "PGUP" "lerpc+"bind "PGDN" "lerpc-"

не будут работать на кс го , тока на ксс , сам раньше использовал
12 Декабрь 2012, 23:51  #4
GOLD0Respect8
Сообщений232DisRespect11
Стрелец (Sagittarius)Counter-strikeHeadhunter
Расположение:
Russian Federation
А что если лерп 0.0152 у меня оранжевый а 0.0304 белый мне чё ставить???
05 Март 2013, 15:50  #5
GOLD215Respect18
Сообщений459DisRespect13
Расположение:
Russian Federation
Сейчас не отображает лерп больше. Значит ли это то, что команду совсем убрали ? Или она функционирует ?
29 Август 2014, 01:34  #6

Что такое lerp и его особенности

41153

0 Пользователей и 1 Гость просматривают эту тему.

Похожие Темы

Похожие Темы

 

Форум Natus Vincere

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

Игровое сообщество «Natus Vincere» состоит из следующих разделов:

  • Natus Vincere
  • Counter-Strike: Global Offensive
  • Dota 2
  • Hearthstone
  • World of Tanks
  • Heroes of the Storm
  • Разное


Каждый из разделов киберфорума включает подразделы, в которых активно обсуждаются популярные игровые дисциплины, видеоматериалы и турнирные подробности, провайдеры и качество предоставляемого хостинга, игровые девайсы, технические проблемы, как с играми, так и с железом, а также другие важные для каждого геймера детали. Специальный раздел форума «Разное» содержит подразделы, в которых можно обсудить темы, не касающиеся игровых дисциплин, например, подраздел мувимейкинга поможет узнать тонкости создания красивых мувиков и хайлайтов, поделиться советами или найти для себя что-то новое.