Страница 1 из 212»
Модератор форума: AveSatanas(кУтЯшЪ), elrike, Kaxa, Lelik 
Форум » Игры » Counter-Strike Source » О lerp и его особенностях
О lerp и его особенностях
1alex1Дата: Пятница, 08 Январь 10, 21:09 | Сообщение # 1
Генерал-полковник
Группа: Проверенные
Сообщений: 887
Награды: 7
Репутация: 22
Статус: не в сети
О lerp и его особенностях

Автор: Landdropper

Как вы знаете, после летнего обновления сетевой код DoD:S был изменен. Появилось несколько новых переменных и несколько старых убрано. Об их значении и пойдет речь.
Небольшой ликбез

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

Источник: http://www.dayofdefeat.su/articles/theory/theo_lerp

Добавлено (08 Январь 10, 21:09)
---------------------------------------------
таже фишка и в Counter-Strike Source, так как движок один.



 
elrikeДата: Пятница, 08 Январь 10, 22:29 | Сообщение # 2
GS-Admin
Группа: Администраторы
Сообщений: 776
Награды: 23
Репутация: 52
Статус: не в сети
+1 Полезная информация пользователю.
Советую,прежде чем торопиться использовать такие "alias",СТОПИЦОТ раз перечитать пост и понять мозгами как это работает.
Не забываем,что такие "alias" меняют частные настройки клиента.И не исключено что на каждом конкретном сервере они будут работать НЕ одинаково.Многие сервера,на которых стоит плагин "Zblock" уравнивают настройки клиента до определенных сервером величин.И потому,могут только мешать клиенту(лаги и т.п.)в игре.Что касается "rate" настроек.Правильно настроенные "rate" не только дополняют комфорт и результативность в игре,но и в целом не мешают корректной работе сервер программы.То есть сервер(при настройке одинаковых данных "rate")работает намного стабильнее.И ограниченные ресурсы(оперативка,нагрузка на процессор,разделение интернет канала)распределяются на всех клиентов в равных количествах,что является гарантией стабильности работы железа,на котором установлен сервер.Напоминаю,что многократное нажатие "bind" (при нахождении на сервере)создает нагрузку на интернет порт игрового сервера,в качестве запроса на отклик.Это вызывает сбои в работе и по сути является методом "DDoS" атаки.И намеренное многократное использование влекущее за собой нарушение в работе оборудования и программного обеспечения является уголовным преступлением по нашему(!)законодательству.Вплоть до наказания,в виде заключения под стражу на срок до полутора лет.Не все "bind" одинаково полезны biggrin
Играйте с умом господа.


Обидеть админа может каждый... Кто не понимает,чем это грозит!!!
 
1alex1Дата: Пятница, 08 Январь 10, 23:42 | Сообщение # 3
Генерал-полковник
Группа: Проверенные
Сообщений: 887
Награды: 7
Репутация: 22
Статус: не в сети
Полностью поддерживаю.




Сообщение отредактировал 1alex1 - Суббота, 09 Январь 10, 00:03
 
RomanДата: Воскресенье, 27 Июнь 10, 12:37 | Сообщение # 4
Рядовой
Группа: Пользователи
Сообщений: 1
Награды: 0
Репутация: 0
Статус: не в сети
Как мне удалить эту хню??
 
1alex1Дата: Воскресенье, 27 Июнь 10, 17:31 | Сообщение # 5
Генерал-полковник
Группа: Проверенные
Сообщений: 887
Награды: 7
Репутация: 22
Статус: не в сети
так же как и ставил.

Добавлено (27 Июнь 10, 17:31)
---------------------------------------------
а вобще она прописывается в твой конфиг.



 
antiДата: Четверг, 08 Декабрь 11, 02:49 | Сообщение # 6
Подполковник
Группа: Проверенные
Сообщений: 104
Награды: 5
Репутация: 11
Статус: не в сети
Здравствуйте всем сразу,cl_interp_ratio 1или2;cl_interp 0.0304 - 1alex1,ну я так понимаю ты против таких настроек
для всех играков!Ну Lёlik же присутствовал дайте ему команду - пускай отпишется,принудительно!Ну я понимаю топ
поменяется - ну вамто какая разница,людей-то больше будет!Прошу отписать,могули я требовать,от всех играков про-
писывать выше указанную интерполяцию?
 
AlliumДата: Среда, 14 Декабрь 11, 22:34 | Сообщение # 7
Сержант
Группа: Пользователи
Сообщений: 23
Награды: 0
Репутация: 4
Статус: не в сети
Хотел подробно описать проблему lerp и влияние его на сервер озвученную Anti, но у алекса грамотно написано:
Quote (1alex1)
lerp - промежуток времени в котором пакеты полученные клиентом будут интерполироваться. По сути, значение lerp определяет пропорцию между пакетами, пришедшими от сервера, и пакетами, сгенерированными на клиенте. Чем меньше значение lerp, тем меньше пакетов будет "придумано" на клиентской стороне, тем точнее то, что вы видите, будет соответствовать тому, что происходит на сервере. Чем больше значение lerp, тем большую долю в вашей картинке будет играть интерполяция.

