特效池化与复用

自动关联目录:特效池化与复用

1. 定位

频繁生成和销毁 Niagara 组件是有成本的:组件创建、参数初始化、首次模拟、PSO 编译——这些叠加起来就是"连续触发特效时的尖峰"。

一句话定位:高频特效必须池化——复用组件而不是反复创建。

2. 池化的做法

初始化:预创建 N 个 NiagaraComponent(或对象池)
使用时:取一个 → 设置参数 → 激活
结束时:停用并归还,而不是销毁
要点说明
预创建在加载阶段创建好,避免运行时尖峰
复用用 Activate / Deactivate 而非 Create/Destroy
参数重置复用时必须重置所有参数,否则残留
上限池的大小也要有限制,防内存膨胀

复用时忘记重置参数是池化最常见的 bug——表现为"特效偶尔带着上一次的颜色/位置"。

3. 复用的其它层次

层次做法
组件池复用 NiagaraComponent
System 资产复用一个 System 用参数适配多种情况,而不是做十个资产
Module 复用Niagara 的模块本身就是可复用单元
材质复用特效材质共用,利于合批与 PSO 收敛
图集粒子贴图打成图集,利于合批

"一个 System + 参数" 比 "十个 System" 好:资产变体越多,PSO 与内存成本越高。

4. LOD 与降级

手段说明
距离 LOD远处减少粒子数、关闭次要 Emitter
画质档低档降低粒子数与效果
平台差异移动端单独配置
重要性分级关键特效保留,次要的先被砍

5. 代价与权衡

设计收益代价什么时候不该用
池化消除生成/销毁尖峰内存常驻、要管理重置低频特效不必
System 参数化资产少、PSO 少单个 System 变复杂差异极大的特效应分开
距离 LOD远处省要配多套小场景不必
图集合批资产管理少量特效不必
池太大不复用不足内存浪费按峰值设定上限

6. 踩坑与排查

坑现象怎么验证
复用忘了重置参数特效带上次的状态归还时统一重置
池太小仍然创建新的统计池命中率
池太大内存浪费按峰值设定
资产变体太多PSO 与内存涨参数化收敛
材质不共用合批差、PSO 多复用材质与图集
移动端不降级崩平台分级

7. 排查顺序

1. 有尖峰?→ 是否频繁创建销毁 → 池化
2. 池化后异常?→ 参数重置
3. 内存大?→ 池上限
4. PSO 多?→ 收敛 System 与材质变体
5. 远处/低端?→ LOD 与降级

参考