Niagara在Sequence中将SystemLifeCycle设置为DesiredAge导致性能严重下贱

你好:

在5.4引擎中,​Niagara在Sequence中将SystemLifeCycle设置为DesiredAge,当粒子播放完毕后,后续时间会出现非常多的SystemTick导致性能严重下降,具体可以看图

想了解一下这是否是个bug?或者是否用法有问题?

我们的主要目的是为了方便控制粒子的播放起始和结束时机,并能随时拖动sequence时间轴来进行回放

非常感谢!​

[Image Removed]

重现步骤
创建新关卡,创建一个NiagaraSystem,使用模板DirectionBurst,新建一个Sequence并将Niagara以可生成的形式放进去。将NIagara的Component的SystemLifeCycle设置为DesiredAge,然后播放这个sequence

您好,

这样用Sequence控制niagara有两个问题: 一是每个component是单独tick的, 如果场景里有多个instance, 他们的system/emitter update没法batch起来, 会有性能影响, 增加System Simulation Tick的开销; 二是设置为DesiredAge播放, 每次更新component时tick多少次是按时间轴变化计算的, 尤其是倒放时, 相当于每次都从第一帧解算倒当前值, 这也会大大增加开销. 参考你的截图, 第一张猜测应该是在倒放, CallCount有200+, 比第二张1个callcount高出这么多也是合理的, 并不是bug.

建议如果需要在sequencer里控制回放, 效果本身又没有很多和场景的随机交互的话, 可以把模拟缓存下来, 在时间轴上播放Niagara Sim Cache.

感谢回复。

图里CallCount有200+的情况不是倒放,而是正常播放,所以感觉非常奇怪,而且这个问题,在打包之后的非编辑器下也能复现(安卓手机60帧能掉到只有七八帧)

方便发个简要的工程过来看下为什么call count这么高么?

应该包含Niagara资产和sequencer设置就好了.

你好,这里是一个5.4的复现工程

您好, 抱歉因为上周出差回复晚了.

我发现​附件中用的这个NiagaraSystem的Life Cycle Mode设置的是只循环一次, 全部粒子生命周期结束后kill掉Emitter/System. 因此, 在Sequencer中播放超过System的生命周期后, 每一帧都会重新reset并计算到结束, 所以call count那么高.

既然后面已经没有粒子了, 建议把sequencer中Niagara的life cycle track时长设置成和system的生命周期一致, 就不会出现这个问题. 这个例子下应该是设置到1秒左右.[Image Removed]