Перейти к содержанию

PZO Launcher 1.1: оптимизации и исправления совместимости, 23–24 октября

Историческая ветка PZO 1.1 заявила оптимизации анимации зомби, AI, дальнего рендеринга и загрузки, а затем исправила проблемы совместимости ZombieBuddy/Viewpoint и графические регрессии.

Опубликовано

Обновлено

23–24 октября 2026 года вышла ветка PZO Launcher 1.1: предварительная V1.1-unstable, стабильная V1.1.1 и последующие исправления до V1.1.4.5. Это отдельный проект оптимизаций PZO, а не PZOptimized/xD3I и не официальный патч Project Zomboid. Релиз-ноты сообщают об ускорении анимации зомби, AI, дальнего окружения и ряда игровых операций, а затем описывают регрессии и исправления совместимости и графики. Все FPS, измерения и утверждения о совместимости ниже принадлежат автору и независимо не воспроизводились; версия 1.1 — историческая, не последняя версия проекта.

V1.1-unstable и V1.1.1: производительность

Stable V1.1.1 включает изменения V1.1-unstable и построена на 1.0.2.1. В обоих release body приведены одинаковые функции, числа, ограничения и исправления; ниже они изложены один раз. Три нативные библиотеки Windows, Linux и universal macOS сообщали версию соответствующего релиза, совпадающую с Java engine.

Автор описывает тест Louisville Horde (несколько тысяч зомби) как A/B-сравнение с vanilla в одной сессии при активном окне игры: около двукратной средней частоты кадров на маршруте орды. На городском маршруте длиной 200 тайлов он указывает 400+ / 300+ FPS против 235 / 199 FPS при масштабе 1 / 2; минимальные 1% кадров, по его словам, почти удвоились. Это результаты автора, а не независимый тест.

Анимация и AI зомби

  • Расчёты весов смешивания, углов и движения каждого зомби остаются в игровом потоке, как в vanilla. Расчёты по костям (bone, twist, model и skin transforms) после завершения цикла зомби распределяются максимум на 8 frame worker threads. Ragdolls, записанные игроки и игроки с родительской привязкой остаются на vanilla-пути. Автор указывает для маршрута орды +12% / +13% средней частоты кадров, а для 1% lows — до +26%.
  • Компонент state machine кэшируется отдельно для персонажа вместо поиска в HashMap при каждой проверке состояния.
  • Проверки видимости автомобиля используют снимок машин за кадр, spatial grid и вариант vanilla box test без выделения памяти. Автор сообщает, что сверил его с vanilla: 0 несовпадений в 164 727 проверках.
  • Удешевлены поиск классов ECS-компонентов, проверки потока profiler и проверки списка замеченных объектов.

Дальние спрайты и растительность

  • Цепные ограждения, строительные леса, уличные декорации и другие спрайты с флагом translucent раньше отрисовывались по одному каждый кадр. Дальше 24 тайлов от игрока их теперь запекают в текстуру чанка; вблизи ничего не меняется. При включённом колыхании от ветра так же запекаются дальние деревья и растения.
  • Для городского маршрута автор приводит уменьшение translucent draw calls с 355 до 182 за кадр и +23% средней частоты кадров при отдалённом масштабе.
  • Автор благодарит автора Atmospherics за указание на высокую стоимость полупрозрачных спрайтов. Оптимизация автоматически отключается при активном Atmospherics, поскольку мод сам выполняет эту работу.

Рендеринг

  • Палитры матриц копируются одним блоком, а не по одному float; skin transforms предварительно рассчитываются на worker threads.
  • Количество mip-уровней цепочек текстур чанков ограничено теми уровнями, которые реально выбирает мир.
  • Частицы погоды рисуются тайлами; увеличены пакеты спрайтов; для луж применяется ранняя проверка глубины; косметические повторные запекания распределены по кадрам.
  • Сокращена обработка анимации дальних зомби и автомобилей, когда их не видно.

Загрузка чанков, добыча и Lua

  • Результаты поиска предметов при расчёте добычи сохраняются до перезагрузки скриптов; автор приводит для FindItem снижение доли времени расчёта добычи с 46% до 24%.
  • Текстуры чрезмерного размера уменьшаются в file worker, а не в игровом потоке.
  • При вызове каждого Lua-события больше не создаётся новая строка profiler label на каждый callback и не пересканивается список callback после каждого вызова.

