← На главную

QuantumHy

Активный

Hytale • Version 0.4.0

serverperformancefpsclientview-distanceentitiesoptimizationsoloco-op

QuantumHy делает ваш клиент плавнее в Hytale, урезая то, сколько сервер просит его отрисовывать, и подстраивает это под каждого игрока в зависимости от того, где вы находитесь. На открытом пространстве у вас полный обзор; в людном, тяжёлом месте он стягивает картинку, чтобы ваш FPS не проседал.

Клиент Hytale нативный, поэтому ни один мод не трогает рендерер. Что серверный мод может сделать, так это решить, сколько каждому клиенту приходится отрисовывать, и в этом весь приём: меньше чанков и сущностей в обзоре означает меньше объектов для отрисовки, а значит больше кадров.

Два честных ограничения. Он помогает только там, где установлен (ваш одиночный мир, ваш собственный сервер или сервер, который его использует), но не на сервере, к которому вы просто подключаетесь. И он никогда не раздвигает ваш обзор дальше того, что вы запросили: ваш собственный радиус обзора это потолок, QuantumHy только опускает его.

QuantumHy

Производительность

Я сыграл одну и ту же сессию дважды на Hytale 0.7.0: один раз без QuantumHy, второй раз с QuantumHy 0.4.0 на стандартном конфиге. Тот же мир, тот же путь, те же настройки клиента, тот же ПК. Время кадров снято прямо с клиента Hytale через PresentMon (инструмент захвата внутри CapFrameX).

Тестовый ПК

КомпонентХарактеристики
CPUAMD Ryzen 5 3600
GPUNVIDIA GeForce GTX 1650 4GB
RAM16 GB (2×8 GB)

Что я делал в каждой части

  • Быстрый полёт (60 с): летел по прямой над местностью, которую ещё никто не загружал, намного быстрее, чем можно бежать, так что новые чанки всё время генерируются и отправляются.
  • Толпа мобов (90 с): остановился и заспавнил вокруг себя около 150 животных (овцы, коровы, свиньи, козы, куры, кабаны).
  • Эффекты (60 с): остался у толпы и спамил взрывы, огонь и частицы ударов прямо поверх неё.
  • Круги (60 с): летал кругами вокруг толпы, пока шли более лёгкие эффекты, так что камера постоянно проходит по мобам.
  • Полёт назад (60 с): вернулся тем же путём.

Результаты

ЧастьБез QuantumHy (средний / 1% low)QuantumHy 0.4.0 (средний / 1% low)Кадры дольше 50 мс
Быстрый полёт65 / 7142 / 4840 → 1
Толпа мобов75 / 21128 / 736 → 0
Эффекты76 / 41121 / 790 → 0
Круги54 / 19115 / 5812 → 0
Полёт назад58 / 15107 / 4230 → 1
Вся сессия66 / 14123 / 5688 → 2

1% low это средний FPS самых медленных 1% кадров, число, которое показывает, насколько сильны фризы.

Откуда берутся кадры

  • Без QuantumHy клиент рисовал обзор в 24 чанка и получал всех мобов в радиусе 768 блоков. С QuantumHy обзор остановился на 12 чанках, а мобы приходят до 48 блоков (примерно с 190 видимых сущностей до примерно 50). Это и есть обмен: вы видите не так далеко, зато толпа перестаёт съедать кадры.
  • В быстром полёте край обзора догружается чуть позади вас, потому что в выживании так быстро никто не двигается. Обычный бег (7 блоков/с) стрим чанков держит с запасом.
  • По одной сессии на вариант, так что разница меньше ~5% была бы шумом. Разница выше шумом не является.

Как это работает

Каждые несколько секунд QuantumHy подсчитывает сущности в чанках вокруг каждого игрока как оценку стоимости отрисовки, сглаживает этот сигнал и превращает его в единый коэффициент урезания. Этот коэффициент двигает два рычага одновременно:

  • Радиус обзора в чанках, чтобы перестать стримить дальний рельеф, когда оживлённо.
  • Радиус стриминга сущностей в блоках, чтобы сервер перестал отправлять дальних мобов. Это не зависит от чанков и именно отсюда берётся большая часть прироста, когда вы смотрите на толпу.

Радиус не возвращается в момент, когда зона кажется пустой. Expand ждёт спокойной нагрузки, загрузки хотя бы половины диска плотности, что вы не летите и мир не hitchит. Пока идёт стриминг или вход, урезание удерживается, чтобы клиенту не велели сбросить чанки, которые он занят прогрузкой. При полном shrink радиус сущностей падает до пола за один проход.