Могу только добавить:
1. Сразу видно, что к серверу lerp не имеет непосредственного отношения. Интерполяцию сделана для гладкости картинки, но её значение по умолчанию 0,1 на мой взгляд велико т.к. было расчитано видимо на более слабую технику и интренет соединение (cl_updaterate 20) поэтому с увеличением тиков логично понизить интерполяцию
по формуле приведенной алексом:
Code
interpolation period = max( cl_interp, cl_interp_ratio / cl_updaterate )


2. На сервере своя система - лагокомпенсация пакетов независимая от клиента (это не интерполяция аналогичная клиенту)
Работает эта система по следующему принципу:
Если ты стреляешь например в 21:05:02 , но по факту сервер из-за задержек узнает это в 21:05:03 , и он учитывает эту задержку по системе:
(Command Execution Time = Current Server Time - Packet Latency - Client View Interpolation)
и игрок попадает, хотя в это время хитбоксы цели уже в другом месте.
Предвидя, что станут тыкать в Client View Interpolation поясню, что это значение, а не сервер производит интерполяцию.
Это значение учитывается для каждого игрока и если даже интреполяция 0, то не забывайте, что 0 это тоже значение.
Вот как раз из=за даже мелких неточностей сбивок в этой формуле бывают казусы когда клиент видит попадание
(кровь - кстати тоже на стороне клиента) а по факту его нет, чтобы компенсировать это надо увеличть количество тиков.
Сейчас грубо говоря сервер держит в памяти(симулирует) события за 1 секунду в виде 66 снимков (тиков - tick).
Для игры в реальном времени (без всяких компенсаций) на сервере надо увеличить тики, а игроку убрать интерполяцию,
но к сожалению остается Packet Latency и тут уж все зависит от развития технологий, а пока их нет приходится терпеть такую систему.
Альтернатива этой системе на данный момент только одна - учет попаданий на стороне клиентов и передача уже на сервер факта попадания, но
это будет самое большое раздолье для читеров.

P.S. Я надеюсь, что кусочек мозаики по работе клиент-сервер теперь приоткрылся и снимет ряд вопросов. И не смотря на знание механики взаимодействий,
эти лаги всё равно вызывают у меня ворчание на других игроков и даже редкие матерные восклицания, но все мы люди...
 
1alex1Дата: Четверг, 15 Декабрь 11, 09:10 | Сообщение # 8
Генерал-полковник
Группа: Проверенные
Сообщений: 887
Награды: 7
Репутация: 22
Статус: не в сети
Allium, ну хоть один понял что к чему, и грамотно написал, и самое главное в нужной теме а не где попало.
теперь от меня, было бы не плохо если хостинг разрешит выставить рейты 100, тогда и играть стало бы в радость.
хотя судя по лагам хостинг жмется на сервере, и загружает его по максимуму, из чего следует вывод, что хрен нам дадут поставить 100 тик рейт.


 
antiДата: Среда, 11 Январь 12, 20:41 | Сообщение # 9
Подполковник
Группа: Проверенные
Сообщений: 104
Награды: 5
Репутация: 11
Статус: не в сети
Здоровы будете,зарание извинюсь - кого покоробит!Ребят всё скопировали с инета и все довольны - а своя голова на
что дана!Ну так-то формально всё правильно - формулы там всё... .Как переводится термин "интерполяция" - да очень
просто"подделка"(с латинского).Вот пример ,ни когда не задумывались,чё так бывает игрок для всех лагает - а у него
всё нормально! - И главное постоянно выигрывает - методично карту за картой!А всё дело в его конфиге.А чтоже там
такого может быть,в этом конфиге? -Интерполяция - подделка,обманка! Да настройки одного игрока не влияют на нас-
тройки другого - они только влияют как последний видит первого!!! И как он в него попадёт если он не там ,где его
видят! Тут зашёл на сервер чемпион моего района - ну у парня 120% зрения,ну такой вот он от природы и служил в
спец подразделении!И учиться на веб-дизайнера - точнее отучился уже!Так его Allium делал как сынка! Ваш лерп вли-
яет не только на сервер но и на других играков - не верим мне,поверьте "ОМу"! -В слове "аллиум" - есть слово ум,
а должен быть разум!У Задорнова - знаете как! Умный человек - это который знает!А РАЗУМНЫЙ - тот который
понимает,
то что он знает!Ребята не стисняемся открываем - физика 7 класс... .чииитааааем... .-Находим новое! Удивляемся!!
А вот потом - посылаем на фиг эти статьи,и начинаем думать головой!Ставим плагин ZBlock - который "400 кг" пери-
писывает уже ,точнее с нуля пишет!А дальше... - не знаю что..!? НУ ТАК ПО КРАЙНЕЙ МЕРЕ ФОРУМ ТОЧНО БУДЕТ НЕ НУЖЕН!!!
 
LelikДата: Среда, 11 Январь 12, 23:10 | Сообщение # 10
Подполковник
Группа: Модераторы
Сообщений: 129
Награды: 4
Репутация: 17
Статус: не в сети
Привет Всем!
я пропущу про интерполяцию.
Меня заинтересовало, а на чем он пишет? И есть ли исходники zblock ?
 
