Niagara VFX Оптимізація: Частина 2 – Поради щодо профілювання, масштабування та продуктивності

Niagara Performance Profiling — як зрозуміти, що гальмує?

Оптимізація без профілювання — це як лікувати без діагнозу. У складних сценах або проектах з великою кількістю візуальних ефектів дуже легко потрапити в пастку: щось гальмує, але незрозуміло що саме. Саме тому профілювання — це перший і найважливіший крок.


Основні інструменти для профілювання Niagara:

ІнструментПризначення
Niagara Debug HUDВиводить інформацію про Niagara Systems на екран
stat NiagaraРозгорнута статистика систем, емітерів, частинок
stat GPUПоказує час рендеру на GPU по всіх стадіях
GPU Profiler (Ctrl+Shift+,)Аналіз GPU часу з окремими вкладками
Timing InsightsГлибокий аналіз рендеру на кожному кадрі (CPU/GPU), включаючи Niagara

Як читати stat GPU?

Це команда для швидкого розуміння, скільки часу займає рендеринг кожного етапу. Особливо корисно перевіряти:

  • Translucency зазвичай включає Niagara → якщо вона займає 3+ ms, це сигнал, що можливо ефекти треба оптимізувати

Що відстежувати в Niagara Debug HUD?

HUD дозволяє в реальному часі бачити:


Niagara Debug HUD

  • Кількість активних частинок в системі яка зараз програється
  • Кількість активних частинок в емітерах системи яка зараз програється
  • Використання пам’яті, Scalability, кількість емітерів і т.д.

Що дає stat Niagara?

stat Niagara

Текстова статистика всіх активних систем:

  • Niagara GPU Time
  • Num Ticked Systems / Emitters
  • Num Mesh Vertices
  • Memory Counters

GPU Profiler — що шукати?

Натисни Ctrl + Shift + , → GPU Profiler:

  • Niagara::Tick — GPU симуляція
  • Niagara::Render — скільки часу займає рендеринг частинок
  • Materials — які саме матеріали дають найбільше навантаження

Приклад: Niagara::Render = 1.8 ms — це багато. Якщо таких ефектів кілька → FPS падає.


Timing Insights

Починаючи з Unreal Engine 5.4, з’явився новий потужний інструмент: Timing Insights. Це продовження та розширення стандартного GPU профайлера, яке дозволяє зрозуміти, які саме функції, системи і матеріали “їдять” ваш GPU час — у дуже зручному та візуальному вигляді.

Що він вміє:

  • Виводити час на кожен виклик Niagara::Tick, Niagara::Render, Material Rendering
  • Показувати гілки рендерінгу в ієрархії
  • Відображати GPU/CPU events, розбиті на кадри
  • Дозволяє глибоко дебажити складні сцени, зокрема коли багато Niagara System одночасно активні

Як увімкнути:

  1. Перейдіть у Insights → Timing Insights
  2. Аналізуйте кадр у таймлайні — кожна система буде промаркована

Чому це важливо для Niagara?
Звичайний GPU Profiler може не показати дрібні витрати. А от Timing Insights дозволяє побачити навіть неочевидні затримки — наприклад, через Material Proxy, Dynamic Parameter Binding або PostProcess, який накладається на ефекти.

📌 Докладніше: Timing Insights in Unreal Engine


Приклад аналізу Niagara ефекту

Сцена: вибух сильно просаджує FPS.

  1. Niagara Debug HUD: 5 систем, кожна з 3 емiтерами, ~300 частинок.
  2. stat Niagara: Niagara Tick Time = 6.2 ms → проблема.
  3. GPU Profiler: один матеріал займає 0.9 ms сам по собі → треба оптимізувати.
  4. Висновок:
    • Обʼєднати емiтери
    • Зменшити shader complexity
    • Додати KillAfterTime
    • Розділити ефект на 2 системи: core + додаткові частинки

Який Tick Time є нормою?

