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 дозволяє в реальному часі бачити:
- Кількість активних частинок в системі яка зараз програється
- Кількість активних частинок в емітерах системи яка зараз програється
- Використання пам’яті, 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 одночасно активні
Як увімкнути:
- Перейдіть у Insights → Timing Insights
- Аналізуйте кадр у таймлайні — кожна система буде промаркована
Чому це важливо для Niagara?
Звичайний GPU Profiler може не показати дрібні витрати. А от Timing Insights дозволяє побачити навіть неочевидні затримки — наприклад, через Material Proxy, Dynamic Parameter Binding або PostProcess, який накладається на ефекти.
📌 Докладніше: Timing Insights in Unreal Engine
Приклад аналізу Niagara ефекту
Сцена: вибух сильно просаджує FPS.
- Niagara Debug HUD: 5 систем, кожна з 3 емiтерами, ~300 частинок.
- stat Niagara: Niagara Tick Time = 6.2 ms → проблема.
- GPU Profiler: один матеріал займає 0.9 ms сам по собі → треба оптимізувати.
- Висновок:
- Обʼєднати ем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
Рішення:
- Ввімкнути
Scalability Overrides
- Вказати Emitter Enable для кожного рівня
- Для Smoke Trail → Spawn Count Scale = 0.5 (на Medium)
- Для Sparkles → Вимкнути на Medium та Low
Результат — адаптивний ефект, який автоматично спрощується при зниженні якості графіки.
Чому це важливо?
- Кожен емітер може споживати багато ресурсів. Не завжди потрібні всі деталі на Low/Mobile.
- Замість створення окремих ефектів — просто вбудуйте LOD-поведінку в один Niagara System.
- Це зменшує кількість компонентів і покращує менеджмент.
Де зберігаються глобальні налаштування?
Система читає налаштування з Scalability Settings у Niagara Effect Type
Але кожна система може перезаписати ці налаштування локально — через Scalability Overrides.
Що таке Niagara Budgets?
Budget (бюджет) — це ліміт на кількість Niagara System або частинок, які можуть бути активні одночасно.
Параметр | Приклад |
---|---|
Max System Instances | 100 Niagara Systems одночасно |
Max Particles Instances | 10,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
- Усі одночасно не потрібні
Рішення:
- Створити
Niagara Effect Type
- Встановити
Max System Instances = 100
- Significance = Distance
- 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, якість геймплею та враження гравця. Без належного профілювання навіть найкрасивіший ефект може стати причиною серйозних просідань продуктивності.
Щоб цього уникнути — дотримуйтесь трьох ключових принципів:
- Профілюй, перш ніж оптимізувати — використовуй
stat Niagara
,GPU Profiler
,Timing Insights
іDebug HUD
, щоб точно знати, де проблема. - Налаштовуй
Niagara Effect Type
, використовуйтеScalability Overrides
таSignificance Handler
, щоб ефекти адаптувались до потужності пристрою. - Завершуй усе — будь-який ефект повинен мати чіткий кінець. Вимикай системи після виконання, уникай вічно активних емітерів.