Исправления и ограничения совместимости

  • Устранено сообщение ошибки при появлении зомби “Forward Direction cannot be zero length vector”, вызванное, по описанию, vanilla-состоянием гонки на общем векторе направления между игровым и render-потоками.
  • Мухи у трупов больше не вызывают повторное запекание чанка рядом с игроком каждые несколько кадров, когда vanilla очищал и повторно устанавливал ту же клетку.
  • Lua globals PZO и интерфейс главного меню теперь привязаны к игровому потоку, а не к фоновой задаче; автор предположил, что это устраняет периодический сбой Vehicles.Init.Default при появлении автомобиля.
  • Исправлено зависание пригоревшего здания.
  • Исправлены предыдущие игровые изменения: ключи зданий и автомобиля снова размещаются в бардачках (пропускаются только бардачки без контейнера); у новых персонажей снова случайные скины; предел болезни от трупа и туман возвращены к vanilla.
  • Ошибки CRC/длины чанков снова отображаются, а не подавляются.
  • PZO отключается и предупреждает, если в папке игры установлены переопределения классов PZ_Optimization: одновременно эти два проекта работать не могут. Если другой Java agent (например, ZombieBuddy) повторно трансформирует класс, уже изменённый PZO, патч PZO накладывается заново вместо отклонения такой трансформации.

Безопасность, диагностика и лицензия

  • Доступ Lua-файлов ограничен папкой пользователя Zomboid, папкой игры и папками Steam Workshop; доступ ко всем корням дисков убран.
  • Добавлен встроенный игровой benchmark harness: A/B-прогоны vanilla и PZO, маршруты орды, шторма и быстрого перемещения, замеры времени Lua по обработчикам, разбивка translucent draw и отслеживание фокуса окна.
  • Неудачные обращения Vehicles.* из Lua записываются вместе с потоком и stack trace.
  • Начиная с V1.1 код доступен по PZO Source-Available License (см. LICENSE). Версии до 1.0.2.1 включительно остаются под GPL-3.0.

Установка для ветки 1.1

  • Windows: распаковать PZO-Optimizer-Windows.zip в папку Project Zomboid и запустить install.bat.
  • macOS/Linux: распаковать PZO_Optimizer_macOS_Linux.zip в папку игры; запустить pzo_optimizer.sh на Linux или pzo_optimizer.command на macOS.
  • Для серверов использовать PZO-Server-Windows.zip или PZO-Server-Linux.zip.

Исправления после выпуска 1.1

В выбранных релизах 1.1.2–1.1.4.5 развивались исправления, связанные с изменениями ZombieBuddy и рендерингом. Условия отдельных фиксов различались; ниже сохранены их версии и ограничения.

V1.1.2 — 23 октября

Исправлен отказ левого щелчка в игре при установленных ZombieBuddy и ViewpointFPS+ (или других модах Viewpoint). По описанию автора, ViewpointFPS+ повторно патчил класс персонажа после PZO; два патча PZO добавляли поля и методы во второй раз, из-за чего Java отклоняла класс (ClassFormatError), терялись хуки прицеливания и атаки Viewpoint, хотя он продолжал перехватывать курсор. PZO теперь распознаёт класс, уже содержащий его патч, и оставляет его без повторного изменения. Это охватывает патчи PZO, добавляющие что-либо в игровые классы: персонажи, выключатели света, анимация и погода.

V1.1.2.1 — 23 октября

Исправление для ZombieBuddy и любых ZombieBuddy-модов. ZombieBuddy загружал класс персонажа до того, как PZO мог его патчить; позднее PZO уже не мог добавить поля. Оптимизация AI зомби для чтения переходов действий в worker threads требовала три новых поля; эта часть пропускалась, но вторая часть применялась. В результате каждый кадр возникала ошибка главного обновления игры: с некоторыми модами игрока возвращало в меню, с другими проявлялись неработающие щелчки и задержка ввода. Оптимизация больше не добавляет поля в класс персонажа, поэтому при установленном ZombieBuddy она применяется и ускорение AI зомби доступно так же, как остальным. Если в будущей версии игры её не удастся настроить, вместо ошибки будет выполняться исходный код игры без этой оптимизации.

V1.1.2.2 — 23 октября

Hotfix для игроков Project Viewpoint; остальное совпадает с 1.1.2.1. Установленный Viewpoint вызывал неработающие щелчки мыши после загрузки игры и в собственном окне настройки. Поскольку ZombieBuddy применяет изменения Viewpoint пакетами, Java отклоняла пакет класса с полями или методами из оптимизаций 1.1, и остальная часть пакета не устанавливалась: не работали рендерер, окно настроек и обработка мыши. Пока включён Viewpoint, PZO оставляет структуру всех игровых классов без изменений. Для этих игроков отключаются три оптимизации: расчёты костей зомби в worker threads, кэш питания выключателей и пакетная обработка погодных тайлов. Поиск state machine зомби использует вариант без дополнительных полей; остальное остаётся включённым. Игроки без Viewpoint, в том числе с другими ZombieBuddy-модами, не затронуты. Если часть пакетной обработки погоды не удаётся применить, частицы дождя и снега возвращаются к отрисовке самой игры вместо ошибки.

V1.1.3 — 24 октября

