В общем о трэкинге проблем и возможных трюков оптимизации существующих клиентов игры а также не допускание этих же проблем в вариации клиентов на новых движках. Со временем буду тестировать импакт на перворманс при фиксе той или иной проблемы и добавлю сравнения, но пока только проблемы.
Если заметили или знаете что-то подобное добавьте в тему.
Закреплено, from community
:
By Charmant in this post
Критический баг производительности в старых клиентах Lineage 2 где анимации магических скиллов вызывают серьезное снижение FPS во время массового PvP, в конечном итоге падая до практически нулевых значений после нескольких минут игры.
Затронутые версии: C5, Interlude, Kamael, Hellbound, Gracia, Freya, High Five (и потенциально более ранние обновления хроник)
В функции USkillVisualEffect::TriggerCasting добавить проверку перед вызовом AEmitter::AdjustparticleLife:
Плюсы:
Изменить смещение базовой длительности с +0.2f на +0.8f в расчете времени жизни:
Плюсы:
By Charmant in this post
Если заметили или знаете что-то подобное добавьте в тему.
Закреплено, from community
By Charmant in this post
Краткое описание
Критический баг производительности в старых клиентах Lineage 2 где анимации магических скиллов вызывают серьезное снижение FPS во время массового PvP, в конечном итоге падая до практически нулевых значений после нескольких минут игры.
Затронутые версии: C5, Interlude, Kamael, Hellbound, Gracia, Freya, High Five (и потенциально более ранние обновления хроник)
Описание проблемы
Симптомы
- FPS постепенно снижается до нуля во время массового PvP примерно через ~2 минуты
- Деградация производительности происходит при использовании множества магических скиллов с анимациями каста
- Проблема требует релога клиента для временного решения
- Игроки изначально подозревали переполнение кеша, но истинная причина другая
Первопричина
Старые магические скиллы с анимациями каста (Battle Heal и подобные заклинания с эффектами частиц) запускают анимации, которые продолжают работать бесконечно в функции Tick. Эти анимации не завершаются должным образом после окончания каста заклинания, что приводит к:- Накоплению активных эмиттеров частиц
- Экспоненциальному росту нагрузки на рендеринг
- Утечке памяти/производительности в системе частиц
Технические детали
Проблема возникает в функции USkillVisualEffect::TriggerCasting при вызове AEmitter::AdjustparticleLife. Некоторые анимации скиллов передают значение параметра float меньше 1.1f, что приводит к недостаточному времени жизни частиц для корректной очистки, в результате чего частицы остаются активными бесконечно.
Код:
USkillVisualEffect::TriggerCasting
└─> AEmitter::AdjustparticleLife(this_00, FYar1);
Шаги воспроизведения
- Включить монитор FPS
- Поднять casting speed до 1100+
- Кастовать Battle Heal повторно
- Наблюдать быстрое падение FPS; анимаеция сохраняется длительно время (идеально для теста)
- После нескольких минут массового каста заклинаний с несколькими персонажами FPS приближается к нулю
Предлагаемые решения
Решение 1: Валидация минимального времени жизни
В функции USkillVisualEffect::TriggerCasting добавить проверку перед вызовом AEmitter::AdjustparticleLife:
C-подобный:
// Перед вызовом AEmitter::AdjustparticleLife
if (FYar1 < 1.1f) {
FYar1 = 1.1f;
}
AEmitter::AdjustparticleLife(this_00, FYar1);
Плюсы:
- Точечный фикс, затрагивающий только проблемные случаи
- Минимальное влияние на существующие анимации скиллов
- Предотвращает выполнение анимаций короче минимального порога очистки
Решение 2: Увеличенная базовая длительность
Изменить смещение базовой длительности с +0.2f на +0.8f в расчете времени жизни:
Плюсы:
- Гарантирует достаточное время для очистки всех анимаций
- Похожий подход используется в более новых версиях клиента
- Все анимации скиллов будут работать немного дольше (~0.6с дополнительно)
- Может казаться избыточным для скиллов с уже подходящей длительностью
- Менее точное решение
Заметки
- Фикс значительно улучшил опыт массового PvP
- Этот фикс был реализован и протестирован на форумах Elmorlabs
- Более новые клиенты (после High Five) реализуют похожую логику с увеличенной длительностью анимаций
- Современные клиенты обрабатывают это более корректно по умолчанию с увеличенным временем жизни частиц
Последнее редактирование:











































