Увеличение FPS

Материал из Dwarf Fortress Wiki
(перенаправлено с «Maximizing framerate»)
Перейти к навигацииПерейти к поиску
Счетчик фреймов в игре.

Фреймрейт (частота смены кадров) используется в Dwarf Fortress для указания как быстро игра обсчитывается. Показатель называется frames per second или коротко FPS. Для просмотра FPS в Dwarf Fortress достаточно изменить опцию [FPS:NO] на [FPS:YES] в init.txt. FPS будет отображаться внизу экрана. Первое число указывает пересчёта событий в мире, второй — скорость отрисовки.

Увеличение частоты кадров

Главное правило в том, что чем больше вещей должна отслеживать игра, тем медленнее она будет работать. Таким образом, уменьшение количества активных вещей позволяет вашей игре работать быстрее. Большую часть времени вычислений в Dwarf Fortress занимают юниты, делающие свои дела, более 60% в больших крепостях, из чего менее 10% связано с поиском пути, так что лучший способ предотвратить потерю FPS — это уменьшить количество юнитов в целом. В приведенном ниже списке способы улучшения FPS разделены на две категории: вещи, которые не меняют игру каким-либо фундаментальным образом, и вещи, которые меняют.

Без изменений игры

Особые способы строительства и планирования крепости, а также изменения настроек игры — изменения в основном в файлах init.txt и D_init.txt, которые на самом деле не меняют процесс игры.

Генерация мира

  • Большие миры требуют больше фоновых вычислений для обновления. Чем крупнее цивилизации, тем больше событий происходит в мире и тем они сложнее. Создание слишком большого цивилизованного населения может привести к постоянному и неизбежному падению FPS. Однако, учитывая, насколько игра богата контентом, даже маленький мир будет довольно интересным, но будет иметь гораздо более высокую частоту кадров, хотя некоторые вещи вы можете точечно настроить через расширенные параметры генерации.
  • Для более длинных историй требуется больше памяти и места для хранения исторических фигур и событий.
  • Уменьшение количества цивилизаций, мест, чудовищ и установка предела численности населения мира может снизить ресурсы, затрачиваемые на обновление остального мира.
  • Пещеры могут сильно пожирать FPS из-за большого количества существ, которые появляются там. Иногда даже торговые караваны будут пытаться пройти через подземелья крепости.
    • Настройка количества слоёв пещер в параметрах расширенной генерации мира может уменьшить размеры пещер (по умолчанию их 3 слоя). Однако это ограничит доступ к подземным растениям и существам, а также уменьшит количество порождаемых забытых тварей.
    • Точно так же можно настроить открытость пространства в слоях и плотность проходов в них в Advanced world generation, чтобы пещеры имели меньше тайлов для путей. В общем, алгоритм поиска пути эвристически рассматривает расстояния по одной клетке при движении в 3D ("расстояние Чебышева"), что означает, что он может иметь тенденцию идти вправо по X/Y, а затем начать слепое заполнение всей Z-оси оттуда, пока не сможет найти путь наверх, после чего весь процесс повторяется, поэтому лучше иметь меньше тайлов пещер, а открытых мест следует избегать.[1]
    • Генерация мира с использованием шаблона "REGION" (вместо шаблона "ISLAND", который используется в "Create New World!") может значительно уменьшить высоту пещер, а также разместить их ближе друг к другу, что приведет к меньшему количеству Z-уровней. Как правило, это также требует высадки в районе, который не очень близок к океану или горной вершине.
  • Таяние снега и льда может вызвать лаги.Требует проверки Вы можете создать мир без полюсов с несколько повышенной температурой или просто отправиться туда, где вода не замерзнет.

