Crossroads » Linux » Linux. Лимит на FPS в играх

Linux. Лимит на FPS в играх

  • Dislike
  • -1
  • Like
Linux. Лимит на FPS в играхFPS — количество отображаемых фреймов (кадров) в секунду. Современные видеокарты могут справляться с сотнями ценой высокой нагрузки и теплоотдачи. Но значение это не постоянное и, в зависимости от того, на сколько плоха оптимизация в большинстве современных игр для PC, цифры могут варьироваться от ~700-800 fps до 15-20 fps за очень короткие промежутки времени.

Нередко можно наблюдать что в заставке у вас 800 fps, в самой игре не больше сорока и то если на экране мало движущихся объектов. При этом высоких значений можно добиться лишь в том случае, если отключить вертикальную синхронизацию для игры. На LCD мониторах из-за разницы между частотой монитора и FPS, выводимыми на него видеокартой картинка отображается с разрывами и артефактами. Именно из-за скачков в несколько сотен fps за считанные секунды. Проблему решает вертикальная синхронизация (vSync) «подгоняющая» fps под частоту монитора. Если частота вашего монитора — 60 Hz, то значение FPS будет в пределах 60-ти. То есть не выше, так как большее количество фреймов ваш монитор всё равно не обработает и будет пропускать. Но это не мешает им сваливаться до 20-ти. При этом видеокарта пытается удержать их на значении равном частоте монитора. В результате нагрузка на видеокарту возрастает, теплоотдача увеличивается, производительность падает. В некоторых играх производительность может быть даже ниже, чем при отключённой опции vSync.

Кроме того факта, что монитору в 60 Hz всё равно сколько сотен FPS передаёт ему видеокарта и больше 60-ти он не обработает, человеческий глаз способен распознать только 24 кадра в секунду. То есть 30-ти fps в игре вполне достаточно для комфортной игры.

В некоторых игра в настройках можно выбрать значение 60 или 30 fps. Иногда эти настройки спрятаны в конфигурационный файл и в меню не отображаются. Но чаще всего игра оставляет это на усмотрение опции vSync, включённой либо в самой игре, либо на стороне драйвера видеокарты. В настройках же видеокарты от производителя нет опции, позволяющей указать произвольное значение FPS, хотя технически никаких видимых препятствий этому нет. В видеокартах nVidia под Windows есть опция «Adaptive V-Sync», которая устанавливает значение FPS в половину значения частоты монитора (60 Hz — 30 FPS, 120 Hz — 60 FPS), но при этом отключается контроль разрывов и картинка выглядит практически так же, как и при отключённой vSync. Средствами стороннего плагина можно установить значение в 30 FPS и избавиться от разрывов. К сожалению плагин не обновлялся с 2016-го года. В версии драйвера 3ХХ оно ещё работало. В новой линейке 4ХХ нет видимых изменений в панели nVidia, так что плагин может по-прежнему работать, но кто знает, как долго ещё.

Под Linux есть стороннее решение «libstrangle». По словам автора, работает как с OpenGL, так и с Vulkan. Работает с любыми играми, в том числе и с играми, установленными через Wine. Так же работает со Steam-играми, но не работает со Steam-играм, установленными с использованием Proton. Официальная поддержка коих на сегодня слишком мала, чтоб это было проблемой.

Для работы в Debian / Ubuntu потребуются следующие пакеты:
libc6-dev-i386
gcc-multilib
ia32-libs


OpenSUSE:
glibc-devel-32bit
gcc
gcc-32bit


Скачиваем и распаковываем исходники в любую удобную директорию. Переходим в эту директорию, собираем и устанавливаем:
cd /путь_до_папки_с_исходниками
make
sudo make install


На момент написания этой статьи, для Arch / Manjaro уже собранный пакет есть в AUR и назывется «libstrangle-git». Так что установить его со всеми зависимостями можно с помощью следующей команды:
yaourt -S libstrangle-git


Для запуска игры с произвольным лимитом нужно запустить её следующей командой:
strangle 30 /path/to/game


Где «/path/to/game» - путь до файла, с которого запускается игра. Игра будет запущена с лимитов в 30 fps. Вы можете указать любое значение, не превышающее частоту вашего монитора. Равное значение тоже не имеет смысла, так как vSync итак это делает. Если игра установлена через Wine, то команда будет иметь следующей вид:
strangle 30 wine /path/to/game.exe


Если игра установлена через Wine, но с помощью какой-то вспомогательной программы, то смотрите куда ссылается ярлык игры. В случае с PlayOnLinux, создайте через него ярлык на .exe файл, запускающий игру и посмотрите в его свойствах команду, которой запускается игра. Например:
strangle 30 /usr/share/playonlinux/playonlinux --run "The Sims 3"


PoL установлен стандартно, "The Sims 3" — имя созданного ярлыка игры. То есть первая часть всегда будет неизменной, тогда как имя ярлыка будет зависеть от установленной игры. Тот же подход должен работать и в случае с коммерческим CrossOver.

Напишите .sh скрипт под каждую игру, чтоб не запускать их через терминал.

В Steam выберите игру в свой библиотеке, правым кликом откройте «свойства» и в открывшемся окне выберите «опции запуска» (Set Launch Options). Смотрите скриншот, так как в русскоязычном интерфейсе опция может называться как угодно. В поле вписываем следующее значение:
strangle 30 %command%


Где 30 — количество FPS. Таким образом игра, запущенная из любого места в Steam, или с созданного им ярлыка будет запущена с указанным лимитом на FPS.

Из личного опыта могу заметить, что в играх с хорошей оптимизацией 30 fps на глаз никак не отличается от 60-ти, а в играх, в которых оптимизация оставляет желать лучшего, коих большинство, лимит в 30 fps увеличивает производительность. Во всех случаях лимит в половину от возможностей монитора снижает нагрузку на видеокарту и значительно снижает теплоотдачу.
Like Dislike

___
Tatyana K.



Tags: Linux


 
  • Creative Commons Licence
  • Norton Safeweb
  • Website Uptime Monitoring By ServiceUptime.com