Niagara 概览与系统结构
自动关联目录:Niagara 概览与系统结构
1. 定位
Niagara 是 UE 的视觉特效系统:用模块化的节点图描述粒子的生成、模拟与渲染,可实时预览。
一句话定位:Niagara 的核心抽象是"Emitter(发射器)组合成 System(系统)",模块可复用、参数可外部驱动——这和旧的 Cascade 最大的区别。
2. 三层结构
Niagara System(一个特效资产)
└── 若干 Emitter(发射器)
└── 若干 Module(模块:生成/模拟/渲染)
└── 参数(可外部暴露)| 概念 | 说明 |
|---|---|
| System | 一个可放置的特效资产,可含多个 Emitter |
| Emitter | 一类粒子的完整描述 |
| Module | 可复用的功能块(生成速率、受力、颜色、渲染) |
| Parameter | 可被外部(蓝图/C++)驱动的值 |
| Namespace | 参数的命名空间(User.*、Emitter.*、Particle.*、System.*) |
命名空间是关键:User.* 是外部可写的用户参数,Particle.* 是每粒子数据,Emitter.* 是发射器级,System.* 是系统级。搞错命名空间是"参数传不进去"的最常见原因。
3. 生命周期阶段
| 阶段 | 说明 |
|---|---|
| Particle Spawn | 粒子生成时执行一次 |
| Particle Update | 每帧更新 |
| Emitter Update | 发射器级每帧 |
| System Update | 系统级每帧 |
| Simulation Stage | 更细粒度的模拟阶段(高级用法) |
| Render | 渲染(Sprite / Mesh / Ribbon / Light 等) |
"只在生成时算一次"的东西要放 Spawn 而不是 Update——这是特效优化最基础的一条。
4. 渲染器类型
| 渲染器 | 用途 | 代价 |
|---|---|---|
| Sprite | 最常见的贴图粒子 | 低 |
| Mesh | 网格粒子 | 中—高 |
| Ribbon | 条带(拖尾、轨迹) | 中 |
| Light | 粒子光源 | 高(每个都是光源) |
| Component | 组件渲染器 | 视内容 |
粒子光源要极其谨慎——它把粒子变成了光源,会显著增加光照成本。
5. 代价与权衡
| 设计 | 收益 | 代价 | 什么时候不该用 |
|---|---|---|---|
| 多 Emitter 组合 | 复用性强 | 每个 Emitter 都有开销 | 简单特效别拆太碎 |
| 可复用 Module | 维护性好 | 抽象层有轻微成本 | 一次性特效不必 |
| 粒子光源 | 气氛好 | 极贵 | 数量必须严格控制 |
| Mesh 粒子 | 立体感 | 比 Sprite 贵 | 大量粒子不用 |
| Simulation Stage | 精细控制 | 复杂度与成本 | 常规特效不必 |
6. 踩坑与排查
| 坑 | 现象 | 怎么验证 |
|---|---|---|
| 参数传不进去 | 外部设置了没反应 | 检查命名空间(应为 User.*)与是否暴露 |
| 把一次性计算放 Update | 白付成本 | 移到 Spawn |
| 粒子光源太多 | 光照成本暴涨 | 统计粒子光源数量 |
| Emitter 拆太碎 | 开销增加 | 合并 |
大量 Particle.* 属性 | 内存与带宽 | 精简属性 |
| 半透明排序问题 | 排序错乱 | 见 半透明与排序 |
7. 排查顺序
1. 参数没生效?→ 命名空间与暴露设置
2. 慢?→ 粒子数 / 渲染器类型 / 粒子光源
3. 一次性计算是否在 Update?→ 移到 Spawn参考
许可协议:CC BY
作者:Davids
本文链接:https://hustjjd.github.io/ff6d8b9c.html
更新于:2026年10月10日