Возможности

  • Адаптивный радиус обзора в чанках по локальной плотности сущностей, ограничен вашим собственным радиусом
  • Адаптивный радиус стриминга сущностей в блоках, главный рычаг в местах с обилием мобов
  • Заморозка expand пока нагрузка, покрытие и MSPT спокойны (без пилы 6↔13)
  • Постоянное отключение для каждого игрока через /q optimize off, не затрагивающее остальных игроков
  • Опциональное глобальное переопределение LOD сущностей, выключенное по умолчанию, для администраторов, которым нужен более сильный куллинг во всём мире
  • Сглаживание плотности, чтобы обзор движущегося игрока не скакал
  • Автоматический перехват у LeanCore, чтобы два мода никогда не спорили за радиус обзора
  • Опциональный подробный серверный лог, объясняющий каждое решение по каждому игроку за проход (по умолчанию выкл.)
  • Проверка обновлений при старте, только операторам или durkz.quantumhy.admin (отключение: checkForUpdates)
  • Ограничение дальности отрисовки клиента, чтобы клиент перестал рисовать то, что сервер уже не отправляет
  • Облегчение для перегруженного клиента: отстающий клиент получает меньший радиус и более мягкую отправку чанков
  • Бюджет дальних эффектов для частиц и 3D-звуков; эффекты рядом с вами проходят всегда
  • Учёт памяти LeanCore: меньший радиус, пока LeanCore сообщает о нехватке heap
  • Опциональные функции, выключены по умолчанию: реже обновления позиции дальних сущностей, более широкое слияние предметов под нагрузкой сервера

Установка

  1. Скачайте QuantumHy-0.4.0.jar на вкладке Files в CurseForge
  2. Поместите JAR в папку mods/ сервера или в одиночной игре на Windows: %AppData%\Hytale\UserData\Mods
  3. Запустите сервер. Конфиг создаётся как QuantumHy.json в папке данных плагина

Команды

/q status
/q optimize on
/q optimize off
/q help

Алиасы: /quantumhy, /qhy. Игроки видят в /q status только собственное состояние оптимизации; администраторы и консоль сервера видят полное состояние runtime.

Конфиг

Настройки сервера лежат в QuantumHy.json, который создаётся при первом запуске. Выбор игроков хранится в PlayerPreferences.json. Значения по умолчанию работают сразу: жёсткого потолка обзора нет, адаптация только когда людно. Установите targetClientViewRadius выше 0, чтобы обменять дальность обзора на FPS везде. Установите checkForUpdates в false, чтобы пропустить проверку версии при старте. Полный справочник ключей: документация.

Права

  • durkz.quantumhy.admin: получать внутриигровые уведомления об обновлении и видеть полный /q status. Операторы сервера наследуют это через *.

Запуск вместе с LeanCore

Если вы запускаете и LeanCore, QuantumHy сам разруливает пересечение. Оба могут задавать радиус обзора клиента, а должен только один, поэтому QuantumHy берёт его на себя: при запуске он обнаруживает LeanCore, отключает управление радиусом обзора у LeanCore и сам ведёт радиус. LeanCore продолжает делать всё остальное (радиус симуляции, пропускную способность чанков, память). Трогать конфиг LeanCore не нужно. Установите leanCoreTakeover в false, чтобы оставить LeanCore в покое, или yieldToLeanCoreViewRadius в true, чтобы радиус обзора остался за LeanCore.

Рекомендации

  • Одиночный или ваш собственный сервер: оставьте значения по умолчанию. Дальность обзора теряется только когда реально людно.
  • Хотите FPS везде: установите targetClientViewRadius на 12-16, чтобы ограничить дальность обзора даже на открытом пространстве.
  • Предпочитаете исходные ограничения сервера: используйте /q optimize off. Ваш выбор сохраняется после перезапуска.
  • Включайте verboseLog только для диагностики; по умолчанию он выключен.
  • Оставляйте checkForUpdates включённым. Выключите, если операторам не нужно уведомление о новом JAR.

Известные ограничения

  • QuantumHy не может считывать FPS клиента. Он реагирует на локальную плотность сущностей, состояние стриминга, нагрузку от видимых сущностей и MSPT сервера.
  • /q optimize off отключает персональные настройки обзора и стриминга сущностей. Глобальные настройки, явно включённые администратором, всё равно действуют на мир.

Лицензия

Лицензия MIT

Для владельцев серверов

Нужны права, команды и конфиг?

Полное руководство описывает все права, админ-команды, примеры LuckPerms и параметры конфигурации.

Читать документацию сервера