Niagara中的Emitter是否可以实现for循环的方式来生成粒子

Epic中国官方:

你好。

我们的场景中,需要用到很多着火的特效。这些特效散列在不同的位置。有不同的缩放。有些使用相同的资源,有些使用不同的资源。地编为了达成想要的效果,摆放了许多Niagara。于是带来一些性能开销。

我想减少Niagara数量。所以我在想,是否可以有一种实现方案,特效的同事先按照“一个Niagara一堆火”的方式开发一个Niagara,然后我们再在里面实现一个逻辑或算法,遍历定位点(可以外部输入,或使用一个Emitter来生成),在每个点上,都执行一次特效同事做的Emitter。

这样,既不破坏特效同事的生产流程和习惯,也能达到降低Niagara数量的目的。

目前我能实现一个Niagara生成多簇火焰到不同的地方,但是实现方式并不是上述的这样。而是每个Emitter都要处理输入的数据,设置生成粒子数量为总量,然后均匀分布到各个位置上。

这种做法,因为需要加入对于坐标的处理,且每个Emitter生成的粒子是总量,制作概念和流程上改变了特效原本的做法,不便于推广。

希望官方能给一些建议。看看我描述的、类似for循环便利定位点、并每次完整执行特效做的Emitter的方案的是否可行性。或者可行方案。

[Attachment Removed]

您好,

其实这个优化很适合用Niagara Data Channel来做: 定义一个data channel, 包含发射位置, 速度, 数量等火焰发射所需信息, 在不同的位置由蓝图把这些信息写入data channel, 再由一个或按grid拆分的几个system监听这个data channel, 统一发射和模拟火焰, 这样来减少总体的instance数量. 在Emitter Update上有内置的指引, 如何读写data channel, 见下图. 具体可以参考这个使用文档, 以及开发同事写的介绍(5.3), 还有这篇 Niagara性能优化|System as a Service, 也介绍了data channel的使用和对性能的改善.

[Image Removed]

[Attachment Removed]