ПлатформаNiagara Tick TimeКоментар
PC High-End< 2–3 msДопустимо
PS4 / Xbox One< 1.5 msДуже обмежений бюджет
PS5 / Xbox Series< 2 msЄ запас
Mobile< 1 msКожна мілісекунда критична
VR / AR< 1 msВсе рендериться двічі

Практичні поради

  • Вимикай Niagara System, якщо вона не в полі зору (Camera Frustum Culling)
  • Встановлюй Fixed Bounds — менше розрахунків на кадр
  • Профілюй ефекти в ізольованій сцені
  • GPU Profiler/Timing Insights + stat Niagara + Shader Complexity — твій головний набір

Effect Culling & Scalability — як керувати навантаженням Niagara VFX

У великих проектах з безліччю ефектів дуже важливо не просто створювати красиві Niagara Systems, а й контролювати коли і як вони з’являються, щоб не перевантажувати GPU/CPU. Саме для цього існують механізми Culling і Scalability.


Що таке Culling у Niagara?

Culling — це автоматичне вимкнення ефектів, коли вони не потрібні.

Приклади:

  • Частинки не в полі зору камери → вимикаємо.
  • Частинки надто далеко від гравця → вимикаємо.
  • Частинок забагато в кадрі одночасно → обмежуємо.

Це все реалізується через Niagara Effect Type та Scalability Settings.

Fixed Bounds → дуже бажано для стабільного кулінгу (інакше bounding box змінюється динамічно)


Niagara Effect Type — центр керування поведінкою ефектів

Niagara Effect Type — це головний інструмент для централізованого керування скейлабіліті, кулінгом і бюджетами Niagara. Він дозволяє задавати поведінку Niagara System-ів у глобальному масштабі — не окремо для кожного ефекту, а через спільні налаштування.

Його можна створити через Content Browser → Add New → FX → Advanced → Niagara Effect Type
Потім призначити в кожному Niagara System → Effect Type

Навіщо використовувати Niagara Effect Type?

  • Глобальне керування кулінгом та скейлабіліті
  • Задає максимальну кількість систем та емiтерів одночасно
  • Визначає, які ефекти важливі, а які можна вимкнути першими
  • Встановлює бюджет продуктивності

📌 Офіційна стаття Epic Games про Niagara Effect Types:
🔗 Niagara Scalability & Effect Types (Epic Docs)


Scalability Settings — гнучке керування якістю

1. Scalability Settings у Niagara Effect Type

У кожному Effect Type можна задати:

НалаштуванняОпис
Spawn Count ScaleЗменшити кількість частинок
Update FrequencyМенше апдейтів → менше CPU/GPU навантаження
Cull DistanceВимикати ефекти на певній відстані
Max InstancesЛіміт кількості ефектів у кадрі

Це працює глобально, для всієї System, якщо у неї не ввімкнено локальне перекриття налаштувань


2. Scalability Overrides у Niagara System — гнучке керування кожним емітером

У кожному Niagara System є окреме меню Scalability, яке дозволяє задавати, в яких налаштуваннях якості ефект буде працювати, а також як саме змінюватиметься його поведінка залежно від рівня продуктивності гри.

Відкрий Niagara System → вкладка Scalability → Scalability Overrides

Тут можна:

  • Вимикати окремі емітери на низьких налаштуваннях
  • Зменшити Spawn Count

Приклад:

У вас є система з 3 емітерами:

  • Core (основний ефект)
  • Smoke Trail
  • Sparkles

Ви хочете:

  • На Epic → Усі 3 емітери
  • На Medium → Core + Smoke (менше частинок)
  • На Low → Тільки Core

Рішення:

  1. Ввімкнути Scalability Overrides
  2. Вказати Emitter Enable для кожного рівня
  3. Для Smoke Trail → Spawn Count Scale = 0.5 (на Medium)
  4. Для Sparkles → Вимкнути на Medium та Low

Результат — адаптивний ефект, який автоматично спрощується при зниженні якості графіки.

