QuantumHy
АктивныйHytale • Version 0.4.0
QuantumHy делает ваш клиент плавнее в Hytale, урезая то, сколько сервер просит его отрисовывать, и подстраивает это под каждого игрока в зависимости от того, где вы находитесь. На открытом пространстве у вас полный обзор; в людном, тяжёлом месте он стягивает картинку, чтобы ваш FPS не проседал.
Клиент Hytale нативный, поэтому ни один мод не трогает рендерер. Что серверный мод может сделать, так это решить, сколько каждому клиенту приходится отрисовывать, и в этом весь приём: меньше чанков и сущностей в обзоре означает меньше объектов для отрисовки, а значит больше кадров.
Два честных ограничения. Он помогает только там, где установлен (ваш одиночный мир, ваш собственный сервер или сервер, который его использует), но не на сервере, к которому вы просто подключаетесь. И он никогда не раздвигает ваш обзор дальше того, что вы запросили: ваш собственный радиус обзора это потолок, QuantumHy только опускает его.
Производительность
Я сыграл одну и ту же сессию дважды на Hytale 0.7.0: один раз без QuantumHy, второй раз с QuantumHy 0.4.0 на стандартном конфиге. Тот же мир, тот же путь, те же настройки клиента, тот же ПК. Время кадров снято прямо с клиента Hytale через PresentMon (инструмент захвата внутри CapFrameX).
Тестовый ПК
| Компонент | Характеристики |
|---|---|
| CPU | AMD Ryzen 5 3600 |
| GPU | NVIDIA GeForce GTX 1650 4GB |
| RAM | 16 GB (2×8 GB) |
Что я делал в каждой части
- Быстрый полёт (60 с): летел по прямой над местностью, которую ещё никто не загружал, намного быстрее, чем можно бежать, так что новые чанки всё время генерируются и отправляются.
- Толпа мобов (90 с): остановился и заспавнил вокруг себя около 150 животных (овцы, коровы, свиньи, козы, куры, кабаны).
- Эффекты (60 с): остался у толпы и спамил взрывы, огонь и частицы ударов прямо поверх неё.
- Круги (60 с): летал кругами вокруг толпы, пока шли более лёгкие эффекты, так что камера постоянно проходит по мобам.
- Полёт назад (60 с): вернулся тем же путём.
Результаты
| Часть | Без QuantumHy (средний / 1% low) | QuantumHy 0.4.0 (средний / 1% low) | Кадры дольше 50 мс |
|---|---|---|---|
| Быстрый полёт | 65 / 7 | 142 / 48 | 40 → 1 |
| Толпа мобов | 75 / 21 | 128 / 73 | 6 → 0 |
| Эффекты | 76 / 41 | 121 / 79 | 0 → 0 |
| Круги | 54 / 19 | 115 / 58 | 12 → 0 |
| Полёт назад | 58 / 15 | 107 / 42 | 30 → 1 |
| Вся сессия | 66 / 14 | 123 / 56 | 88 → 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
- Опциональные функции, выключены по умолчанию: реже обновления позиции дальних сущностей, более широкое слияние предметов под нагрузкой сервера
Установка
- Скачайте QuantumHy-0.4.0.jar на вкладке Files в CurseForge
- Поместите JAR в папку mods/ сервера или в одиночной игре на Windows:
%AppData%\Hytale\UserData\Mods - Запустите сервер. Конфиг создаётся как 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 и параметры конфигурации.
Читать документацию сервера