Организация крепости

  • Большие места для высадки резко увеличивают количество местности, которую игре необходимо отслеживать и строить пути.
    • Уменьшение размера стартового участка со стандартных 4×4 квадратов до 3×3 или даже 2×2 окажет огромное влияние на FPS.
    • Имейте в виду, что площадка 2×2 составляет всего 25% от размера посадки 4×4. Тем не менее, в 3D это все еще достаточно большая область для многих крепостей при обычной игре.
  • Расчеты прямой видимости, даже после оптимизации в версии 50.05, являются самой медленной частью игры с большим отрывом. Они O(n^2) по своей природе, поэтому единственный способ по-настоящему ускорить их — уменьшить количество юнитов. Тем не менее, есть еще способы уменьшить проблему.
    • Держите своих дварфов далеко друг от друга — юниты, находящиеся на расстоянии более 26 клеток от данного юнита в любом направлении, не учитываются при расчете прямой видимости.
    • Избегайте наличия одной единственной зоны для встреч, в которой находятся сотни дварфов.
    • Старайтесь разбивать зону прямой видимости в разных местах, чтобы ваши дварфы не спрашивали "друг или враг?" слишком часто.
  • Чем меньше предметов внутри крепости, тем меньше предметов проверяется на температуру, что является единственной серьезной причиной проблем с производительностью.
    • Очевидное решение — не создавать так много предметов . Не стройте такие большие грядки и не переусердствуйте с мастерскими, постоянно стоящими в очереди или настроенными на вечный повтор.
    • Используйте дварфский атомный дезинтегратор, чтобы удалять предметы, или пожертвуйте их проходящим караванам.
    • Квантовые склады помогают ускорить игру только если вы постоянно смотрите на смотрите свои склады.
    • Количество предметов в любом конкретном стаке не так сильно влияет на частоту кадров, как количество стаков в целом, из-за результирующего влияния на перетаскивание, склады, поиск пути и другие задачи, интенсивно использующие процессор. Исследование, проведенное в тредах Undump Engine и Micha демонстрируют очень эффективные решения для FPS, избегая при этом традиционных складов и использования бочек и ящиков.
    • При этом общее количество предметов имеет значение. Количество имеет гораздо большее значение для объектов, которые могут иметь качество или украшения, чем для обычных камней, поскольку они занимают больше памяти. Проверка температуры, увеличение износа и прочее вызывают лаги, хотя для внимания требует только при достижении больших количеств шлама (10 000+).
  • Изменения в картах путей могут привести к кратковременным лагам, так как карта будет нуждаться в обновлении.
    • Это наиболее заметно с дверями, разводными мостами или другими объектами, связанными с повторителем. Атомный дезинтегратор, подключенный к повторителю, даже отключенный от остальной части крепости, может вызвать лаги каждый раз, когда он поднимается или опускается. Если вы используете дезинтегратор для уничтожения мусора, настройте автоматику включать его очень редко или управляйте им вручную с помощью рычага.
    • Огораживайте стеной области с изменяющимся уровнем воды[1].
  • Правильное использование обозначений трафика должно помогать.
  • Количество активных собирателей растений может сильно влиять на частоту кадров, особенно если в меню работы включена опция "Everyone does this" в сочетании с очень высокой численностью населения. Лучше всего использовать опцию "Only selected do this" и выбрать для этой задачи только часть жителей или полностью отключить ее с помощью опции "Nobody does this", если сбор растений не является приоритетом в данный момент.
    • Настройка коридоров на высокий трафик, а тупиковых мастерских рядом с ними на низкий приведёт к тому, что алгоритм поиска пути будет быстрее искать вдоль коридора и тратить меньше времени на поиск в комнатах.
  • Хотя поиск пути не является серьезной причиной утечки FPS, уменьшение области, которую должен искать алгоритм, позволяет игре работать немного быстрее.
    • Очевидное решение — не выкапывать слишком много земли.
    • Тщательное планирование крепости может сократить время поиска пути при коротких перемещениях.
    • Распространение вашей крепости по горизонтали, как правило, означает что на каждую мастерскую коридор становится на три или четыре клетки длиннее. Размещение мастерских по вертикали на нескольких этажах, недалеко от складов позволяет увеличивать длину пути до самой дальней точки всего на одну клетку, если размещать мастерские вокруг лестницы.
    • Гигантские склады — это огромные области, требующие вычислений поиска пути. Квантовые склады могут убрать необходимость выкапывать большие области. Тем не менее, каждый производимый вами предмет занимает память и учитывается в таких процессах, как распределение температуры. Избегайте производства большего количества товаров, чем вы можете использовать, только потому, что вы хотите "занять дварфов делом". Если вам перестаёт хватать места для хранения ваших предметов, вместо того, чтобы копать новый склад, просто прекратите производство.
    • Если функции крепости разбросаны далеко друг от друга, рассмотрите возможность создания несколько столовых. Легендарную столовую не настолько сложно создать, и есть не так много причин, которые стоят того, чтобы кочегару нужно было обязательно преодолевать 100 этажей до поверхности и обратно ради выпивки.
    • Переполненные коридоры заставляют дварфов обходить друг друга, что приводит к перестройке маршрутов. Найдите способы распределить трафик, чтобы избежать столкновений. Стройте коридоры шире 1 клетки к областям, которые дварфы часто посещают, и может быть даже пути, по которым дварфы смогут срезать дорогу.
    • Было обнаружено, что дварфы больше предпочитают двигаться по рампам чем лестницам. Это можно использовать в дополнение к приоритетам маршрутов.
    • Может помочь закрытие неиспользуемых областей поднятыми мостами и запертыми дверями.
    • Открытые "карьеры" — это ловушки для алгоритма поиска пути. Отгородите их от крепости стенами, когда закончите работать над ними.
    • Пещеры, вероятно, являются худшей территорией для алгоритма поиска пути среди природных областей. Так что держите любую часть, которая вам не нужна в данный момент, закрытой.
    • Не назначайте сразу большие области для сглаживания.Bug:5986
    • Запертые в закрытой области дварфы, особенно впавшие в странное настроение, иногда вызывают значительные лаги. Это почти единственный случай, когда поиск пути действительно вызывает проблемы с FPS. Существует баг, из-за которого запертый дварф в странном настроении сильно тормозит игру.Bug:8698 Освободите их или от бремени, или от жизни, чтобы жить своей собственной.
    • Локации без достаточной площади требует частой перестройки путей. Убедитесь, что ваши локации достаточно велики для населения.
  • Каждое животное также проверяется на наличие прямой видимости.
    • Прирученных животных можно поместить в клетку, и в этом случае они полностью освобождаются от всех подобных проверок. Или вы можете забить.
  • Многотайловые деревья являются известным источником лагов.
    • Выбор места для высадки, при котором деревья растут только на одной или двух клетках начальной зоны, может повысить производительность.
  • Загрязнетели могут накапливаться на земле, на дварфах и существах. Особенно в старых крепостях это может повлиять на FPS. Существует багBug:296, который заставляет загрязняющие вещества постоянно множиться, и другойBug:3270, которая предотвращает исчезновение крови.
    • Если загрязнители снаружи, изолируйте область и дайте дождю медленно смыть ее. Домашних животных можно оставить на улице с помощью пастбище или ямы. Точно так же установка трафика на "restricted" и/или назначение зон активности может сделать ту же работу для дварфов.
    • Добавьте средства мытья дворфов и их питомцев в крепости. Только мыло и колодец позволяют дварфам мыться самостоятельно. Убедитесь, что у вас также включена работа по уборке. Подробную информацию об этих и других средствах можно найти на странице Cleaning.
  • Обнаружение HFS резко снизит FPS ПОСЛЕ того, как вы закроете проходBug:1340. Либо избегайте этого, либо используйте обходной путь, опубликованный в отчете о баге.
  • Масштабное строительство, особенно мегапроекты, по мере роста крепости будет вызывать все более серьезный лаг при выборе указаний. Запретите материалы (особенно камни, блоки и слитки), сколько возможно, чтобы сократить время, необходимое игре для расчета списка доступных материалов при строительстве конструкций.
  • Когда отряд возвращается из рейда/миссии, может внезапно появиться огромный лаг (до 5 кадров в секунду). Вы можете распустить отряд, и ситуация должна прийти в норму.
  • То же самое может произойти при отправке отряда на задание. Если члены отряда каким-то образом заперты внутри крепости, они будут постоянно пытаться найти путь к миссии, и игра может почти зависнуть.
  • Гравюры являются проблемой в ASCII из-за медленного поиска графики гравировки, но в графическом режиме они не особенно влияют.
  • Минимизируйте количество живых растений. Заодно насолите эльфам.
  • Избегайте отображения на экране сложных областей. Отображение фрагмента карты требует разного объема работы в зависимости от того, что это такое:
    • Нераскрытые тайлы почти не занимают времени — игре нужно только определить, какой "случайный символ" в этой темноте отображать.
    • Деревьям необходимо выполнить линейный поиск по списку столбцов (один список на каждый блок тайла 48x48 области игровой каты), чтобы определить, какие побеги присутствуют в тайле дерева, и поиска про само растение, какой отображать символ/цвет. Это самая медленная часть этапа рендеринга.
    • Тайлы каменного слоя должны взять номер биома и номер слоя и найти материал слоя, а затем просмотреть raw-файл неорганического объекта, чтобы получить символ/цвет.
    • Тайлы лавового камня должны взять номер биома и найти информацию о регионе, чтобы определить, какой лавовый камень использовать, а затем продолжить, как указано выше.
    • Особенности рельефа на каменных тайлах (например, адамантин) необходимо найти на карте особенностей рельефа для тайла, чтобы выяснить, из чего он сделан, а затем продолжить, как указано выше.
    • Тайлы жил необходимо найти линейным поиском в списке, специфичном для блока карты 16x16x1, чтобы увидеть, какой жиле они соответствуют, и определить материал, а затем продолжить, как указано выше.
    • Тайлы травы необходимо найти линейным поиском в том же списке, чтобы выяснить, какой тип травы присутствует, затем просмотреть raw-файл растения, чтобы получить символ/цвет (а также учесть анимацию).
    • Кустарники и саженцы необходимо искать в отдельном списке (не ясно, это глобальный список или список для конкретного столбца), чтобы найти рассматриваемое растение и определить его символ/цвет.
    • Для сконструированных тайлов необходимо выполнить бинарный поиск по координатам X/Y/Z в отдельном списке, чтобы определить, какой материал они используют, а затем найти символ/цвет для этого материала.
    • Вдобавок ко всему, выполняется линейный поиск в еще одном списке, чтобы определить, присутствует ли гравировка (и, если да, какой тайл отображать).
    • Отображается другое содержимое тайлов (юниты, здания, предметы, вредители и т. д.)
    • После того, как всё это сделано, выполняется еще один линейный поиск (хотя в том же списке, что и с жилами и с травой), чтобы увидеть, есть ли на тайле загрязнители (например, ил, кровь, рвота или листья) и соответствующим образом настроить символ/цвет.