Чому це важливо?

  • Кожен емітер може споживати багато ресурсів. Не завжди потрібні всі деталі на Low/Mobile.
  • Замість створення окремих ефектів — просто вбудуйте LOD-поведінку в один Niagara System.
  • Це зменшує кількість компонентів і покращує менеджмент.

Де зберігаються глобальні налаштування?

Система читає налаштування з Scalability Settings у Niagara Effect Type

Але кожна система може перезаписати ці налаштування локально — через Scalability Overrides.


Що таке Niagara Budgets?

Budget (бюджет) — це ліміт на кількість Niagara System або частинок, які можуть бути активні одночасно.

ПараметрПриклад
Max System Instances100 Niagara Systems одночасно
Max Particles Instances10,000 частинок

У Niagara Effect Type можна налаштувати:

Глобальні рівні якості (Low, Medium, High, Epic, Cinematic)

ПараметрОпис
Max DistanceМаксимальна дистанція, після якої ефект перестає відображатися.
Max Effect Type InstancesМаксимальна кількість одночасно активних систем певного Effect Type.
Max System InstancesГлобальне обмеження на кількість активних Niagara Systems.
Cull Proxy ModeВизначає, як системи підміняються: null або спрощена версія.
Max System ProxiesСкільки proxy-інстанцій дозволено для оптимізації рендерингу.

Visibility Culling

ПараметрОпис
Allow Pre Culling by View FrustumДозволяє Niagara вимикати ефекти, якщо вони не в полі зору камери.
Max Time Outside View FrustumСкільки секунд ефект може бути поза камерою перед деактивацією.
Max Time Without RenderЯкщо ефект не рендериться — скільки часу до його деактивації.

Budget Scaling

ПараметрОпис
Max Global Budget UsageМаксимальний рівень завантаження GPU/CPU (від 0.0 до 1.0).
Max Distance Scale by Global Budget UseАвтоматичне зменшення Max Distance, коли бюджет перевищено.
Start X/YПоріг початку масштабування (наприклад, 0.6).
End X/YМежа, на якій ефект максимально зменшується (наприклад, 0.9).
Max Instance Count Scale by Global Budget UseЗменшує кількість частинок при перевантаженні GPU.
Max System Instance Count Scale by Global Budget UseЗменшує кількість Niagara Systems, якщо їх занадто багато.

Приклад використання бюджету

  • Ви задаєте: Max System Instances = 500
  • В сцені одночасно спавняться 700 систем
  • Niagara автоматично вимикає менш важливі (на основі Significance)
  • Важливі ефекти (біля гравця) залишаються, решта — вимикаються

Як працює Significance Handler?

Significance (важливість) визначає, які ефекти варто залишити активними, а які можна “обрізати”.

Типи Significance:

ТипОпис
DistanceБлижчі до камери ефекти — важливіші
AgeНові ефекти важливіші
CustomМожна вручну задавати вагу (через Blueprints / C++)

Приклад з реального проєкту:

У вас:

  • Багато об’єктів зі слідами від куль
  • Кожен ефект — це окрема Niagara System
  • Усі одночасно не потрібні

Рішення:

  1. Створити Niagara Effect Type
  2. Встановити Max System Instances = 100
  3. Significance = Distance
  4. Cull Reaction = Deactivate

Результат: GPU не перевантажується навіть коли гравець стріляє безперервно, а сліди від куль у далекій стіні автоматично “прибираються”.

Також гарний приклад використання це environmental ефекти, у вас на рівні може бути дуже багато різних ефектів оточення, і відповідно не всі з них гравець може бачити, або вони можуть бути далеко, і нам не потрібна така деталізація. І тут нам дуже сильно знадобиться Scalability, Culling, Effect Budget, щоб оптимізувати гру відключаючи непотрібні ефекти або ж зменшуючи деталізацію ефектів.


