← Back to home

QuantumHy

In Development

Hytale • Version 0.2.1

server performance fps client view-distance entities optimization solo co-op

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

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

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

QuantumHy

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

Захват frametime в Hytale Client. Один и тот же тестовый ПК во всех прогонах.

Тестовый ПК

КомпонентSpec
CPUAMD Ryzen 5 3600
GPUNVIDIA GeForce GTX 1650 4GB
RAM16 ГБ (2×8 ГБ)

Маршрут нагрузки

Одиночный мир, тот же маршрут нагрузки (птицы и мобы на экране). Mod off против QuantumHy по умолчанию (~205 с off, ~233 с on).

МетрикаOffOnИзменение
Средний FPS102146+43%
P551,691,1+76%
P136,264,4+78%
Среднее 1% low14,019,8+41%
Время ниже 60 FPS25,3%6,9%−73% этого времени

Маршрут нагрузки — mod off

Маршрут нагрузки — mod on

Обычная игра (0.2.1)

Одиночный мир, обычная сессия (~5 мин каждая). Без принудительного маршрута нагрузки, просто игра. Mod off против QuantumHy 0.2.1 по умолчанию.

МетрикаOffOnИзменение
Средний FPS159,6226,9+42%
P5111,1178,1+60%
P177,2139,1+80%
Среднее 1% low43,7111,7+155%
Время ниже 60 FPS2,2%0,1%−95% этого времени

Полные таблицы на GitHub.

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

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

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

На открытом пространстве оба снова поднимаются к исходному значению. Пока вы ещё прогружаете чанки (только зашли или бежите), урезание удерживается, чтобы клиенту не велели сбросить чанки, которые он занят прогрузкой.

Возможности

  • Адаптивный радиус обзора в чанках по локальной плотности сущностей, ограничен вашим собственным радиусом
  • Адаптивный радиус стриминга сущностей в блоках, главный рычаг в местах с обилием мобов
  • Глобальный LOD-куллинг сущностей, отбрасывающий мелкие и дальние сущности раньше
  • Сглаживание плотности, чтобы обзор движущегося игрока не скакал
  • Автоматический перехват у LeanCore, чтобы два мода никогда не спорили за радиус обзора
  • Подробный серверный лог, объясняющий каждое решение по каждому игроку за проход

Установка

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

Конфиг

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

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

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

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

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

Лицензия

Лицензия MIT

For server owners

Need permissions, commands & config?

The full administration guide covers every permission node, admin command, LuckPerms examples, and all config options.

Read server documentation