Избавиться от лагов: настройка КЛИЕНТА - ФОРУМ - HL2DM University RUS
Доброе утро, вы зашли как гость.
Новые сообщения | Поиск
Страница 1 из 11
ФОРУМ » Форумы по разделам » Техника » Избавиться от лагов: настройка КЛИЕНТА
Избавиться от лагов: настройка КЛИЕНТА
Пятница, 04.12.2015, 20:15
Пост 1
hate-n-fury

Модератор
с 11.04.2009
178 сообщений
Offline
Старая статья про сетевой код написана мной в неадеквате и для сравнительно опытных игроков и админов, поэтому некоторыми трудно переваривалась и фтопку ее. Вот вам моя новая инструкция с форума hl2dm.ru, облегченная, актуальная (и, надеюсь, более понятная crazy ).

Сначала найдите неисправность.

Конфиг

В папке "...\Half-Life 2 Deathmatch\hl2mp\cfg" (аналогично для других игр на Source) откройте или создайте файл "autoexec.cfg", который считывается автоматически при каждом запуске игры. В нем "Блокнотом" или любым другим текстовым редактором будете добавлять или менять все нужные вам консольные параметры и их значения через пробел в кавычках, каждый с новой строки. Значения из одного слова или числа можно оставлять без кавычек. Первую строчку оставьте для комментария или пустой. Комментарии должны начинаться с // или #.

Общие настройки

На Vista и более новых системах Windows в движке Source встречается странный глюк, который можно упустить из виду: если в игре есть ограничение фреймрейта, то есть консольный параметр fps_max не равен 0, сетевая игра работает значительно хуже. В таких случаях его нужно ставить на 0 в своих конфигах! Лучше поставить лимит в настройках драйвера видеокарты, если это возможно.

Мощность компьютера и настройки графики и звука должны обеспечивать не меньше 80 кадров в секунду для комфортной игры на уровне, в идеале не меньше 128, чтобы задержки были минимальны. В любом случае фреймрейт должен быть выше ваших параметров cl_cmdrate и cl_updaterate, которые описаны ниже.

По возможности используйте родное разрешение и максимальную частоту развертки экрана, отдельно для игры их можно задать в параметрах запуска. Чтобы не слепнуть в темных или ярких участках карт, гамму в игре поставить максимально ярко, выключить HDR и bloom. Вертикальную синхронизацию/VSync выключить обязательно, чтобы не было лишней задержки управления. Если есть запас мощности видеокарты и вам так будет удобнее, можете повысить настройки теней до средних (в играх до CS:GO) и включить небольшое сглаживание MSAA. Остальные параметры картинки мало влияют на комфортность изображения, только на фреймрейт и время загрузки.

С многоядерным процессором попробуйте включить в игре многопоточную обработку/multicore rendering для повышения фреймрейта. При нем параметром запуска -threads N позволяете игре использовать N потоков процессора, в случае зависаний или вылетов игры выключите опцию.

Скорость обновления мыши/refresh rate/polling rate должна быть настолько высокой, насколько позволяет установить ее драйвер. Акселерацию нужно выключить везде (в Windows - снять флажок "повышенная точность указателя" в настройках мыши в панели управления/параметрах системы). Добавьте параметры запуска -noforcemaccel -noforcemparms. Raw input/грубый ввод - включить. Подробнее про устранение акселерации и задержек мыши можете нагуглить самостоятельно.

Настройки соединения с сервером, они же "рейты"

rate - задается в бАЙтах в секунду, ограничивает максимальные скорость передачи данных от сервера к вам и скорость загрузки файлов с сервера. При cl_updaterate 66 для игры без лагов HL2DM требует до 96000 бАЙт (чуть меньше 1 мегабИта) в секунду. Можно поставить rate даже быстрее, но никак не быстрее, чем позволяет качать ваше интернет-соединение. Скорость линии можете измерить на speedtest.net или другим способом.

cl_updaterate - определяет, как много обновлений в секунду вы хотите получать с сервера. Чем больше пакетов, тем больше нужно скорости соединения для стабильной работы, см. параметр rate.

cl_cmdrate - определяет, сколько раз в секунду вы будете отправлять на сервер ваши действия в игре и время, когда они были совершены, чтобы сервер мог учесть задержки и скомпенсировать их. Физически не может быть выше вашего фреймрейта в данный момент. Большая частота требует больше скорости линии на выход, но эти требования небольшие и можно их не учитывать.

