Ошибки, оптимизация и 💩 в клиентах Lineage2

reanimatedmanx

BPD🖤OCD
Let's make it happen
Стальной Визионер
Старожил I степени
Сообщения
73
Розыгрыши
0
Репутация
141
Реакции
96
Баллы
1 350
В общем о трэкинге проблем и возможных трюков оптимизации существующих клиентов игры а также не допускание этих же проблем в вариации клиентов на новых движках. Со временем буду тестировать импакт на перворманс при фиксе той или иной проблемы и добавлю сравнения, но пока только проблемы.

Если заметили или знаете что-то подобное добавьте в тему.

0 Gremlins
1740848972964.webp
100 Gremlins
1740849016874.webp
200 Gremlins
1740849104363.webp
Когда речь о ММО и о сотнях или тысячи акторов на экране, каждая микроптимизация важна.

Цилиндр колизии НПС имеет 66 поверхности хотя могло быть 34 если не грань по середине.
1740849397309.webp
1740849821699.webp
Несколько токенов для поиска:
Код:
Not used
(not used)
Not in use

(Test)
Test -
Test-
Testing -
Testing
For testing
1740851613889.webp
1740851116532.webp
1740851023582.webp
1740850721313.webp
1740850639197.webp
1740850460234.webp
Растояние кости не соответствует визуалу mesh'a тем самым, влияет на симуляцию плаща.
1740852999742.webp
1740853115551.webp
При загрузке/выгрузке большого количество мелких ассетов круто загружает FPS.


- Слишком большое использование альфа текстур
- Слишком много слотов для материалов
- Не используется mesh instancing
- Слишком много полигонов на ассетах которые не играют роли
- Старый движок (


1740881221712.webp
1740879773514.webp
1740881139377.webp


Закреплено, from community 🖤:
1740854799235.webp ---
By Charmant in this post

`TO BE CONTINUED...INDEFINETELY...`
 
Последнее редактирование:

В общем о трэкинге проблем и возможных трюков оптимизации существующих клиентов игры а также не допускание этих же проблем в вариации клиентов на новых движках. Со временем буду тестировать импакт на перворманс при фиксе той или иной проблемы и добавлю сравнения, но пока только проблемы.

Если заметили или знаете что-то подобное добавьте в тему.

Когда речь о ММО и о сотнях или тысячи акторов на экране, каждая микроптимизация важна.

Цилиндр колизии НПС имеет 66 поверхности хотя могло быть 34 если не грань по середине.
Посмотреть вложение 84906
Посмотреть вложение 84908
`TO BE CONTINUED...INDEFINETELY...`
1740853568210.webp
При включении этой галочки фпс падает чуть ли не в 2 раза.
А, и еще из-за нее криво рисуются прозрачные монстры:
photo_2025-03-01_21-27-07.webp photo_2025-03-01_21-27-09.webp
 
На старых клиентах, начиная с ц5 и до хф (возможно и ранние апдейты год хроник) есть один жуткий баг, связанный с маг скиллами.
~2 года назад на форуме эльморлаба я объяснял и показывал:
1740859276335.webp
Возникал этот баг практически из-за всех старых скиллов, у которых есть анимация под чаром. В итоге в масс пвп через пару минут фпс улетал в нулину. Лечилось релогом. Все думали что это кеш забивается, а дело было в том что часть анимаций продолжала бесконечно крутиться в Tick функции.
Я две недели ковырял энжину, в итоге придумал фикс:
1740859823817.webp
В функции USkillVisualEffect::TriggerCasting перед вызовом AEmitter::AdjustparticleLife проверить аргумент-float. Если значение меньше 1.1f - заменить на 1.1f. Еще можно вместо прибавки +0.2f сделать +0.8f, но лично мне такой вариант не особо нравится, т.к. почти у всех скиллов анимация будет чуть дольше, что на мой взгляд избыточно. Кстати, в новых клиентах примерно так и сделали. Там анимации крутятся дольше.
Это наверное самый мощный фикс, который я делал для эльморлаба. После него масс пвп стали намного комфортнее, не нужно было делать релог после каждого файта
 
Rolo на эту тему извращался с батл хиллом
 
В функции USkillVisualEffect::TriggerCasting перед вызовом AEmitter::AdjustparticleLife проверить аргумент-float. Если значение меньше 1.1f - заменить на 1.1f. Еще можно вместо прибавки +0.2f сделать +0.8f
Тестил, при 0.8f иногда проскакивают сверхбыстрые касты, минималку надо 1.0f прибавлять, при этом значении проблем нету. А если девелопер сервера - то лучше всего наверн на нем min(animTime, 1.1f) делать при высылании пакета клиенту
 
на нем min(animTime, 1.1f) делать при высылании пакета клиенту
Не, это не вариант. С Томой уже обсуждали. Касты будут очень долгими. Вспомни когда сделали минималку 0.5-0.6 для суриков и глума, насколько это не понравилось игрокам. А если будет аж 1.1? :eek:
 
Не, это не вариант. С Томой уже обсуждали. Касты будут очень долгими. Вспомни когда сделали минималку 0.5-0.6 для суриков и глума, насколько это не понравилось игрокам. А если будет аж 1.1? :eek:
А, хм, если там идет это совестно (время анимации = время каста для клиента), тогда да, не вариант
 
reanimatedmanx начни с основы, что самое важное. Это поиск адекватной оптимизации анимаций персонажей (не эффектов), так как скорей всего именно они потребляют наибольшее количество FPS больше чем раньше. Попытаться улучшить фпс при 300+ игроках в одном месте на новых клиентах. Старые клиенты в разы лучше справлялись с нагрузкой и поддерживали стабильный FPS (с учетом исправления ошибки с эффектами в скриптах, или как пробовали выше в движке), но у них была проблема с очисткой кэша.

В результате исправления ошибок с эффектами в скриптах, на старом "канкуляторе" можно было играть с более-менее нормальным FPS при замесах и в 600 игроков в одной локации. То есть сам клиент справлялся хорошо. Бывали моменты с критами, но от 166p~ они исчезли. Но у старых клиентов была проблема с очисткой кэша - с работой garbage collector при большом объеме накопившегося мусора. В этом случае клиент либо очень долго находится в статусе "не отвечает", либо в конце происходил крит.

На новых клиентах что-то изменили, и теперь уже давно заполнение кэша не продолжает расти при повторном вызове, например скилла. Откладываются только данные о первом вызове уникальных компонентов. Также изменили логику работы сборщика мусора: если раньше он вызывался, когда персонаж находился больше чем в N дистанции от ранее загруженного сектора, и выгружал его (или несколько секторов), то теперь он работает по другой логике. Чаще всего сборщик мусора активировался при телепорте, когда новая точка персонажа находилась далеко от прогруженных секторов. Что сейчас его вызывает не ясно, не смотрел особо но не так как ранее.
 
Это похоже на necroфилию когда пытаются оживить труп старого клиента. В клиентах классик и выше по дефолту таких проблем нету, неужели в 2025 имея сурсы и инфу нельзя прикрутить новый клиент (как минимум 166p) к старым хроникам «c1-hf”.
 
Но у старых клиентов была проблема с очисткой кэша - с работой garbage collector при большом объеме накопившегося мусора. В этом случае клиент либо очень долго находится в статусе "не отвечает", либо в конце происходил крит.
Знакомая ситуация на эпилог клиенте. Правда там нет критов даже при долгой очистке. Выяснил что это опять же из-за анимации скиллов. Например после парочки масс пвп объем памяти может вырасти аж на 500 мб, после чего при очистке игра зависнет на 10-15 секунд, иногда дольше. Если отключить обработку magicSkillUse, то такой проблемы нет. Можно хоть сколько пвпшиться и бить мобов, такой долгой очистки уже не будет. Проблема где-то в UL2EffectEmitter::Notify и APawn::PlaySkillSound, как будто для каких-то скиллов при их повторной анимации игра продолжает жрать память. Но дальше я не углублялся.
если раньше он вызывался, когда персонаж находился больше чем в N дистанции от ранее загруженного сектора, и выгружал его (или несколько секторов)
Ага. И как же это раздражает когда забит кеш. Пересекаешь определенную точку на карте и игра зависает на пару секунд. Кстати на новых клиентах выгрузка уровня по дистанции все еще есть, просто она незаметна. И также было бы на старых клиентах, если бы не проблема с памятью.

В клиентах классик и выше по дефолту таких проблем нету, неужели в 2025 имея сурсы и инфу нельзя прикрутить новый клиент (как минимум 166p) к старым хроникам «c1-hf”.
А там другие проблемы. Если что скрины в первом посте из новых клиентов :) И если уж брать классик, то явно не 166-196. Минимум 286p, в идеале 388
 
