|
hate-n-fury
Удаленные
с
| Старая статья про сетевой код написана мной в неадеквате и для сравнительно опытных игроков и админов, поэтому некоторыми трудно переваривалась и фтопку ее. Вот вам моя новая инструкция с форума hl2dm.ru, облегченная, актуальная (и, надеюсь, более понятная ).
Сначала найдите неисправность.
Конфиг
В папке "...\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
|
|
|
|
|
FENIX
Удаленные
с
| Спасибо за актив у меня всегда стояли не особо адекватные настройки 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"
|
|
|
|
|
hate-n-fury
Удаленные
с
| Цитата FENIX ( ) interp на 0 По стандарту сервер насильно ставит интерполяцию в минимум 1 шаг, поэтому отключить везде не получится. Не проверял, как сейчас настроены в этом плане Public Match серверы.
Цитата FENIX ( ) rate "66000" Если я ничего не путаю, после пересадки на Orange Box при 64000 на мясе из 6-8 человек появлялся чоук на респауне и не только, пришлось поднять. Проверь, не появляется ли у тебя, и не стесняйся ставить огромный запас - современный интернет позволяет.
Цитата FENIX ( ) с хитами непонятно
По документации клиент отправляет свое точное время серверу, так что теоретически лерп не должен влиять, но нет способа объективно проверить. Сейчас у меня не лагающий провайдер, монитор на 144 Гц и мышка с хорошим сенсором вместо топорной Bloody: с хитрегой ясно на сей день только то, что она сильно ухудшается при скачках пинга и "шатаниях" сервера (var), но при любых условиях и настройках очень грустная Разработчики говорят то же самое о CSGO: проблема в железе. В этом году еще и сделали для отгораживания от читеров перерасчет разброса пуль на сервере (*рукалицо*). ИМХО эти гандоны за столько лет могли запросто написать полностью новый сетевой код без дыр для читеров, но с хорошей обратной связью, чтобы попадания считало всегда справедливо.
Отредактировано hate-n-fury - Суббота, 05.12.2015, 01:24
|
|
|
|
|
Fkk
Удаленные
с
| Отличная работа. Постну свои настроички за компанию, что ли. Вдруг, кому-то не пох*й :>
Код 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"
|
|
|
|