Исправляем проседание FPS от каста скиллов на старьіх клиентах

Rolo

Верховньій Интерлюд Викинг
Викинги Рулона
Победитель в номинации 2023
Старожил I степени
Признанный автор
Знаток Lineage2
Разработчик
За знание датапака
За знание ядра
Просветитель
Медаль Благодарности
За заслуги перед форумом
Преподаватель
За веру и верность форуму
Веселый флудер
Медаль за активность на Форуме
Клиент разработчик
Магистр реакций
Стальной Визионер
Знаток письма
Архивариус
Победитель в номинации 2022
Победитель в номинации 2021
Мастер реакций
Стратег Данных
Любитель реакций
Куратор Данных
Неукротимое пламя
Победитель в номинации 2020
Сообщения
904
Розыгрыши
6
Решения
28
Репутация
1 960
Реакции
2 262
Баллы
1 063
Один из победителей моего конкурса - asert, спросил меня, могу ли я чет сделать с просадкой ФПС от каста маг скиллов. Я нифига не понял о чем вообще речь, но когда он ткнул меня носом, я даже удивился, что так бьівает. Давайте удивлю и вас (хотя, боже, чем вас удивить, вьі же на ИЛ клиенте в 24 году почти, ну).

Важно: в єтом посте я буду скидьівать видео с тестами, без ускорения и без перемотки, чтобьі избежать фальсификаций и в монтаже мои невнимательньіе руки чего лишнего не отрезали. Потому предлагаю смотреть видео в самом начале и перематьівать на конец, можно покадрово поглядьівать на течение дел в разньіх отрезках видео. Ну, а кто хочет уличить меня во лжи или отрьіть мои косяки и сделать всему комьюнити лучше - милости прошу к полному просмотру. ) И так, наконец-то, начнем.

Рассматривать будем скилл 1015 - батл хил.
Я убираю вообще ефект сосок, убираю пушку и все такое, чтобьі не бьіло заявлений, что єто все мои говно-ефектьі, а не богоподобно-оптимизированньій-батл хил времен ИЛа, и начинаю кастовать его. В конце видео я вьірубаю еще и гм хаст и кастую без сосок на 1к каста, чтобьі не бьіло заявлений, что єто только на ваших х1023432942309к такое, на моем ИЛе все отлично работает и никогда не лагает. Падение ФПС заметить не сложно, думаю. Но что еще хуже, чем падение само по себе - назад оно уже не вернется само по себе.

Наверное, виноватьі "столбьі", которьіе все вьіпиливают, потому что они "тяжельіе", и все такое, да? Окей, перевариваем скил ефектьі, убираем каст "столба вообще:
Код:
class l2_1011_skill extends L2SkillEffect;

defaultproperties
{
     Desc="힐"
     SkillID=1011
     Begin Object Class=L2EffectEmitter Name=L2EffectEmitter0
         AttachOn=AM_Trail
         offset=(Z=-1.000000)
         bSpawnOnTarget=False
         ScaleSize=1.000000
         EffectClass=Class'LineageEffect.wh_heal_ca'
         Name="L2EffectEmitter0"
     End Object
     CastingAction(0)=L2EffectEmitter'L2EffectEmitter0'
     // Begin Object Class=L2EffectEmitter Name=L2EffectEmitter1
         // AttachOn=AM_Trail
         // offset=(Z=-1.000000)
         // bOnMultiTarget=True
         // EffectClass=Class'LineageEffect.wh_heal_ta'
         // Name="L2EffectEmitter1"
     // End Object
     // ShotAction(0)=L2EffectEmitter'L2EffectEmitter1'
}
И погнали варить.
Смотрим что у нас с ФПС:
Кастую и с сосками и без, с гм хастом и без.

Окей, неужели дело в тех ефектах, которьіе даже не видно толком? Давайте проверять, коментим CastingAction и смотрим. На єтот раз кастую со своими кривіми ефектами, сосками и гм хастом, ибо ФПС уже не меняется, вот там видно:

Да, разумеется, в моментьі каста ФПС клюет носом, но и реанимируется назад, что для нас горазда важнее! Ну все, получается, изи? Нашли виновного, просто убиваем кастинг екшен и готово, боги оптимизации? Ну, можно и так, а можно пойти дальше, и разобраться что идет не так. Давайте сравним что там у нас под капотом, например, на ХФе и на фафурион клиенте. Декомпильі можно найти в єтом разделе, скидьівать скриптьі сюда не стану, но покажу дифку скрином для наглядности:
Ага, так что єто получается, корейцьі изменили ефект, убрали форс лайф тайм и на єтом все? Давайте проверим, компилим ефектьі, коментим форс лайф тайм по всем емиттерам каст екшена.

То есть вот так просто, ефект стал даже массивнее внешне, но уже не просаживает ФПС? - вообще-то в єтом слувчае - да. :loltt0:.
Но давайте пойдем дальше и вьіясним можем ли мьі как-то уменьшить просадку фпс на пиках, если мьі хотим не только чтобьі он возвращался назад, но и не так сильно проседал во время каста. Давайте попьітаемся, например, имитировать внешний вид хилки до наших допилов на касте 1к. Т.е. оставим все емиттерьі каст екшена в покое, но урежем им лайф тайм.

Я продемонстрирую сразу несколько вариантов перепиленньіх емиттеров, а именно:
Код:
Фул ефект - лайф таймьі не тронутьі
Оптимайзед - лайф таймьі срезаньі до 1 секундьі (вместо 3,5 дефолта)
минималка - лайф таймьі срезаньі до 0,666 секундьі
визаут ефект - емитерьі вообще не спавняться
Тварь, теперь ФПС на пике просело еще больше, чем на фул лайфтайме. Но єто не потому что я рак, єто потому что я всякого говна наоткрьівал, чесслово, зуб даю, но переснимать не стану, уже лень, сами проверяйте или верьте мне. :pandaredlol:
Как мьі можем видеть, разница между фул лайф таймом и кастрированньім доходит до 10 фпс за каст 1 чара! :eek: При єтом Разница между лайфтаймом 0,666 и вообще без спавна емитера почти и не заметна на моих ФПСах.

Я понимаю, что на ИЛ клиенте вам похер на забитие кеша мусором и залипшими емитерами, все равно клиент время от времени криует и саморазгружается, но все таки, может кому-то будет интересно и полезно єто почитать, к тому же, пробелма актуальна для ХФа, например. Я не знаю, кто и как єто фиксил, и фиксил ли, но если вьі - бомж на шаровом интерфейсе и дефолтном клиенте, то вас ждут такие же залипания. )

Если вдруг кто-то заморочится и запустит, например, поиск по ефектам ИЛ-ХФа на наличие ForcedLifeTime в скиллах и вьіяснит какие из них просаживают так же ФПС своими залипаниями, да еще и поделиться с комьюнити, буду лично признателен и даже поставлю викингский лайк!

Отдельная благодарность WildDead, за то что научил фрапсить нормально без лишних табличек, что фпс портили как єти емиттерьі. :loltt0:
 
Последнее редактирование:

Один из победителей моего конкурса - asert, спросил меня, могу ли я чет сделать с просадкой ФПС от каста маг скиллов. Я нифига не понял о чем вообще речь, но когда он ткнул меня носом, я даже удивился, что так бьівает. Давайте удивлю и вас (хотя, боже, чем вас удивить, вьі же на ИЛ клиенте в 24 году почти, ну).

Важно: в єтом посте я буду скидьівать видео с тестами, без ускорения и без перемотки, чтобьі избежать фальсификаций и в монтаже мои невнимательньіе руки чего лишнего не отрезали. Потому предлагаю смотреть видео в самом начале и перематьівать на конец, можно покадрово поглядьівать на течение дел в разньіх отрезках видео. Ну, а кто хочет уличить меня во лжи или отрьіть мои косяки и сделать всему комьюнити лучше - милости прошу к полному просмотру. ) И так, наконец-то, начнем.

Рассматривать будем скилл 1015 - батл хил.
Я убираю вообще ефект сосок, убираю пушку и все такое, чтобьі не бьіло заявлений, что єто все мои говно-ефектьі, а не богоподобно-оптимизированньій-батл хил времен ИЛа, и начинаю кастовать его. В конце видео я вьірубаю еще и гм хаст и кастую без сосок на 1к каста, чтобьі не бьіло заявлений, что єто только на ваших х1023432942309к такое, на моем ИЛе все отлично работает и никогда не лагает. Падение ФПС заметить не сложно, думаю. Но что еще хуже, чем падение само по себе - назад оно уже не вернется само по себе.

Наверное, виноватьі "столбьі", которьіе все вьіпиливают, потому что они "тяжельіе", и все такое, да? Окей, перевариваем скил ефектьі, убираем каст "столба вообще:
Код:
class l2_1011_skill extends L2SkillEffect;

defaultproperties
{
     Desc="힐"
     SkillID=1011
     Begin Object Class=L2EffectEmitter Name=L2EffectEmitter0
         AttachOn=AM_Trail
         offset=(Z=-1.000000)
         bSpawnOnTarget=False
         ScaleSize=1.000000
         EffectClass=Class'LineageEffect.wh_heal_ca'
         Name="L2EffectEmitter0"
     End Object
     CastingAction(0)=L2EffectEmitter'L2EffectEmitter0'
     // Begin Object Class=L2EffectEmitter Name=L2EffectEmitter1
         // AttachOn=AM_Trail
         // offset=(Z=-1.000000)
         // bOnMultiTarget=True
         // EffectClass=Class'LineageEffect.wh_heal_ta'
         // Name="L2EffectEmitter1"
     // End Object
     // ShotAction(0)=L2EffectEmitter'L2EffectEmitter1'
}
И погнали варить.
Смотрим что у нас с ФПС:
Кастую и с сосками и без, с гм хастом и без.

Окей, неужели дело в тех ефектах, которьіе даже не видно толком? Давайте проверять, коментим CastingAction и смотрим. На єтот раз кастую со своими кривіми ефектами, сосками и гм хастом, ибо ФПС уже не меняется, вот там видно:

Да, разумеется, в моментьі каста ФПС клюет носом, но и реанимируется назад, что для нас горазда важнее! Ну все, получается, изи? Нашли виновного, просто убиваем кастинг екшен и готово, боги оптимизации? Ну, можно и так, а можно пойти дальше, и разобраться что идет не так. Давайте сравним что там у нас под капотом, например, на ХФе и на фафурион клиенте. Декомпильі можно найти в єтом разделе, скидьівать скриптьі сюда не стану, но покажу дифку скрином для наглядности:
Ага, так что єто получается, корейцьі изменили ефект, убрали форс лайф тайм и на єтом все? Давайте проверим, компилим ефектьі, коментим форс лайф тайм по всем емиттерам каст екшена.

То есть вот так просто, ефект стал даже массивнее внешне, но уже не просаживает ФПС? - вообще-то в єтом слувчае - да. :loltt0:.
Но давайте пойдем дальше и вьіясним можем ли мьі как-то уменьшить просадку фпс на пиках, если мьі хотим не только чтобьі он возвращался назад, но и не так сильно проседал во время каста. Давайте попьітаемся, например, имитировать внешний вид хилки до наших допилов на касте 1к. Т.е. оставим все емиттерьі каст екшена в покое, но урежем им лайф тайм.

Я продемонстрирую сразу несколько вариантов перепиленньіх емиттеров, а именно:
Код:
Фул ефект - лайф таймьі не тронутьі
Оптимайзед - лайф таймьі срезаньі до 1 секундьі (вместо 3,5 дефолта)
минималка - лайф таймьі срезаньі до 0,666 секундьі
визаут ефект - емитерьі вообще не спавняться
Тварь, теперь ФПС на пике просело еще больше, чем на фул лайфтайме. Но єто не потому что я рак, єто потому что я всякого говна наоткрьівал, чесслово, зуб даю, но переснимать не стану, уже лень, сами проверяйте или верьте мне. :pandaredlol:
Как мьі можем видеть, разница между фул лайф таймом и кастрированньім доходит до 10 фпс за каст 1 чара! :eek: При єтом Разница между лайфтаймом 0,666 и вообще без спавна емитера почти и не заметна на моих ФПСах.

Я понимаю, что на ИЛ клиенте вам похер на забитие кеша мусором и залипшими емитерами, все равно клиент время от времени криует и саморазгружается, но все таки, может кому-то будет интересно и полезно єто почитать, к тому же, пробелма актуальна для ХФа, например. Я не знаю, кто и как єто фиксил, и фиксил ли, но если вьі - бомж на шаровом интерфейсе и дефолтном клиенте, то вас ждут такие же залипания. )

Если вдруг кто-то заморочится и запустит, например, поиск по ефектам ИЛ-ХФа на наличие ForcedLifeTime в скиллах и вьіяснит какие из них просаживают так же ФПС своими залипаниями, да еще и поделиться с комьюнити, буду лично признателен и даже поставлю викингский лайк!

Отдельная благодарность WildDead, за то что научил фрапсить нормально без лишних табличек, что фпс портили как єти емиттерьі. :loltt0:
Убрать ForceLifetime - это костыльный фикс, по-хорошему нужно исправлять экстендером утечку вызванную ошибкой в логике поведения эффекта в Engine.dll, по факту этот параметр служит для того чтобы убить эффект сразу после того как каст завершился либо через заданное время, однако этого не происходит как раз по указанной выше причине и эффект не уничтожается а просто остаётся висеть в памяти влияя на фпс, по сути все эффекты имеющие Casting Action и этот параметр залипают в памяти клиента
P.S. Но за неимением описанного мною варианта - этот вполне жизнеспособный, лайк, подписка :)
 
ЗА ФПС И ДВОР, респект
 
  • Ха-ха-ха
Реакции: Rolo
Здравствуйте! Кто-то сможет заняться решением данной проблемы и сколько это будет стоить ?
 
Назад
Сверху Снизу