UE4_Niagara_ export particle data to blueprint

发布于:2024-05-04 ⋅ 阅读:(29) ⋅ 点赞:(0)

参考Niagara_Advanced内容示例 4.2 Export Particle Data to Blueprint,学习笔记,仅供参考。祝愿日子越来越好!大美兰陵越来越好!

我们要想把数据从niagara传到blueprint,需要做以下工作:

一、先设置Niagara System。

In order to tell our Niagara System which blueprint to use, we first make a User Parameter in the  "System Settings" section of Niagara.(为了告诉我们Niagara系统哪一个蓝图使用,我们首先定义一个用户参数在Niagara系统设置部分)

This User Parameter will be of the type "Object" and can be named whatever you like. In this case, the name is BPCallBackHandler .(这个用户参数是Object类型,并且可以被命名为你喜欢的名字,在这个实例当中,名字叫BPCallBackHandler)

1、新建Niagara System,命名为NS_export。

2、新建一个用户公开变量object,更名为BPCallBackHandler。

3、添加粒子发射位置、初速度、粒子生命周期及大小区间。效果如下图:

4、粒子更新部分添加collision模块。

5、查看碰撞模块参数写入:

我们可以使用碰撞的有效性CollisionValid来作为下一个模块export particle data to blueprint的条件。

6、添加 Export Particle Data to Blueprint 模块。

Condition To Export Data【输出数据的条件】:为True时才输出数据 ,我们这里让碰撞有效时才传输数据

Delay Between Data Exports输出数据间延迟:设置两次输出数据的最小间隔时间

Vector to Sent(As Struct Position)发送的向量(作为结构位置)

Vector to Send(As Struct Velocity)发送的向量(作为结构速度)

Float to Send(As Struct Size)发送的浮点数(作为结构大小) 

这里的向量不一定是位置、速度和大小,我们也可以传送颜色。

Export particle Data Interface:暴露粒子数据接口;

Callback Handler Parameter【回调处理器参数】:选择把蓝图传进Niagara系统的Object类型用户参数,就是谁使用它的。 这个变量在模块Export Particle Data to Blueprint中作为回调句柄参数,其余被传输的数据包含有两个vector和一个scaler数据,Actor类蓝图中在BeginPlay设置了一个Niagara变量,就是这个变量。

GPUAllocation Mode(GPU分配模式):仅GPU粒子需要设置,使用Fixed Size(固定大小)

GPUAllocation Fixed Size(GPU分配固定大小):一帧中发送数据的粒子数量的最大值,超过此数值的粒子无法发送事件。

7、Export Particle Data to Blueprint 模块参数设置如下:

就是在碰撞发生时(CollisionValid),没设置延迟,将粒子位置、粒子颜色和0组成一个数据包,通过BPCallbackHandler将包发送到蓝图。

这里的设置要注意:比如粒子color,我们粒子的颜色发生变化才有意义,link中才有数据。这里也是为了告诉你输出到蓝图的向量不一定是速度。

二、蓝图中如何接收粒子系统的数据

1、新建actor,命名为BP_ReceiveNS。添加粒子系统组件,指定粒子系统。

2、事件开始时,告诉niagara system谁使用他。

为了告诉我们Niagara系统哪一个蓝图使用,我们首先定义一个用户参数在Niagara系统设置部分,这个用户参数是Object类型,并且可以被命名为你喜欢的名字,在这个实例当中,名字叫BPCallBackHandler,所以变量名字是这个。

3、由于是通过接口传递的数据,所以我们需要在类设置中继承接口:

4、实现接口函数:

将粒子发出的结构体数组进行遍历循环,数组成员进行拆分使用,可以计算粒子如果是碰到的角色,打印任务失败,同时把粒子颜色输出。

运行效果如图:

三、总结

1、数据传输只是两个向量和一个浮点数:

2、需要告知niagara哪个蓝图要用,用户参数是object类型。

3、niagara需要专门的模块传出,以接口的方式。

4、CPU粒子和GPU粒子都支持数据输出

GPU粒子数据导出是通过从GPU内存读回到cpu执行的。这是不可预测地潜在的非固定数量的帧,通常为1-2。导致延迟。

GPU粒子数据的导出是通过从GPU内存中读取来完成的。这通常用于游戏或图形应用程序中,其中GPU可以在渲染粒子时高效地处理它们。通过从GPU内存读取数据,可以将粒子的位置、速度等信息提取到CPU内存中,以便进一步处理或用于其他目的,例如与其他数据进行后处理或者用于编写到文件等。

GPU读回性能受到读回缓冲区大小的限制。建议使用GPU固定大小分配,使用捕获给定帧上可能发生的所有事件所需的最小值。
在这个例子中,根据生成速率和生命周期,我们知道在任何给定的时间,我们只会有1~4个粒子存活,所以固定大小可能很小。

任何超过此固定大小的事件都将无法发送。


网站公告

今日签到

点亮在社区的每一天
去签到