Там жесткая просадка идет от интерфейса. нажимаем alt + h и с 358 улетает на ~40% до 503
может есть варик тут че нить похимичить
1741066418003.webp
1741066475047.webp
 
Вопрос по хилу, можно ли прикрутить проверку в серваке на прошлые его наложения, и если идет спам, то не посылать клиенту новые команды на отрисовку всех, а просто отправлять пакет что скил прошел и хп добавились без анимации? Всеравно еще эпилепсия от прошлых висит
Ну и я бы вообще поменял на другую анимацию, более логичную к хилу... Чтобы было видно как передается жизнь от хилера к излечиваемому
 
Там жесткая просадка идет от интерфейса. нажимаем alt + h и с 358 улетает на ~40% до 503
может есть варик тут че нить похимичить
Посмотреть вложение 85044
Посмотреть вложение 85046
Оно и немудрено. Когда я пытался визуализировать интерфейс внешними средствами получалось так, что некоторые окна могли иметь с 10+ Canvas'ов. Это не исправить никак, так построен интерфейс под капотом.
 
Оно и немудрено. Когда я пытался визуализировать интерфейс внешними средствами получалось так, что некоторые окна могли иметь с 10+ Canvas'ов. Это не исправить никак, так построен интерфейс под капотом.

А как его можно упростить и облегчить? Если рассматривать два варианта, родной уе старый, и уе4?
 
1. Как минимум в Артее дико просаживался чуть ли не до нуля фпс, если зажать F1-F12 для вызова каста скиллов на соответствующих шорткатах. Позже ситуация чуток улучшилась, но все равно небольшая просадка при этом есть. Чего там так намудрили корейцы - фиг знает.
2. В крусейде поломали чуток каст ground-скиллов. Когда на бегу жмешь на скилл чтобы выбрать точку каста, то перс при этом останавливается чисто визуально в самом клиенте, но при этом серверу ничего не шлется, так что на сервере перс продолжает бежать дальше, что в итоге вызывает рассинхрон координат и отбрасывание назад при очередном валидейте.
 
Назад
Сверху