AlliumДата: Среда, 11 Январь 12, 23:35 | Сообщение # 11
Сержант
Группа: Пользователи
Сообщений: 23
Награды: 0
Репутация: 4
Статус: не в сети
1. "интерполяция" (лат. interpolatio - изменение, подновление)
Соврменное значение: обозначает нахождение промежуточных значений по ряду логических или статистических данных.
В прошлом: обозначало слова, которых не было в оригинале, появлявшиеся в тексте при редактировании или переписке.
2. Твой чемпион-спецназовец скорей всего обыграет меня в пейнтбол на реальной площадке. Контра это вымышленный мир со своими законами физики и здесь его опыт не поможет. Что касается что он районный чемпион, то моя команда на заре выхода контры участвовала в чемпионате москвы и заняла 3-е место, если я правильно помню 2002 год, часть игр еще проходила в компьютерном клубе Арена на бауманской ( в период рассвета более 150 компов было, пока инет у народа быстрый дома не стал появляться и клуб не закрылся).
3. Allium для меня означает лук, в переводе с латыни есть несколько вариантов "жгучий" или "победный" так как легионеров им кормили. Так что слово ум и мой ник к друг другу отношения не имеют. Вообще понятие Разум весьма сложно и ёмко, единственное, что я могу всем пожелать, это чтобы разум в вас не спал, ибо "Сон разума рождает чудовищ". (Извините пофилософствовать поятнуло)
Физику как и математику знаю довольно хорошо, но в основном в областях связанных со строительством и энергетикой, чего и всем желаю.
4. Я полностью за установку Zblock, если "400кг" пишет его с нуля он реально крут, я думал чтоб хоть конфиг нормальный для него сделали.
5. Самое главное. Я уже давал ссылку в игре и тебе Anti и "400кг" привожу её для народа
https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
Здесь расписана сетевая архитектура source движка, прочитав статью сразу понятно зачем нужна интерполяция, что она из себя представляет и какие неизбежные минусы она приносит ( учтите что время реакции взрослого здорового человека 100мс, а время простейшей двигательной реакции, фиксирующей факт появления нек-рого сигнала («реакция обнаружения»), обычно составляет около 0,2 сек). Кстати та формула определения lerp, которую ты выичил наизусть, взята именно отсюда. Прочитай пойми и ответь мне аргументировано как интерполяция на стороне клиента влияет на железо сервера.

P.S. Мне также интересно мнение других игроков, которые прочтут статью по вышеприведенной ссылке и выскажут свое мнение по влиянию интерполяции на железо сервера.
 
LelikДата: Четверг, 12 Январь 12, 00:27 | Сообщение # 12
Подполковник
Группа: Модераторы
Сообщений: 129
Награды: 4
Репутация: 17
Статус: не в сети
чтобы сразу отпали вопросы.
на русском там же, Российский флаг.
или вот ссылка
https://developer.valvesoftware.com/wiki....king:ru
 
SuperTazikДата: Четверг, 12 Январь 12, 00:44 | Сообщение # 13
Госу ПРО ТОП1
Группа: Администраторы
Сообщений: 180
Награды: 8
Репутация: 14
Статус: не в сети
Zblock для ксс cделал Jedi обновляет его тоже он на этом сайте http://zblock.mgamez.eu/news.htm там вроде нет исходников (я не нашел).

 
SuperTazikДата: Четверг, 12 Январь 12, 00:49 | Сообщение # 14
Госу ПРО ТОП1
Группа: Администраторы
Сообщений: 180
Награды: 8
Репутация: 14
Статус: не в сети
Quote (Allium)
P.S. Мне также интересно мнение других игроков, которые прочтут статью по вышеприведенной ссылке и выскажут свое мнение по влиянию интерполяции на железо сервера.

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

 
1alex1Дата: Четверг, 12 Январь 12, 06:15 | Сообщение # 15
Генерал-полковник
Группа: Проверенные
Сообщений: 887
Награды: 7
Репутация: 22
Статус: не в сети
Блин такое ощущение что некоторые не хотят понимать.
мне лично фиолетово, спецназовец в контру играет или 5-летний пацан.
опыт из жизни в играх не всегда поможет, это разные вещи (если так можно выразиться).
ОЧЕНЬ ВНИМАТЕЛЬНО смотрим ролик (качаем и смотрим)
и еще, есть первый пост, кто не согласен, тот пусть без разглагольствований приведет пример из практики, не на домашнем компе, а по факту с работой сервера, и разными тик рейтами и лерпами, что сейчас не реально, так как почти весь доступ закрывает хостинг.
статья из первого поста была взята не из головы когото там, а реально из практики, вобщем надоело обьяснять всем простую "истину", пусть думают как хотят, у них есть своя голова, а время все расставит по своим местам.




Сообщение отредактировал 1alex1 - Четверг, 12 Январь 12, 06:18
 
Форум » Игры » Counter-Strike Source » О lerp и его особенностях
Страница 1 из 212»
Поиск: