UE4_Niagara_ export particle data to blueprint

参考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个粒子存活,所以固定大小可能很小。

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

相关推荐
Scott9999HH1 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔1 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社2 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海2 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖3 小时前
JDK 26 新特性详解
java·开发语言
马优晨4 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区5 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大6 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai6 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
维天说6 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json