优化手段:裁剪、LOD 与轻量级发射器
定位到"就是这个发射器贵"之后,有四把手术刀可以动。
手术刀一:距离裁剪(Distance Culling)
远处的特效不播就是最快的优化。Niagara 的发射器支持按距离禁播(Emitter 属性的 Cull / Max Distance)。注意:
- 裁剪距离要逐发射器设(不是逐 NS):一个 NS 里核心冲击波裁剪距离 80m,环绕的烟可以是 40m;
- 裁剪边缘不要太近否则"突然消失"很明显,可以配合淡出的 LOD。
手术刀二:LOD(细节层级)
Niagara 的 Emitter 可以设置按距离切换不同的版本:近处用完整的高密度版本,远处切到简化版本(粒子数、模块数量都减少)。相比 Cascade 的写死 LOD 参数,Niagara 的 LOD 是真正切换模块组的。
| 距离 | 版本 | 典型内容 |
|---|---|---|
| 0~15m | LOD0 | 完整表现:高粒子数 + 精细模块 |
| 15~40m | LOD1 | 砍掉火花与细节模块,留烟与主形 |
| 40m+ | LOD2 / 裁剪 | 极简或直接不播 |
LOD 配置后,一定要在场景里远中近各跑一遍,看切换有没有可见的跳变。
手术刀三:轻量级发射器(Lightweight Emitters)
对于"装饰型"大量小特效(雨点、尘埃、远处萤火),Niagara 提供专门的轻量级发射器模式:大幅精简模拟管线,单发射器开销远低于常规发射器。
| 特性 | 常规发射器 | 轻量级发射器 |
|---|---|---|
| 模块数量 | 任意 | 受限子集 |
| 开销 | 标准 | 显著更低 |
| 适合 | 主表现(爆炸、技能) | 数量大的装饰效果(上百个实例) |
| 限制 | 无 | 不支持复杂脚本与部分 DI |
轻量级发射器的适用场景与限制见官方的 Niagara轻量级发射器。
手术刀四:模拟频率降低
不要求每帧更新的表现(远处的火堆、缓慢的烟)可以把发射器的更新频率降低(在 Emitter 属性里设模拟频率或配合时间膨胀)。视觉上几乎无差别,开销减半。
优化决策顺序
推荐按这个顺序动刀(先做投入产出比最高的):
- 砍量(先裁剪,什么都不做就能省一半开销);
- 降距离复杂度(LOD + 裁剪);
- 换实现(轻量级、降频);
- 换结构(合并发射器、CPU/GPU 切换);
- 换算法(HLSL 重写热点模块)。
多数项目在 1~3 之后帧率就回来了;动到 5 的都是值得记入文档的硬仗。