Исправлено мерцание текстур и освещения, замеченное некоторыми игроками после 1.1. Все три native library (Windows, Linux и universal macOS) сообщают версию 1.1.3, соответствующую Java engine.

  • Заборы, перила и столы с точечными артефактами: с 1.1 дальние прозрачные тайлы (цепные ограждения, перила, леса, уличный декор, столы для пикника) запекались в кэшированную текстуру чанка. Слабые полупрозрачные пиксели ошибочно скрывали зомби и игроков за ограждением. Теперь такие тайлы запекаются в два прохода, и скрывают объекты только своими непрозрачными частями.
  • Рядом с водой слабые пиксели отображались чёрными. Тайлы с водой на фоне, включённые светильники, зеркала, стекло и декали на полу больше не запекаются и рисуются каждый кадр, как в немодифицированной игре.
  • Порог расстояния, на котором тайл переключается между запеканием и отрисовкой каждый кадр, теперь следует за камерой (что лучше при Viewpoint) и имеет более широкий запас; тайлы около границы больше не переключаются туда-сюда при движении.
  • Мерцание освещения при движении: раньше при изменении освещения множества чанков в один кадр обновлялась лишь часть, всегда одни и те же чанки первыми, а остальные могли до половины секунды показывать старый свет. Поскольку движение меняет освещение соседних клеток каждый кадр, рядом могли временно различаться освещённые чанки. Теперь обновления планируются каждый кадр: если помещаются — обновляются все сразу как в немодифицированной игре; иначе первыми идут чанки, ожидавшие дольше, затем ближайшие к камере. Ни один чанк не должен ждать более 33 мс. Вспышки молний по-прежнему распределены на несколько кадров, чтобы избежать сильного рывка.

V1.1.4 — 24 октября

Исправлена работа ZombieBuddy-модов и редкое мерцание деревьев. Все три native library (Windows, Linux и universal macOS) сообщают версию 1.1.4, соответствующую Java engine.

  • Некоторые ZombieBuddy-моды — Knox Inventory, Knox Event Expanded, ShadowZ и Peek a View — могли терять Java-часть: появлялась ошибка “Java class missing”, ломалось главное меню либо мод не действовал. После удаления PZO проблема исчезала. ZombieBuddy устанавливал изменения модов пакетами; если класс с новыми полями или методами от оптимизации 1.1 попадал в пакет, Java отклоняла его, и остальная часть пакета пропускалась. В 1.1.2.2 это исправлялось только для Viewpoint.
  • Теперь при включённом любом ZombieBuddy Java-моде PZO не меняет структуру ни одного игрового класса. Расчёт костей зомби в потоках, кэш питания выключателей и пакетная обработка погодных тайлов перестроены так, чтобы не менять классы; они остаются включены и у игроков с ZombieBuddy. Игроки Viewpoint потеряли эти оптимизации в 1.1.2.2. Только кэш state machine зомби для них работает в немного более медленном варианте. Игроки без ZombieBuddy Java-модов не затронуты.
  • Деревья иногда несколько раз мерцали при приближении и затем отображались нормально. Если рядом загружался чанк или дерево начинало/заканчивало затухать около персонажа, PZO мог отложить перерисовку чанка на несколько кадров, из-за чего деревья временно исчезали. Теперь перерисовка происходит сразу, как в немодифицированной игре; отложенными всё ещё могут быть только обновления крови, трупов и освещения.

V1.1.4.5 — 24 октября

Улучшена совместимость с ZombieBuddy-модами: теперь PZO проверяет изменения каждого мода и уступает только там, где это необходимо. Все три native library (Windows, Linux и universal macOS) сообщают 1.1.4.5, соответствующую Java engine.

  • При запуске PZO читает непосредственно из файлов список игровых методов, изменённых ZombieBuddy и каждым включённым ZombieBuddy-модом. PZO не запускает и не загружает код этих модов.
  • В 1.1.4 любой включённый ZombieBuddy Java-мод переводил все игровые классы в совместимый режим. Теперь это делается только для классов, которые моды действительно изменяют. Например, кэш state machine зомби сохраняет полную скорость, если мод не меняет игровых персонажей.
  • Если мод изменяет тот же игровой метод, который переписывает оптимизация PZO, отключается только эта оптимизация; остальные остаются активными. Изменённый модом метод работает так, как проверил его автор.
  • Отчёт Zomboid/PZO_mod_compat.txt рядом с console.txt перечисляет найденные ZombieBuddy-моды, изменённые ими классы и методы, а также каждую отключённую оптимизацию PZO с причиной. Издатель рекомендует прикладывать отчёт к сообщению об ошибке. Игроков без ZombieBuddy это не затрагивает.

Установка версий исправлений 1.1.2–1.1.4.5

  • Windows: распаковать PZO-Optimizer-Windows.zip в папку Project Zomboid и запустить install.bat.
  • macOS/Linux: распаковать PZO_Optimizer_macOS_Linux.zip в папку игры и запустить pzo_optimizer.sh на Linux либо pzo_optimizer.command на macOS.
  • Для сервера использовать PZO-Server-Windows.zip или PZO-Server-Linux.zip.

Текущая совместимость и сохранение этих результатов в более поздних версиях в этих релиз-нотах не устанавливаются. Описанные FPS и исправления — сведения издателя; независимых тестов игры, сервера или пакетов не проводили.