Общая информация
1) cl_cmdrate: команда определяет сколько пакетов в
секунду пошлете вы, клиент к серверу. Очевидно, чем выше это значение,
тем быстрее сервер реагирует на действия, которые вы совершаете
(поворот мышью, прыжок, бег, стрельба и прочее). Итак, если вы на
выделенной линии и притом очень хорошей, то смело ставьте высокое
значение. Если же вы подключили к своей DSL Cable или что там у вас,
ещё и своего друга - вы наверняка будете наблюдать частые и высокие
скачки лага. Это все из-за высокого значения команды. Большинство
высокоскоростных доступов к Интернету не могут дать возможность
установления высокого значения upload (к примеру, большинство aDSL
которые предоставляют компании - 768download (где-то 90КБ)/128upload
(16КБ)), который так необходим для этой команды.
2) cl_updaterate: это противоположность cl_cmdrate -
количество пакетов/секунду которые вы получаете от сервера (ваша
download скорость). Здесь, чем выше значение, тем более вы
синхронизированы с сервером. Так как только сервер решает, попадают
ваши выстрелы или нет, то вам нужно большое количество обновлений
информации с сервера - ради эксперимента, попробуйте поставить значение
cl_updaterate в 5-10 - и попробуйте убить кого. Получится интересная
картина - вы будете ещё стрелять по противнику, а на его мониторе, он
вас как секунду назад убил.
3) sv_maxupdaterate: команда контролирует количество
пакетов/секунду которое позволено серверу послать клиенту. Из этого
следует, что если на сервере sv_maxupdaterate "60", а на клиенте
cl_updaterate "101" то клиент будет обновляться со значением
cl_updaterate "60"
4) sys_ticrate: команда устанавливает количество "кадров"
в секунду, которые сервер может вычислить. По умолчанию значение равно
100. Почему серверные fps так важны? А этот параметр как раз таки и
отображает, как "чувствует себя" сервер. Мы все, когда нить играли на
очень хороших серверах, что складывалось такое впечатление, что они
хостуются на Tl-83 plus и мы могли бы поклясться что играем мы на LAN а
не на HSI-net
sys_ticrate только присваивает максимальное значение fps которые может
осилить ваш server. Но на деле сервер не может дотянуть без помощи до
такого sys_ticrate - это связано и с некоторыми процессами в самой
операционной среде, но в основном из-за провайдера. Имейте ввиду, что
увеличение fps "загружает" и сам процессор сервера. (Кстати такое
"увеличение" каким-то образом загружает процессор по максимуму на таких
картах как de_inferno и de_aztec). По умолчанию сервер, основанный на
Win32 выдает среднее fps 64, а на Linux - 50fps. "Ускорение" сервера
дает возможность получить fps выше 512 в некоторых случаях. Влияние
такое высокого серверного fps достаточно спорное, но я думаю вы с
легкостью заметите разницу в игре уже при 200fps.
Целостность - вот главное. Скачки fps со 100 до 512 скорее всего
создадут больше проблем, так что разумным будет ограничить sys_ticrate
в районе 150-200, если конечно сервер позволяет стабильно работать при
150-200.
Если у вас есть rcon пароль к серверу, вы можете с легкостью проверить
серверный fps - напишите rcon stats в консоли, чтобы проверить,
"ускорен" ли ваш сервер, временно поставьте значение sys_ticrate
"10000" и исполните команду rcon stats. Если ваш fps выше чем 1000 -
значит "ускорен".
5) ex_interp: интерполяция - это восстановление значения функции в промежуточной точке по известным ее значениям в соседних точках.
Итак, вы не можете быть синхронизированы с сервером на все 100% в
каждую секунду времени, так как вы получаете ограниченное количество
обновлений в секунду с сервера. Когда увеличивается количество
обновлений, интерполированная фигура становится более аккуратной. В CS
данной фигурой выступает движение игрока в секунду времени. Сервер в
данном случае будет тем самым "идеальным кругом" (ведь только сервер
имеет абсолютно точную позицию игрока в каждую секунду времени), а вот
клиенту придется интерполировать между двумя "верными" пакетами.
Вот здесь и появляется ex_interp. Данная команда отражает количество
времени (в секундах) для интерполяции между каждым "удачным"
обновлением с сервера. Так как интерполяция относится к клиентской
части, то естественно возникают неточности и ошибки в самой игре. Так
как мы не можем получить 100% точных обновлений с сервера (особенно в
Интернете) то интерполяция играет важную роль в самой игре.
Рекомендации для online игр
rate: я практически уверен что значение 20000 будет доступно
большинству высокоскоростных Интернет соединений. А вот использование
значений выше 20000 может наоборот привести к снижению
производительности.
Рекомендую: rate 20000
sv_maxrate: значение в большинстве своем равно 0. Объясню почему
это скорее всего не оптимально для online игры. sv_maxrate "0" будет
определять значение rate для каждого клиента и пытаться заполнить его
заполнить. Представьте что движок HL позволяет игрокам использовать
значения rate выше 20000 (например 999999999999), и сервер будет
пытаться заполнить все 999999999999. Это приведет к пустому увеличению
нагрузки на канал сервера. Я советую безопасное и вместе с тем хорошее
значение sv_maxrate "20000". В большинстве случаев sv_maxrate 0 и
sv_maxrate 20000 будут эквивалентны, но береженного бог бережет.
Рекомендую: sv_maxrate 20000
cl_cmdrate: в идеале значение этой команды должно быть равно
серверному (!- большинство людей считают что клиентским – в корне не
верно) fps. Если вы посылаете серверу пакеты чаще чем он способен
обработать - (скажем серверный fps=80, а значение cl_cmdrate 101) то
некоторые пакеты будут просто "скинуты" сервером, необработанны (
101-80=21 необработанный пакет). По сути эти 21 пакета погоды не
делают, просто приведут к забиванию вашего upload (и увеличению
трафика), что тоже погоды не делает.
Рекомендую: смело ставим cl_cmdrate равное серверному fps либо выше.
ex_interp: ставим в 0 без размышлений. CS автоматически поставит
ее значение ex_interp= 1/cl_updaterate (в консоли увидите "ex_interp
forced up to xx msec”). При значении 0, изменение значения команды
cl_updaterate будет автоматически менять и значение ex_interp. Я
РЕКОМЕНДУЮ МЕНЯТЬ ЗНАЧЕНИЕ ТОЛЬКО CL_UPDATERATE, ПОЗВОЛЯЯ CS поменять
значение ex_interp. Вы уже не можете поставить значение ex_interp ниже
чем 1/cl_updaterate, а вот ставить его выше - это уже просто нечестно.
Ставить значение выше 1/cl_updaterate приведет к тому, что вам придется
стрелять немного позади модельки противника (получается так, что вы
видите противника немного раньше, чем положено). К примеру, при
использовании cl_updaterate 101, верное значение ex_interp=
1/101=0.009, но по умолчанию ex_interp= 0.1, а это выше чем 1/101- вот
тут и возникает глюк...
Рекомендую: ex_interp 0- стреляем туда, куда целимся
cl_updaterate: бытует мнение что значение данной команды надо
подбирать следующим методом: присваиваем значение cl_updaterate 101 и
снижаем его до тех пор пока параметр choke (его можно увидеть, если
набрать в консоли команду net_graph 3) не будет равен 0 или очень
низок. По мне, так choke - это самое последнее о чем стоит
беспокоиться. Правильное значение cl_updaterate - это более глубокий
вопрос чем просто choke. Значение sv_maxupdaterate на сервере для
чемпионатов должно иметь значение 101 (так настроен сервер для CAL CPL)
- из этого можно сделать вывод, что в идеале значение
cl_updaterate=101. Однако большинство серверов в online имеют значение
sv_maxupdaterate "30" или просто неспособны, вычислить 101
sv_maxupdaterate. Из чего следует, что сервер просто неспособен послать
вам 101 пакет/секунду. Так все-таки, какое значение? Большинство могут
сказать "Я поставлю 101, а сколько дойдет - всё моё", но тут уже играет
отрицательную роль высокое значение ex_interp, что нарушит баланс между
этими командами.
Для того, чтобы подобрать оптимальное значение cl_upodaterate
(ex_interp "0") ставить в 101 и начинаем снижать его до тех пор пока
модельки игроков не будут слегка двигаться скачками (при ex_interp 0 и
cl_updaterate 101 - они будут очень сильно пропускать). Не надо бояться
ставить значение cl_updaterate ниже 50, если это необходимо.
Большинство серверов sv_maxupdaterate "30" так что cl_updaterate 30
будет лучшим значением.
Стоит отметить, что начинать подборку cl_updaterate надо "сверху вниз" а не наоборот.
Рекомендую: равно серверному fps и не выше sv_maxupdaterate
sys_ticrate: для нахождения оптимального значения данной
переменной необходимо произвести несколько экспериментов. Прежде всего,
если ваш сервер не "ускорен" то значение переменной ticrate выше 100 ни
к чему не приведет. Если же сервер находится на хорошей платформе
(богатый провайдер), то бишь "ускоренный", у вас появляется место для
полета фантазии. Не смотря на то что "чем больше серверное fps тем
лучше", эффект от увеличения sys_ticrate выше 200 (а может и еще
меньше) на самом деле не окажут такого уж хорошего влияния на игру. А
вот использовать sys_ticrate "200" или ниже сделает игру более
стабильной даже если придется пожертвовать минимальным количеством
производительности. Представьте вдобавок, что компьютер, используемый
под игровой сервер тянет аж несколько HLDS (например CS1.6 и CZ) и для
обоих sys_ticrate "10000" нагрузка на процессор возможно будет
чрезмерной. Такое положение вещей может привести к потери
производительности самой игры. В конце можно добавить, что если вы
хотите получить, скажем, 140fps то вам нужно выставить значение
sys_ticrate выше предполагаемого где-то на 20-50. (Например, сервер
может спокойно тянуть 150fps, значит, значение sys_ticrate будет
150+30= 180.)
Рекомендую: sys_ticrate 110-180 - зависит от качества сервера.
Слово о LAN
Повод, по которому большинство известных турниров, таких как CPL, WCG
используют cl_updaterate 101 - зависит от качества сервера. На таких
чемпионатах все сервера обычно "ускорены" что делает реальным такое
высокое значение cl_updaterate. Для того чтобы быстро узнать "ускорен"
ли сервер, достаточно просто обратить внимание на пинг - у простого
сервера, fps которого 50-60, все игроки имеют средний пинг 15ms, а вот
на "ускоренном" - 5 ms.
|