Обе частоты - и cmd, и update - физически ограничиваются тикрейтом сервера (это частота перерасчета процесса игры), а в HL2DM все серверы работают на частоте 66, так что в этой игре ставить апдейт и цмд выше 66 не имеет смысла. Если же поставить их выше тика, немного затруднится движение в игре, а вы не получите никакой выгоды, кроме эффекта плацебо.

Как работает интерполяция
Ситуация игре может меняться не очень плавно даже при 66 обновлениях в секунду: примерно то же, что и играть при 66 FPS. Поэтому игра отображает ее с небольшой задержкой, чтобы успеть получить от сервера хотя бы 2 целых пакета и математически дорисовать между ними недостающие кадры. Значение lerp в таблице net_graph отображает текущую задержку для интерполяции в миллисекундах.

cl_interp_ratio - множитель, который на всякий случай задает минимально допустимую задержку (lerp) в шагах (интервалах) между обновлениями: 1 шаг = время на 2 пакета, 2 шага = 3 пакета и т. д. Обратите внимание: длину интервала игра рассчитывает не из реальной частоты обновлений и не из тикрейта сервера, а из cl_updaterate у вас в конфиге. Это позволяет при завышенном cl_updaterate ставить задержку меньше, чем нужно (недоработка игры). cl_interp_ratio желательно ставить 2.

cl_interp - задает желаемую задержку в секундах. Стандартное значение в 0.1 по-моему не оправдано и создает очевидную задержку в 100 мс в добавок к пингу и времени монитора. Оптимальное значение для хорошего соединения = 2 / cl_updaterate + 0.001~0.005 (чтобы покрыть колебания).

cl_predict - определяет, будет ли клиент предусматривать результаты некоторых событий (ваши движения и состояние оружия, например) и показывать их сразу, чтобы не пришлось мучительно терпеть задержку обновлений от сервера. Стандартное значение = 1 - включено.

Когда предсказанная игровая ситуация на клиенте отличается от реальной, клиент "исправляется", но делает это не мгновенно, а со специальным сглаживанием на подобие интерполяции. Это важно, чтобы вашего персонажа при поправке меньше кидало и дергало.

cl_smooth - вкл/выкл сглаживание поправок. По стандарту включено.

cl_smoothtime - время в секундах на поправку: чем меньше, тем резче. Стандартное значение = 0.1.

cl_pred_optimize - оптимизирует предсказание на клиенте. Стандартное значение = 2, при нем не будет делаться перерасчет, если не было ошибок. При значении 1 данные не будут копироваться без обновления от сервера (?).

Что еще важно знать про рейты

Тикрейт сервера физически ограничивает возможную частоту обновлений.

Для компенсации задержек сервер помнит последнюю секунду и отматывает ее назад, потому игроки с большими ping и lerp могут убивать вас там, где вас давно нет, например за углом.

Конфиг сервера временно ограничивает ваши рейты, пока вы к нему подключены. Эти ограничения могут быть неадекватными, и тогда вам придется рассчитывать и менять рейты во время игры, чтобы играть без проблем. Например, в HL2DM можно попасть на сервер, который жестко задает rate не выше 30000, что при cl_updaterate 66 вызовет заметные лаги и промахи (если включить таблицу net_graph 3, будет отображаться залипание/choke), так что придется этот параметр снижать или просто валить с этого лагодрома. Вот список возможных серверных ограничений:
sv_minrate
sv_maxrate
sv_minupdaterate
sv_mincmdrate
sv_maxupdaterate
sv_maxcmdrate
sv_client_min_interp_ratio (стандарт 1)
sv_client_max_interp_ratio
Их можно проверить, подключившись к серверу и введя параметр в консоль без значения.
В лиге hl2dm.net максимальные рейты и быстрый канал ставятся принудительно, чтобы не было спекуляций, а игроки с другими рейтами выкидываются с серверов автоматически.

Ставить lerp меньше, чем нужно на 2 обновления + небольшой запас на задержку пакета, не желательно, потому что интерполяция может давать сбои с неочевидными последствиями. Большинство серверов не позволят поставить cl_interp_ratio меньше, чем 1.

Расчет попаданий очень мало (если вообще) зависит от рейтов, иначе это плацебо. Он сильно зависит от работы сервера и стабильности пинга. Из-за несовершенства движка даже в идеальных условиях ваши 100%-е попадания будут засчитываться не всегда. Заранее смиритесь с этим и не убивайте нервы себе и другим игрокам.