Настройки игры

  • G_FPS — это параметр в файле init.txt. Он определяет, как часто Dwarf Fortress перерисовывает экран. Он также определяет, как часто игра проверяет ввод с клавиатуры или мыши.
    • Снижение G_FPS не ускорит остальную часть игры, так как все это выполняется в отдельном потоке.

С изменениями игры

Все изменения в этом разделе имеют какое-то влияние на саму игру, используйте на свое усмотрение.

Настройки игры

  • Вычисления температуры сильно нагружают процессор.
    • Их отключение ускорит игру и может быть включено обратно в любое время.
    • Без расчета температуры обсидиановая ферма становится непригодной к использованию; так как тайлы никогда не остывают, дварфы будут отказываться наступать на обсидиановый пол, на котором лежит выкопанный обсидиан, препятствуя возможности переноски.Bug:6033 Время от времени вы можете снова включать температуру, чтобы температура тайлов нормализовалась. Кроме того, вы можете обойти эту проблему, изменив обсидиан в raw-файле, чтобы назначить ему [MAT_FIXED_TEMP:10000] (как это задано у нижнешляпника), предотвращая его нагревание.
    • Отключение расчетов температуры приведет к тому, что огонь станет глючить, включая существ, которые могут его создать (огненные импы, драконы, забытые твари и т. д.) Дварфы, подожженные с отключенной температурой, будут гореть вечно, пока не попадут в воду, но не получат никакого урона. Тайлы, подвергшиеся воздействию огня, с отключенными расчетами температуры станут полностью непроходимыми, что может привести к тому, что значительные части вашей карты будут заблокированы. Если вы столкнетесь с огнем или огненными существами, возможно, стоит снова включить температуру, пока проблемы с ними не будут решены.
    • Несколько пользователей сообщали об увеличении FPS на 100% или выше при отключении расчета температуры [2].
  • Отключение погоды, вероятно, также ускорит игру, но тогда дождь не будет пополнять пруды, очищать загрязнения, убивать дварфов и т. д.
  • С каждым дварфом связана большая часть вычислений в каждом конкретном кадре.
  • Вторженцев тоже нужно просчитывать. Хотя вы можете просто убить их, чтобы избавиться от проблемы, их присутствие может замедлить игру до такой степени, что продолжать станет невозможно.
    • Количество вторженцев можно контролировать с помощью d_init.txt. Уменьшите максимальное количество захватчиков и получите меньшие осады с разумным количеством врагов. Если этого недостаточно, вторшенцев можно полностью отключить, хотя это заблокирует доступ к веселью.
  • Игра также должна отслеживать, что происходит в пещерах.
    • Вы можете отключить слои пещеры в расширенной генерации мира. Без пещер у вас будет гораздо меньше монстров и угроз, ищущих путь через извилистые подземные проходы. К сожалению, вы также теряете подземные растения и деревья. Так что вы можете уменьшить количество слоев пещер до одного.
    • Если вы не возражаете против потери большого количества веселья, вы также можете отключить генерацию магмавого моря и нижних слоёв.

