参考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个粒子存活,所以固定大小可能很小。
任何超过此固定大小的事件都将无法发送。