Практичні поради

  • Створюйте Niagara Effect Type для всіх систем
  • Вказуйте Cull Distance для елементів типу диму, sparkles, листя
  • Вимикайте декоративні емітери для Low settings
  • Тестуйте на різних Scalability Levels в редакторі
  • Використовуйте r.NiagaraScalability.* команди в командному рядку
  • Профілюйте HUD → слідкуйте за тим, чи працює culling
  • Для Mobile та VR — обов’язково створіть окремий рівень з мінімальними частинками
  • Вимикайте декоративні емітери (sparkles, embers, тощо) на низьких налаштуваннях
  • Контролюйте LODs в Niagara так само, як у Skeletal Mesh або Static Mesh

Niagara System Lifecycle Optimization

Як уникнути непотрібних витрат на життєвий цикл ефектів

Одна з найпоширеніших помилок при створенні ефектів — це неправильно налаштований життєвий цикл Niagara System або емітерів. Якщо система не завершує роботу автоматично, вона продовжує споживати ресурси, навіть коли нічого не відображається. Такі “вічно живі” ефекти можуть накопичуватись і суттєво знижувати продуктивність, особливо у великих сценах або під час тривалого геймплею.

Як уникнути цього:

  • Використовуй Loop Behavior → Once для ефектів, які мають відбутись один раз (наприклад, вибухи).
  • Активуй Auto Deactivate або Kill on Complete, щоб система вимикалась автоматично після завершення симуляції.
  • Перевіряй, чи немає емітерів без частинок або з непотрібним Looping — видаляй або вимикай їх.

Приклад: постріл з ефектом диму

Погано:

  • Димова система має Loop = true
  • Система не зникає після пострілу
  • Вона продовжує “жити” і споживати ресурси

Добре:

  • Система має Loop = Once
  • AutoDeactivate = true
  • Kill on Complete в кожному емітері
  • Delay Start використовується, щоб уникнути передчасного запуску

Інструменти діагностики:

  • Niagara Debug HUD → видно активні системи й час оновлення
  • stat Niagara → дивись, скільки систем активні і чи апдейтяться
  • Niagara System Overview → можна побачити, які емітери активні, навіть якщо не породжують частинки

Правильне завершення ефекту — це не лише про логіку, а і про оптимізацію. Завжди впевнюйся, що після завершення ефекту система більше не працює у фоні.

Висновок

Оптимізація Niagara — це не лише про економію мілісекунд. Це про грамотне керування ресурсами, які прямо впливають на FPS, якість геймплею та враження гравця. Без належного профілювання навіть найкрасивіший ефект може стати причиною серйозних просідань продуктивності.

Щоб цього уникнути — дотримуйтесь трьох ключових принципів:

  1. Профілюй, перш ніж оптимізувати — використовуй stat NiagaraGPU ProfilerTiming Insights і Debug HUD, щоб точно знати, де проблема.
  2. Налаштовуй Niagara Effect Type, використовуйте Scalability Overrides та Significance Handler, щоб ефекти адаптувались до потужності пристрою.
  3. Завершуй усе — будь-який ефект повинен мати чіткий кінець. Вимикай системи після виконання, уникай вічно активних емітерів.

Дізнайся більше в More VFX Academy

Дякуємо за те що читали, нам дуже приємно. І як бонус ми даруємо вам промокод на знижку 20% на всі наші курси: VFXLEGENDS20

Якщо ви хочете заглибитися в світ VFX, опанувати Niagara та навчитися створювати професійні ефекти –  приєднуйтесь до нашого курсу в More VFX Academy.

🎓 У курсі на вас чекає:

  • 65+ годин відеоконтенту

  • Практичні завдання та реальні кейси зі створення VFX

  • Покрокові створення стилізованих, реалістичних та оптимізованих ефектів

  • Підтримка, фідбек від спільноти та сертифікат

🚀 Неважливо, ви початківець чи вже працюєте в індустрії – ми допоможемо вам прокачати свої навички та зібрати портфоліо, яке виділятиметься.

👉 Відвідайте More VFX Academy і розпочніть свій шлях до професійного рівня в реальному VFX!

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Прокрутка до верху