Моды и утилиты

  • Накопление загрязнителей может снизить FPS, и они несколько глючат. (См. Bug:296 и Bug:3270.)
    • Иногда загрязнения широко распространены или труднодоступны, так что полагаться на обычные методы очистки было бы нецелесообразно или невозможно, или у игрока может не хватить терпения, чтобы справиться с этим так. В этом случае, можно использовать команды "clean" и "spotclean" в утилите DFhack для очистки от загрязнений.
  • Постоянно растущие кучи брошенной одежды, проверка одежды износ и недовольные мысли могут повлиять на FPS.
    • Можно поменять одежду так, чтобы предотвратить износ. Это можно осуществить, добавив токен ARMORLEVEL:1. Помимо возможного прироста FPS, у этого есть и другие преимущества. Это исправление является частью Modest Mod в качестве дополнительного модуля "Eternal Fashion". Его также можно найти в других модах, основанных на Modest Mod. (Поищите в [3] по слову "Modest".) Кроме того, Masterwork позволяет создавать металлическую одежду.

Команды DFHack

Список команд DFHack, которые могут помочь с FPS, исправляющие баги и уменьшие количество предметов.

  • autodump Полезно для массового выброса или уничтожения предметов. Используйте help autodump для справки по параметрам.
  • cleanowned Конфискует и сбрасывает мусор, принадлежащий дварфам. Используйте help cleanowned для справки по параметрам. Может вызвать неприятные мысли, если нет одежды на замену.
  • clean и spotclean Удаляет загрязнения с тайлов/юнитов/предметов или с одного тайла.Bug:296Bug:1750Bug:3270 Используйте help clean для справки по параметрам.
  • flows Подсчитывает блоки карты с текущими жидкостями, которые замедляют игру.
  • tweak fast-heat Дальнейшее повышение производительности обновления температуры.
  • timestream изменяет скорость симуляции игры так, что она *чувствуется* быстрой даже при низком FPS. Либо календарь, либо сами юниты, либо и то и другое можно настроить, так что timestream -fps 100 -units, заставит календарь тикать, а юниты будут двигаться в пять раз быстрее, в то время как ваш фактический FPS составляет ничтожные 20. Это очень полезно для расширения игровых возможностей старых крепостей, где быстрый микроменеджмент не так важен, и большая часть повседневного функционирования выполняется сама собой.
  • fastdwarf Заставляет дварфов и других существ двигаться и работать быстрее или заставляет их телепортироваться. Запустите fastdwarf help для получения дополнительной информации.

