что такое lerp в гаррис моде
Что такое lerp в гаррис моде
Небольшой ликбез
Настройки клиентской части по умолчанию: cl_updaterate 20; cl_interp_ratio 2; cl_interp 0.1.
Как это работает
По сути, значение 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 мс.
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, оставляя его белым на каждом сервере, на котором играете. Это позволит вам снизить к минимуму все проблемы, связанные с вашим соединением с интернетом.
Ещё совет
Чтобы не париться с математикой, можно забиндить клавиши так:
bind «INS» «lerpa+»
bind «DEL» «lerpa-«
bind «HOME» «lerpb+»
bind «END» «lerpb-«
bind «PGUP» «lerpc+»
bind «PGDN» «lerpc-«
Что такое lerp в гаррис моде
Интерполяция помогает сделать игровой процесс более плавным, даже при потере пакетов, или в ожидании обновления пакетов.
При использовании значения интерполяции в 100 мс, всё, что вы видите (другие игроки/позиции объектов), является интерполированным состоянием игры, которое получается из: последнее полученное состояние игры (последнее обновление/тик) и состояние игры 100 миллисекунд назад.
В сущности, это означает, что при cl_interp 0.1 то, что вы видите будет отставать на 100 мс от последнего состояния игры, полученного вами. Добавьте к этому пинг в 50 мс, и, по итогу, то, что вы видите, отстает от происходящего на сервере на 150 мс при каждом обновлении.
Поэтому выставив значение интерполяции на 0, вы потеряете плавность (многие люди жалуются на дёргающихся мобов и Особых Зараженных), но получите самое последнее состояние игры из возможных при вашем пинге, а также даст вам больше времени на то, чтобы дать приклад Охотнику и т.д.
В целом, вам следует ставить значение интерполяции ниже 100 мс. Многие люди меняют свой лерп при смене сторон, но очень часто это осуждается остальными игроками. Текущие конфогловские конфиги отслеживают смену лерпа и сообщают о ней в общий чат, а лиги и турниры разрабатывают правила насчет смены лерпа.
При игре за Выживших лерп следует ставить как можно ниже. Максимальное используемое значение обычно не превышает 67 мс, а минимальное 0 мс. Другие популярные значения: 10 мс, 16.7 мс, 20 мс, 33 мс, 38 мс, 40 мс.
Важно упомянуть, что время между тиками в L4D2 составляет 33 мс, поэтому мы видим разделение в предпочтении 1 тика интерполяции. Теоретически, многие из этих значений излишни, и мало влияют на то, что вы будете видеть на своем экране и как сервер высчитывает ваше положение и ваши удары.
За Зараженных будут более полезны более высокие значения лерпа, так как Выжившие чаще всего убегают в противоположную от Зараженных сторону. Обычно Выживший старается выйти из зоны поражения Танка. Но если танк использует высокое значение интерполяции, то он не увидит, что Выживший начинает двигаться на дополнительные 100+ мс. Используя очень высокие значения лерпа, такие как 400 мс или 500 мс, данная проблема значительно усугубляется. Этот же феномен возникает, когда Особые Зараженные царапают Выжившего. По этой причине Конфогл блокирует значения лерпа выше 100 мс.
В общем и целом, не смотря на то, что вы можете по-прежнему выполнять свои функции в роли Зараженного с лерпом 0, рекомендуется выставлять ваш лерп таким образом, чтобы вам было удобно играть с ним за обе стороны. Также, чем выше ваш лерп, тем сложнее вам будет напрыгивать на Выжившего или пробивать его, так как позиция Выжившего, которую вы видите, будет не соответствовать его положению на сервере. Вы будете чаще замечать, что вы пролетаете насквозь выжившего и не попадаете по нему.
Теперь по-русски: ваше значение 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 и позволит выставить нужный вам лепр.
Обычные сервера допускают 60 updaterate и минимальное количество точек интерполяции (cl_interp_ratio ) в 1. Конфогловские сервера позволяют выставлять значение updaterate на 100 и позволяют ставить количество точек интерполяции 0.
Обратите внимание, что исходя из представленного выше кода, обычно советуют увеличивать ваше значение rate до максимального позволенного в L4D2 равного 100000, что в свою очередь даст серверу знать, что вы способны получать до 100000 байтов, с которым может справиться любое современное соединение. Я также предпочитаю ставить равные значения для cl_cmdrate и cl_updaterate, не смотря на то, что из-за технических ограничений движка, в техническом плане нет особой разницы используете ли вы 30 или 100 cmdrate.
Если вы будете использовать приведенный выше код, то отредактируйте значение cl_interp по вашему желанию, в зависимости от того, какой лерп вы используете. Обратите внимание, что на обычных серверах, таких, как официальный, минимальный лерп, который вы сможете использовать – 16.7.
Значение вашего лерпа отображается на net graph’е примерно посередине:
Это значение, в большинстве случаев, является вашим финальным высчитанным значением, т.е. это значение будет результатом, высчитанным по приведенной выше формуле min/max. Это может быть полезным при определении того, выставлены ли ваши консольные переменные правильно или нет.
ЦВЕТА на net graph’е, по правде говоря, ничего особого не значат. Всё, что они делают, так это вводят в заблуждение и порождают слухи, подобно этим:
35 на серверах Valve оранжевого цвета является нормой. Он является предупреждением о возможной потере пакетов. Желтый цвет говорит о потере пакетов. Я знаю это всё с чужих слов и решил не ознакомляться с существующей литературой на эту тему.
Ваше значение интерполяции выставлено ниже чем 2/updaterate. Этот цвет может появиться только если не вызвано состояние Желтого лерпа.
Все эти сказки про Оранжевый лерп также являются бредом сивой кобылы. По сути Оранжевый лерп является предупреждением, что если у вас начнется потеря пакетов, то объекты вокруг начнут дергаться. Значение, которое они используют (2/updaterate), не является абсолютно произвольным. Если вы попробуете выставить значение вашей интерполяции 2/updaterate или выше, вы получите 2 дополнительных буферных пакета в диапазоне вашей интерполяции в случае, если пакет обновлений будет потерян. Еще раз, Оранжевый лерп является лишь предупреждением о том, что объекты вокруг вас могут начать дергаться при потере пакетов.
Ни желтый, ни оранжевый лерп на net graph’е не является показателем потери пакетов или каких-то проблем с сетью.
Если у вас желтый лерп, то будет неплохой идей попросить администратора сервера повысить частоту кадров на сервере. На практике цвет лерпа не имеет никакого значения.
Правда ли, что нужно выставлять свой лерп в значение близкое к пингу?
Правда ли, что чем выше лерп, тем более неточными будут хитбоксы? Я джае могу увидеть различия, когда включаю отображение хитбоксов!
Мой лерп стал цветным! Я теряю пакеты!
Форум проекта sourceplay.ru
Часовой пояс: UTC+03:00
Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней. | Страница 1 из 1 | [ 14 сообщений ] |
|
Автор | Сообщение | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
qwist | |||||||||||
Зарегистрирован: 06:33 Суббота, 24 Сентябрь 2011 |
| ||||||||||
Зарегистрирован: 06:25 Суббота, 20 Март 2010 |
| ||||||||||
Зарегистрирован: 06:25 Суббота, 20 Март 2010 | |||||||||||
Зарегистрирован: 12:56 Понедельник, 22 Сентябрь 2008 | |||||||||||
Зарегистрирован: 05:30 Четверг, 21 Январь 2010 | |||||||||||
Зарегистрирован: 11:54 Пятница, 20 Ноябрь 2009 | |||||||||||
Зарегистрирован: 19:45 Понедельник, 03 Январь 2011 | |||||||||||
Зарегистрирован: 12:56 Понедельник, 22 Сентябрь 2008 | |||||||||||
Зарегистрирован: 05:30 Четверг, 21 Январь 2010 |
Часовой пояс: UTC+03:00 Кто сейчас на конференцииСейчас этот форум просматривают: нет зарегистрированных пользователей Gamedev sufferingБлог о разработке игр и серверных технологияхКоротко про LerpЛинейная интерполяция (Linear interpolation, которую ещё называют ‘lerp’ или ‘mix’) — очень удобная функция при разработке игр, которая интерполирует в диапазоне [от..до] на основе параметра t, где t обычно находится в диапазоне [0..1]. Другой пример: вы можете использовать линейную интерполяцию, чтобы плавно анимировать движение из одной точки в другую. Определите начальную точку (x1, y1) и конечную точку (x2, y2), затем интерполируйте измерения x и y отдельно, чтобы найти итоговую точку. Или используйте линейную интерполяцию, чтобы прыгнуть к движущейся цели. Каждый кадр интерполировать от текущего значения к целевому значению с небольшим шагом t, к примеру, 0,05. Это всё равно, что сказать: приблизиться на 5% к цели за каждый кадр. Пример посложнее — интерполирует один цвет (красный) в другой (синий). Чтобы сделать это, мы интерполируем (R, G, B) или (H, S, L) каналы цвета по отдельности, по аналогии с тем, как мы делали для 2D или 3D координат. В комментариях заметили, что пример с телепортированием очень зависит от фреймрейта. Лучше учитывать deltaTime : Что такое lerp в гаррис моде* Free Kill – Убийство без реалистичной причины. * RDM – убийство двух или более игроков без реалистичной причины. * Free Arrest – Отправление игрока в тюрьму без реалистичной причины. * Mass Free Arrest – отправление двух или более игроков в тюрьму без реалистичной причины. * Free Demote – Увольнение игрока без реалистичной причины. * GreenZone Abuse – Использование GreenZone, чтобы спастись. * NonRealRope – Нереалистичное привязание похищенного в поверхности. Например, к SkyBox. * Road Building – Строительство на дороге. * Free Check – Обыск без реалистичной причины. * War Abuse – Объявление войны без причины, а также использование войны в своих целях. Например, войну может объявить только одна криминальная группировка к другого, то есть, криминал не имеет права объявлять войну государственным фракциям. * NonRealBuilding – Нереалистичные постройки в городе или строительство в городе не по профессии, или обустройство нереалистичного интерьера. * Free Damag – Нанесение урона без реалистичной причины. * False Shop – Обман или попытка обмана покупателя, находясь в ролях: Оружейник, торговец, интерн, лекарь. * Text Abuse – Нереалистичное позиционирование TextScreen’ов. Например, в воздухе. * Free Raid – Проведение рейда без реалистичной причины. * Door Abuse – Очень частое использование дверей или Fading Door’s, тем самым, устраивая помеху. * Free Warrant – Обыск без реалистиночой причины. * Prop Surf – Спавн пропа под себя и путём его поднятия физганом, передвижение по воздуху. * Prop Climb – Спавн нереалистичной лестницы из пропов. * Prop Block – Закрытие мест пропами, которые создают помеху. Пропы при этом не являются Fading Door с Кейпадами. * Prop Kill – Убийство пропом. * Prop Push – Толкание пропом. * Prop Spam – Создание бессмысленных пропов в большом количестве. * Prop Block NPC – Закрытие мест с NPC, при этом создавая помеху. * MetaGaming – Ввод информации OOC-характера в IC, получение информации по игре, путём OOC, и взаимодействий с ней в IC. Например, общение в скайпе/дискорде. * Spawn Kill – Убийство на спавне. * Revenge Kill – Возвращение на место смерти. * Team Kill – Убийство члена фракции, в которой состоите. * Chat Abuse – Неправильное использование чатов. Например, в /advert НонРп информация или в /ooc вызов администратора.
|