Главный урок Библии: человек способен изобретать целые вселенные только чтобы не признавать, что он лишь смертный кусок мяса и он сам есть главная причина его бед.

Отредактировано hate-n-fury - Понедельник, 14.12.2015, 17:20
Профиль
Пятница, 04.12.2015, 21:37
Пост 2
FENIX

Администратор
с 20.06.2008
2130 сообщений
Offline
Спасибо за актив galstuk
у меня всегда стояли не особо адекватные настройки lean (судя по оранжевому цвету), но я заметил когда-то давно, что чем меньше interp, тем легче попасть в какую-либо цель (например, в летящую бочку или кружок на био при распрыге) и поставил все interp на 0, но это мой субъективный взгляд... скорее всего я ошибаюсь. сколько не возился с рейтами (а возился и читал я про них очень мало), так и не выявил сильной разницы для себя, ведь на всех серверах стоят свои ограничения. Сегодня повозился чуть-чуть с конфигом и подправил несколько вещей, играть стало плавнее, а с хитами непонятно... буду тестить.

старый cfg:
Код
net_graphpos "2"
rate "110000"
cl_updaterate "100"
cl_cmdrate "100"
cl_interp_ratio "0"
cl_interp "0"
cl_interp_all "0"
cl_allowupload "0"
cl_forcepreload "1"
cl_lagcompensation "1"
fps_max "300"
cl_pred_optimize  "2"
cl_smooth "0"


новый cfg:
Код
net_graphpos "2"
rate "66000"
cl_updaterate "66"
cl_cmdrate "66"
cl_interp_ratio "1"
cl_interp "0.01"
cl_allowupload "0"
cl_forcepreload "1"
cl_lagcompensation "1"
fps_max "0"
cl_pred_optimize  "2"
cl_smooth "1"
ПрофильСайт
Пятница, 04.12.2015, 22:39
Пост 3
hate-n-fury

Модератор
с 11.04.2009
178 сообщений
Offline
Цитата FENIX ()
interp на 0

По стандарту сервер насильно ставит интерполяцию в минимум 1 шаг, поэтому отключить везде не получится. Не проверял, как сейчас настроены в этом плане Public Match серверы.

Цитата FENIX ()
rate "66000"

Если я ничего не путаю, после пересадки на Orange Box при 64000 на мясе из 6-8 человек появлялся чоук на респауне и не только, пришлось поднять. Проверь, не появляется ли у тебя, и не стесняйся ставить огромный запас - современный интернет позволяет.

Цитата FENIX ()
с хитами непонятно


По документации клиент отправляет свое точное время серверу, так что теоретически лерп не должен влиять, но нет способа объективно проверить. Сейчас у меня не лагающий провайдер, монитор на 144 Гц и мышка с хорошим сенсором вместо топорной Bloody: с хитрегой ясно на сей день только то, что она сильно ухудшается при скачках пинга и "шатаниях" сервера (var), но при любых условиях и настройках очень грустная dash2 Разработчики говорят то же самое о CSGO: проблема в железе. В этом году еще и сделали для отгораживания от читеров перерасчет разброса пуль на сервере (*рукалицо*). ИМХО эти гандоны за столько лет могли запросто написать полностью новый сетевой код без дыр для читеров, но с хорошей обратной связью, чтобы попадания считало всегда справедливо.


Главный урок Библии: человек способен изобретать целые вселенные только чтобы не признавать, что он лишь смертный кусок мяса и он сам есть главная причина его бед.

Отредактировано hate-n-fury - Суббота, 05.12.2015, 01:24
Профиль
Суббота, 05.12.2015, 13:17
Пост 4
Fkk
2337
Администратор
с 30.04.2010
338 сообщений
Offline
Отличная работа. Постну свои настроички за компанию, что ли. Вдруг, кому-то не пох*й :>

Код

cl_interp_ratio  "2"
cl_interp        "0.033380"
cl_interp_all    "0"
cl_updaterate    "66"
cl_cmdrate       "66"
rate             "128000"
cl_smooth        "1"
cl_smoothtime    "0.05"
ПрофильСайт
ФОРУМ » Форумы по разделам » Техника » Избавиться от лагов: настройка КЛИЕНТА
Страница 1 из 11
Поиск: