Garry's Mod

Garry's Mod

540 ratings
Оптимизация Garry's Mod
By You Are Pregnant🧙
Повышение производительности Garry's Mod.
5
2
   
Award
Favorite
Favorited
Unfavorite
Предисловие
Garry's Mod игра 2004-го года из этого следует, что, хоть Facepunch частенько обновляет движок, всё же, некоторые вещи, которые может осуществить ваша видеокарта не реализованы в игре, например: батчинг или инстансинг. Если в вашем меню продвинутых видео настроек не наблюдается режима сглаживания CSAA, то лучше отключить его вовсе. То же самое касательно фильтрации текстур, куда лучше будет включить эти параметры в панели управления поставляемой с драйвером вашей видеокарты.
Список рекомендуемых команд.
  • cl_cmdrate 16: deltatime основного цикла управления Move и Command[wiki.garrysmod.com], не слабо разгружает ЦП на серверах где активно используются move и cmd хуки. Для игровых режимов где активно используется стрельба и важен хороший отклик лучше оставить 30 или даже 66, но это чревато высокой нагрузкой на ЦП.
  • cl_updaterate 16: deltatime основного цикла сетевого взаимодействия. Отвечает за то, как часто клиент передает или обрабатывает сетевые данные.
  • snd_mix_async 1: асинхронное наложение звуковых дорожек DSP.
  • r_3dsky 0: отключает трёхмерный скайбокс, значительно повышает FPS и освобождает память (vertexbuffer) видеоадаптера.
  • mat_specular 0: отключает полноэкранные отражения (cubemap; phong'а достаточно), немного повышает FPS и освобождает текстурные блоки видеоадаптера.
  • menu_cleanupgmas: команда, которую рекомендуется периодически вводить в главном меню, для очистки игры от хлама, остающегося после установки аддонов/посещения серверов.
  • fps_max 60: параметр ограничивающий количество запросов на рендеринг кадров в секунду, где 60 - частота вашего монитора. Прописывается в главном меню.
  • mat_reducefillrate 1: ограничивает частоту заполнения пикселя, визуально незаметно, но дает существенный прирост фреймрейта.
  • r_fastzreject 0: отключает алгоритм быстрого расчета глубины. Многие пишут о том, что параметр 1 повышает фреймрейт, но у меня, увы, фпс повысился с ~385 до ~440 при отключении этого параметра (советую поэкспериментировать со значениями -1, 0, 1 чтобы узнать что будет лучше для вашей конфигурации)
Настройки для многоядерных процессоров.
Настройки ниже могут привести к неприятным последствиям на одноядерных процессорах. Используйте на свой страх и риск.
  • gmod_mcore_test 1: включает поддержку многоядерных/многопоточных процессоров.
  • cl_threaded_bone_setup 1: разрешает движку обрабатывать матрицы костей в отдельных потоках.
  • r_threaded_particles 1: разрешает движку обрабатывать частицы в отдельных потоках.
  • r_queued_ropes 1: разрешает движку обрабатывать веревки в отдельных потоках(плацебо, на сервере нет веревок).
  • cl_threaded_client_leaf_system 1: разрешает движку обрабатывать pvs (зоны видимости) в отдельных потоках.
  • r_threaded_renderables 1: разрешает движку обрабатывать режимы рендера (opaque/translucent) в отдельных потоках.
  • mat_queue_mode 0: разрешает движку сортировать очереди текстур уменьшая количество свайпов (ротации текстур) на видеоадаптере. При условии большой нагрузки на GPU лучше использовать значение 1. (0, а не -1 или 2, потому что на некоторых билдах игры наблюдается повышение потребление ЦПУ (до 9 раз), при асинхронной сортировке текстур спустя некоторое время)
Сохранение настроек
Некоторые консольные переменные не имеют флага сохранения, посему придется создать файл автозапуска.
Открываем параметры запуска игры и добавляем ко всему существующему +exec autoexec.
Далее переходим в папку с игрой, далее в garrysmod/cfg, открываем autoexec.cfg.
Пишем консольные команды точно так же, как пишем их в консоль разделяя переносом строки (Enter) и/или точкой с запятой(;).

Пример:
r_3dsky 0;
rate 30000;
Параметры запуска.
Крайне рекомендуется прописать -novid -malloc=system в параметрах запуска игры.
  • -novid: отключает функцию декодирования видео графическго конвеера. Незначительно повышает FPS (отключает кодек, а не заставку; это никак не повлияет на работу видео в сендбокс и синема, так как в Garry's Mod интегрирован awesomium/chromium).
  • -malloc=system: позволяет системе выбирать размер выделяемых блоков памяти (memory allocator). Система создает рабочие списки и списки низкого приоритета. Возрастает потребление ОЗУ, но незначительно улучшается быстродействие.
  • -high: запуск с высоким приоритетом.
  • -swapcores: позволяет системе менять потоки для систем частиц и материалов.
  • -r_emulate_gl(может стать причиной краша игры) или -gl: эмулирует DirectX на OpenGL. Очень мощный буст фпс, при условии поддержки Vulkan API вашим устройством.
  • -softparticlesdefaultoff: запрещает фильтровать глубину частиц. Дает прирост фпс, но частицы выглядят не очень.

Так же вы можете написать любую консольную команду в параметры автозапуска используя разделительный символ "+" перед командой. Например: +exec autoexec +fps_max 60.
Пример конфигурации, которую использую я: https://pastebin.com/gT7Zbe6D.

Мои параметры запуска: +fps_max 61 +menu_cleanupgmas -high -swapcores -preload -novid -nojoy -noforcemaccel -noforcemspd -useforcedmparms -softparticlesdefaultoff +exec autoexec +mat_softwarelighting 0
Переход на 64-х разрядную версию
Перед переходом на 64-х разрядную версию стоит понимать все риски: внезапные вылеты и черные экраны.

На практике, все кажется не так плохо. Вылеты происходят только по вине разработчиков аддонов, чьи руки растут не очень-то из плеч.
Стоит отметить факт того, что на 64-х разрядной версии Garry's Mod перестают наблюдаться некоторые фризы, которые возникают на 32-х разрядной версии. Так же помнится, что Face Punch заявляли что-то про оптимизацию этого бранча.

Подводные камни: максимальное исчислимое целочисленное число меняется с 2 ^ 32 на 2 ^ 64 из-за чего некоторые аддоны (вроде PAC3, на примере boneclipping) не могут использовать те хаки, которые использовали для этого; сервера использующие устаревший !cake anticheat могут забанить вас за использование 64х разрядной версии.

Необходимые фиксы для lua разработчиков:
  • math.huge = 1 + 2 ^ 64: исправление boneclipping в PAC3 и схожих методов. Лучше всего приживётся в /lua/includes/extensions/math.lua
Звуковая система
С приходом Windows 10, звуковая система семейства определенно стала шустрее и приятнее. Но, тем не менее с этими улучшениями нам дали и уйму "свистоперделок", которые расходуют ресурсы процессора, прежде чем донести информацию до кодека.
Эти процессы преображения звука мы пожалуй отключим.

Переходим в "Пуск" (логотип Windows на панели задач) > Параметы (Иконка шестерни в панели слева) > Система (Иконка лаптопа слева вверху) > Звук > Листаем содержимое в самый низ и выбираем "Панель управления звуком".
Далее отключаем все мониторы (если конечно же вы не имеете встроенных в монитор динамиков) посредством нажатия на них правой кнопкой мыши и "Отключить" в открывшемся контекстном меню. Находим аудиоустройства, например "Динамики". Как правило в строке элемента имеется пометка с названием установленой аудиокарты или встроенного кодека, например "Realtek High Definition Audio". Кликаем правой кнопкой мыши по элементу, в контекстном меню выбираем "Свойства". Затем переходим во вкладку "Улучшения" (в некоторых выпусках Windows 10 отсутствует локализация этого элемента, потому может называться "Enhancements"). Ставим галочку перед "Отключение всех звуковых эффектов".
Визуальные задержки и задержки управления
Для начала, хотелось бы заметить, что наиболее простой альтернативой этому варианту будет отключение ограничения фреймрейта посредством ввода fps_max 0 в консоль и отключения "ускорения мыши" в системной конфигурации. Как итог - разрывы в управлении не будут заметны.

Даже имея 300-500 FPS, могут быть ощутимы задержки управления и (возможно) изображения. Причиной тому является HPET ("Hight Precision Event Timers" - высокоточный таймер событий). Это утилита для высокоточных замеров времени. Я не встречал софта использующего этот метод, кроме как некоторые программы для бенчмарка или мультимедиа.
Т.к. Garry's Mod создан на движке Source, что является уважаемым старичком на поприще игр, он адаптирован для более старого аналога HPET, а именно PIT. Из-за использования новой технологии возникают неточности при расчете разницы между фреймами и, как следстве, визуальные задержки.

Выключить высокоточный таймер событий можно в BIOS материнской платы (HPET Support) или же внутри системы.
Из операционной системы это осуществляется достаточно просто:
"Пуск" (Логотип Windows в панели задач) > Ищем "Диспетчер устройств"
В ракрывающемся списке "Системные устройства" находим "Высокоточный таймер событий", кликаем на него правой кнопкой мыши, в контекстном меню выбираем "Отключить устройство".
После отключения HPET потребуется перезапуск.
Настройка питания процессора
Стоит отметить, что на большинстве выпусков Windows 10 изначально может быть включен "энергосберегающий" или "оптимальный" режим питания, что в свою очередь запрещает ротацию ядер процессора и эксплуатацию высокочастотных режимов работы (Turbo Boost).

Для решения этой проблемы переходим в Пуск > Система > Питание и спящий режим > Дополнительные параметры питания
Далее, выбираем "Максимальная производительность" и переходим "Настройки схемы электропитания", затем в "Изменить дополнительные параметры питания
В списке ищем "Управление питанием процессора"
Значение "Максимальное состояние процессора" меняем на 100%, если в первоначальной схеме это не было сделано.
Так же можно отключить "Управление питанием состояния связи" в "PCI Express", что позволит видеокарте шустрее обмениваться данными при некоторых обстоятельствах.
Аддоны
Помимо описанных выше процедур, в оптимизации могут помочь различные аддоны.
В процессе изучения аддонов на воркшоп, я нашел в основном кучку бесполезных аддонов которые вводят за вас консольные и копируют друг друга.
Частично изучив бесконечный перечень "фпс бустеров" написанных на коленке, являющихся сборкой из украденного кода и других таких же бустеров состоящих, в основном, из 70 тысяч строк интерфейса и более (Матерь Божья!) и, в лучшем случае, хотя бы 30 строк полезного кода.
Всё же, среди всего разнообразия находятся и полезные экземпляры.
Данные аддоны будут полезны только для одиночной игры или владельцев серверов.

  • Simple Garbage Collector: изменяет поведение сборщика мусора Lua, основываясь на принципах псевдопараллелизма.
  • Simple Render Distance: позволяет конфигурировать дистанцию отрисовки категорий объектов. Не снижает общую производительность проверками, т.к. аддон задействует уже существующую функцию движка.
  • Weld Groups: переписывает методы столкновения объектов, инструмента "No-collide" и сварки. Снижает количество стресса на процессор оказываемое трением объектов. (Не то чтобы очень эффективно, позже реализую свою более эффективную имплементацию)
  • Widget Disabler: отключает хук TickWidget используемый для отрисовки виджетов на сервере.
Информационные ресурсы
Материал является продуктом "Свободной культурной деятельности" (CC-BY)[creativecommons.org].
Автор @scuroin, т.е. я. Публикация или изменение данного руководства разрешено в любых целях с указанием авторства или ссылкой на оригинальную статью.
Изображения взяты на сайте WikiHow[wikihow.com] без удаления вотермарок.
Консольные переменные взяты на Valve Software.
На правах рекламы
177 Comments
BURATINATOR676 25 Apr @ 3:42pm 
Важная деталь:machinearm::
После параметра запуска -heapsize, надо написать кол-во используемой ОЗУ в Кбайт.
Пример для 13 Гб ОЗУ: -heapsize 13631488 :machinelearning:
Из-за малого значения, или не написания этого параметра может вылетать игра(((((
Пап я в стакан насрал
Зачем?
Мама в туалете была!
Так это был не шоколадный пудинг
ЕШКЕРЕ!
(Распространяйте этот текст что бы он был популярным!)
(Spread this text to make it popular!)
🕊 Peace&Death ⚰ 12 Mar @ 4:56pm 
От души! Реально помогло :)
GAMLET 13 Feb @ 5:45am 
Есть что-то для выделенных серверов ? По типу хостингов и тд, какие-то настройки для такой версии ?
Washarapa 12 Nov, 2024 @ 11:06am 
Как раз искал ПЗ с ними на серв быстрее загружаться
GAMLET 16 Jul, 2024 @ 2:34am 
@Bipolar Bear мож подсказать как максимально снять нагрузку с CPU, что бы сервер меньше сжирал ресурсов ?
GAMLET 16 Jul, 2024 @ 2:33am 
@Focseless
:srcds
echo (%time%) srcds started.
for /f "tokens=2" %%A in ('tasklist /v /fi "imagename eq cmd.exe" ^|findstr /l /c:"Anticrash"') do taskkill /pid %%A
start anticrash.bat
start /wait srcds_win64.exe -console -port 25000 -condebug +hostname "only / Sandbox // v2.0" +gamemode sandbox +maxplayers 18 -tickrate 33 +map gm_flatgrass +sv_setsteamaccount ******************* +host_workshop_collection ********** +fps_max 0
echo (%time%) WARNING: srcds closed or crashed, restarting.
goto srcds
Пример
333 15 Jul, 2024 @ 10:32am 
@Bipolar Bear короче не помогает
You Are Pregnant🧙  [author] 15 Jul, 2024 @ 10:27am 
@Focseless что следует вписывать в параметры запуска, в параграфе "Параметры запуска". Остальное в конфиг/консоль.
333 15 Jul, 2024 @ 10:22am 
@Bipolar Bear а куда вписывать в параметры запуска или консоль?