Специфика Mac OS X

Spotlight индексирует файлы на вашем Mac. Поскольку DF постоянно изменяет файлы, Spotlight будет продолжать индексировать их, используя 60-70% вашего процессора. Исключите DF в системных настройках: настройках приватности Spotlight (перетащив папку сохранения в список или нажав кнопку +), и вы можете получите увеличение FPS в два раза. Это может легко обеспечить прирост более 30 кадров в секунду даже на многоядерных компьютерах, которым не нужно беспокоиться о процессоре. Это связано с тем, что DF не является многопоточным.

Обратите внимание, что исключение папки сохранений из Spotlight означает, что вы не можете использовать Spotlight или Finder для поиска в raw-файлах. Если вам это нужно по какой-то причине, вы можете использовать для этого "find" из командной строки.

Специфика GNU/Linux

Размещение всего каталога df_linux в tmpfs с помощью Anything Sync Daemon может улучшить FPS в зависимости от вашей системы.

Если вы запускаете какое-либо индексирование, исключите каталог DF.

Установка mimalloc или jemalloc и их предварительная загрузка в ваш скрипт ./df для запуска Dwarf Fortress может привести к увеличению частоты кадров:

#!/bin/sh
DF_DIR=$(dirname "$0")
cd "${DF_DIR}"
LD_PRELOAD="/path/to/libmimalloc.so.2.0" ./libs/Dwarf_Fortress "$@"

