Lerp - точность стрельбы!
Интерполяция, лерпа, лаги, лоссы, чоки, гей-конфиги... Есть о чём рассказать.
Зачем? Думаю 2-3 темы на форуме об этом уже есть, только вот остались люди, которые считают, что лерпа компенсирует пинг...
Лоссы/чоки - об этом ещё не рассказывалось на форуме, но всвязи с последними играми нужно рассказать как от них избавиться.
Постараюсь рассказывать понятным языком)).
Сначала поймите это!
Пакет - информация отправляющаяся с сервера к вам на компьютер и обратно, в которой написано что изменилось в игровом мире за последний миг и как изменилось ваше местоположение в нём.
(1) Стандартный net-config.
По умолчанию в tf2 стоят такие значения(вроде бы ибо наизусть не помню):
cl_updaterate 20
cl_cmdrate 33
cl_interp_ratio 1
cl_interp 0.1
rate 20000
Расскажу обо всём по-порядку. В данном конфиге на ВАШЕМ компьютере игровой мир обновляется со скоростью 20 кадров в секунду(cl_updaterate), другими словами вы скачиваете 20 пакетов в секунду.
То есть модельки игроков меняют место-положения 20 раз в секунду. Вы в этом мире обновляетесь 33 раза(cl_cmdrate), другими словами вы обновляетесь на сервере 33 раз в секунду.
Разберёмся с командой rate:
Объясню на примере...
Допустим rate равен 20000. Это означает, что в секунду с сервера скачивается 20000 байт информации. Ну грубо 20 кбайт.(Грубо потому что в килобайте 1024 байта=)).
Но если сервер обновляется всего лишь 20 раз в секунду, то мы должны видеть дёрганное изображение, ибо наш глаз воспринимает 24 кадра в секунду, а не 20. Но мы, как нистранно его видем плавным... Разберёмся, почему же))
(2) Интерполяция
Интерполяция была придумана для того чтобы как раз не происходило никаких дёрганий (или "лагов") в процессе игры.
Возникает вопрос - интерполяция - чо это за уг?
Интерполяция — в математике способ нахождения промежуточных значений величины по имеющемуся дискретному набору известных значений.
Ну грубо говоря, интерполяция вычисляет промежуточные местоположения моделек по двум прибывшим пакетам, тем самым делая движения моделек плавнее.
Но если ей нужны 2 пакета, то получается, что с первым пакетом обновление игрового мира не происходит(компьютер ждёт второго, чтобы вычислить промежуточные значения), а значит происходит задержка(лерпа).
Лерпа(lerp) - время, за которое происходит интерполяция.
Итак, общая задержка равна ping+lerp.
Разберёмся как cl_interp_ratio и cl_interp относятся к интерполяции.
cl_interp_ratio ограничивает значение лерпы "снизу"(т.е. минимальное значение лерпы; как ограничивает - объясню на примере далее). На самом деле это не совсем так, но если вы прочитаете моё объяснение этого, то это будет разрыв мозга.
Везде и всегда желательно это значение ставить на 1. Это означает что с каждым первым (если бы cl_interp_ratio = "2", то с каждым вторым и т.д.) прибывшим пакетом будет происходить интерполяция.
cl_interp - время через которое будет происходить интерполяция. Фиксирует значение лерпы и ограничивает его "сверху".
Пример:
Итак вернёмся к стандартному конфигу и разберёмся что для него значит интерполяция.
cl_interp_ratio 1 : мир обновляется 20 раз (т.к. cl_updaterate = "20"), интерполяция происходит через каждый первый пакет, их у нас 20, то есть 20 раз в секунду. Делим секунду на 20, получаем 0,05 секунды. Это значит, что минимальное значение лерпы в таком конфиге равно 0,05 секунды(или 50ms). Следовательно, cl_interp нельзя выставить ниже 0.05
cl_interp 0.1 : устанавливает значение лерпы, в данном случае 100ms. Но лерпа - это задержка, так ЗАЧЕМ же ставить её в два раза больше чем можно? Перейдём к лоссам и чокам...
(3) Лоссы и чоки
(loss & choke)
Узнать эти значения можно написав в консоли "net_graph 3". Они будут в самом низу.
Желательно, чтоб и то и другое значение было равно нулю.
Что же такое лосс и чок?
Лосс - потеря одного пакета во время его скачивания (у нас их 20 в секунду). В основном происходит если сервер унылый.
Чок - количество пакетов прибывших с задержкой на ваш компьютер с сервера. Происходит в основном если не хватает вашего интернета или канала сервера. Пакеты, прибывшие с задержкой не используются, поэтому по сути лосс и чок можно считать одним и тем же.
Общее количество потери пакетов равно loss + chok.
Например, лосс+чок=5. Это значит, что пять из двадцати (cl_updaterate=20) выстрелов пойдут в молоко!
Вернёмся к интерполяции... был вопрос: "Но лерпа - это задержка, так ЗАЧЕМ же ставить её в два раза больше чем можно?"
Если лерпа удвоена, то в случае потери одного пакета интерполяция всё равно произойдёт. А всё почему? Т.к. интерполяция в два раза больше, пакетов ей надо в 2 раза меньше. То есть если какой-то пакет затерялся, интерполяция всё равно произойдёт, а значит лага не будет.
Перейдём к про-конфигу;)
(4) Pro-config
Дефолтный конфиг очень даже хорош, но вот киберспортсмены ведь крутые, им надо всего да побольше...
Вот конфиг, который признал весь мир. Пишем в "steam/steamApps/"аккаунт"/team fortress 2/tf/cfg/autoexec.cfg" (если нету файла - создаём)
cl_updaterate 66 // сервер посылает 66 пакетов в секунду
cl_cmdrate 66 // вы посылаете серверу 66 пакетов в секунду
cl_interp_ratio 1
rate 30000
cl_interp 0.0152
По сути очеь даже хороший конфиг, но вот от лоссов и чоков он не защищает, потому что лерпа минимальна, а не удвоена (1/66 = 0.152). Лерпа всегда оранжевая как раз поэтому(предупреждает о возможных лагах), а когда происходит потеря пакета, она жёлтая.
Ну вот, то что я могу посоветовать чтобы избавиться от лоссов и чоков.
a) Первый способ
Итак, первый способ - удвоить лерпу. Если вам этот нравится больше, пишем в autoexec.cfg это
cl_updaterate 66
cl_cmdrate 66
cl_interp_ratio 1
rate 30000
cl_interp 0.0304
Спасает от loss+choke = 10. Ну примерно по теории вероятности...
б) Второй способ
Мягко говоря немного по-сложнее. Теряются пакеты? Значит уменьшим их количество, на случай если это происходит из-за слабости сервера-машины; и уменьшим общий размер отправляемого и принимаемого уга на случай, если не хватает канала.
cl_updaterate 50 //минимальное значение по конфигу etf2l.cfg
cl_cmdrate 50 //так же
cl_interp_ratio 1
rate 26000
cl_interp 0.02 // 1/50=0.02
Спасает от loss+choke=15
(5) Гей-про конфиг (gay-pro)
Вам что-то не нравится в названии?
Конфиг позволит выглядить лагающим на сервере и стрелять через стены
К сожалению, первое уже невозможно, ибо конфиг etf2l.cfg не позволяет...
Вот как он выглядел раньше:
cl_cmdrate 20 // вы обновляетесь всего 20 раз в секунду, тобишь лагаете
cl_updaterate 66
rate 9999 // не все попадания по вам засчитываются, не все попадания по противнику засчитываются
cl_interp_ratio 1
cl_interp 0.1 // как раз и позволяет стрелять через стену. Противник ушёл за стену - у вас есть 0.1 секунды чтоб убить его. Ну и кроме того вы видите всего 10 пакетов, движение врага очень плавное, он не дёргается. Не дёргается, значит легко попасть в голову.
Но сейчас etf2l.cfg ограничивает ваше "лагание на сервере". Минимальный cmdrate = 50, минимальный rate = 20000. От таких рэйтов нет никакого смысла, поэтому оставляем плавность и стрельбу через стены...
cl_updaterate 66
cl_interp_ratio 1
cl_interp 0.1
Незабывайте говорить спасибо кому помогла эта информация=)
_________________ shOt_Only ; s3LL
|