Путь, по которому установлен malloc, может отличаться, проверьте /usr/lib/, /usr/lib64/, /usr/local/lib/, /usr/local/lib64/ и /usr/lib/x86_64-linux-gnu/. Имя файла .so также может отличаться.

Специфика Mac OS X или GNU/Linux

Настройка приоритета процесса

Одной из особенностей Unix-подобных систем является возможность контролировать приоритет процесса по отношению к другим процессам, работающим в то же время. Это его значение "приятности", причем -20 является наиболее благоприятным для процесса. Некоторые графические диспетчеры задач позволяют задать это значение, но в противном случае вы можете использовать команду "renice" следующим образом:

sudo renice -n -20 -p $(pgrep Dwarf_Fortress)

или если вы используете версию игры Steam, команда будет выглядеть так:

sudo renice -n  -20 -p $(pgrep dwarfort)

Если команда прошла успешно, результат должен быть таким:

(PID #) (process ID) old priority (старое число), new priority -20

Эта команда должна работать в большинстве дистрибутивов GNU/Linux. Для macOS (чей двоичный файл Dwarf Fortress по какой-то причине использует соглашение об именах Windows), используйте:

sudo renice -n -20 -p $(pgrep dwarfort.exe)

Также

FAQ по игровому интерфейсу
Гайд по интерфейсу
Что значат пиктограмки?
Что означают меняющиеся значки?
Как заставить игру идти быстрее?
Как увеличить размер экрана?
Как упростить рутинные операции?
Я играю с лаптопа, как мне перенастроить кнопки?
Где я могу взять (другой) графический набор для игры?
Почему в меню запасов (z) числа отображаются жёлтым и не точно: 10? 20?...
Как расшифровать значки у разных предметов?
Добавить вопрос в FAQ
Назад в раздел: Вопросы и ответы