虚幻引擎学习之路:新粒子系统Niagara

原文链接:https://blog.uwa4d.com/archives/Study_Unreal4_ParticleSystem_3.html

在前期关于Unreal 4 引擎的技术推文中,UWA重点介绍了粒子系统的重点模块和高级功能。本文将进行介绍Unreal 4引擎中的新粒子系统:Niagara。需要说明的是,目前的Niagara粒子系统仍处于测试阶段,并非最终完成版。

这是UWA发布的第10篇Unreal 4技术文章,之前我们已经详细介绍过渲染系统动画系统以及部分粒子系统的功能介绍,详情请转至UWA博客(blog.uwa4d.com)。同时,特别感谢Unreal中国团队对于本篇文章中Unreal引擎相关内容的审核,并在UWA团队学习其引擎的道路上提供的大力支持。


一、Niagara使用

1.1 开启功能
在最新的Unreal 4引擎中,Niagara模块已经被加入到引擎的插件中。需要使用时,只需通过菜单Edit->Plugin打开Plugin窗口,搜索”Niagara”并选择Enabled即可,如下图所示:
请输入图片描述
然后,在Content Browser中点击鼠标右键会出现新的菜单选项FX,该子菜单中包含了Niagara的各种资源选项,如下图所示:
请输入图片描述

其中,上图红色框中显示了Niagara中包含的各种资源:Niagara System为粒子系统资源,Niagara Emitter为发射器资源,Niagara Script为粒子系统逻辑脚本资源,Niagara Parameter Collection为参数集合资源。接下来,本文将分别对其进行介绍。

1.2 Niagara System
Niagara System资源类似于Cascade中的Particle System资源。其创建方式可以通过右键菜单”FX->Niagara System”创建,将其拖入场景中时,引擎会自动创建Niagara Actor,并在其Niagara Component中引用该Niagara System资源:
请输入图片描述

其中,上图红色框显示了Niagara System资源,红色箭头表示将其拖入场景,蓝色框表示引擎生成的Niagara Actor,绿色框表示在其Niagara Component中引用拖入的Niagara System资源。

双击Niagara System资源可打开编辑器,如下图所示:
请输入图片描述
请输入图片描述

其中,上图红色框显示了Niagara System包含两个Niagara Emitter,在其区域内通过右键菜单可添加更多Niagara Emitter。Niagara System与Cascade的Particle System类似,可以包含多个Niagara Emitter,其执行顺序是从上至下。上图中绿色框显示了Niagara System的脚本节点图,其中包含两部分:Spawn和Update。Spawn只在该Niagara System初始化时执行一次,Update则会在每一帧都执行。从Niagara System的节点图中可知,其执行过程是顺序执行其包含的所有Niagara Emitter的Spawn和Update节点。

1.3 Niagara Emitter
Niagara Emitter类似于Cascade中的Emitter。只是在Cascade中,Emitter的创建和编辑都在Particle System资源中,而在Niagara中它成为一个独立的资源。通过右键菜单”FX->Niagara Emitter”可创建该资源,双击该资源可打开其编辑器,如下图所示:
请输入图片描述

在目前最新的4.18.3版本中,新创建的Niagara Emitter会出现一系列报错信息。上图红色框显示了错误信息。同时打开Selected Emitter Graph窗口会发现Emitter的节点图默认情况下为空。此时可先点击上图中的一系列Fix Error按钮,引擎会自动添加相应的Module,并生成相应的节点图。添加完成后如果发现还有错误提示,可先关闭Emitter编辑器界面,重新打开,错误提示便会消失,如下图所示:
请输入图片描述

其中,上图中Emitter的Module设置界面中显示了6种不同类型的Module。设计者在这6种类型中添加不同的Module可以实现不同的粒子效果,其操作方式与Cascade中的Emitter添加Module非常相似。但与Cascade最大的不同点在于,Niagara中的这些Module除了可以使用引擎内置的之外,还可以使用设计者通过节点图编辑的自定义Module。而用户自定义节点图即为Niagara Script,本文将在后续内容中进行说明。

Niagara Emitter中不同块的Module执行时机也不相同:

  • Emitter Spawn 表示Emitter Spawn时执行的Module,并且只执行一次
  • Emitter Update 表示Emitter Update时执行的Module,每帧都执行
  • Particle Spawn 表示Particle Spawn时执行的Module,并且只执行一次
  • Particle Update 表示Particle Update时执行的Module,每帧都执行
  • Add Event Handler 表示Emitter事件相关的Module
  • Render 表示Emitter渲染相关的Module

打开Selected Emitter Graph窗口可以看到此时引擎已经自动生成了节点图,并且节点图分为上述不同类型,如下图所示:
请输入图片描述

其中,上图红色框显示了Set Particle Position节点,绿色框显示了该节点是用于在Particle Spawn时执行并输出结果。

而Emitter节点图正好对应了添加的Module,如下图所示:
请输入图片描述

其中,上图红色框显示了Emitter Module设置界面中Set Particle Position Module,绿色框显示了其属于Particle Spawn类型。

由此可见,Niagara的总体结构与Cascade十分相似,都是分为两层:单个Particle System可包含多个不同的Emitter,通过设置不同Emitter以及参数可实现不同效果。但Niagara比Cascade更为强大的是,它能让设计者自定义Module,其编辑方式为节点图。

1.4 Niagara Script
Niagara Script在目前4.18.3版本中直接通过右键菜单创建会导致编辑器崩溃。绕开该问题的一个方式是先打开一个引擎内置的Script,然后将其另存为新的脚本,再进行编辑。为了使Emitter每帧都发射粒子,我们可以在Emitter Update中添加Spawn Rate Module,如下图所示:
请输入图片描述

其中,红色框显示了Spawn Rate Module,绿色框显示了目前发射的粒子数、Emitter的耗时以及所占用内存,通过该数据,设计者可以控制粒子的性能。双击红色框内的Spawn Rate即可打开该Script,如下图所示:
请输入图片描述

然后,将其另存为新的名字,即可创建出一个Niagara Script。在Niagara Script详细信息界面中可选择不用Usage来实现不同用途,其中包括:Module、Function以及Dynamic Input。分别表示该Script是用作Module,函数以及输入参数,如下图所示:
请输入图片描述

Module Usage Bitmask参数表示如果该Script是当作Module使用,其使用的类型是哪些。该设置能够在Module设置时根据归类进行提示,并提供快速选择。Category参数方便对Script进行分类,在设置时可根据分类快速查找。
请输入图片描述

其中,上图红色框宣示了Module Usage Bitmask的选项。在上图中Emitter Spawn Script和Emitter Update Script被选中,因此在Module编辑界面添加Module时,在Emitter Spawn和Emitter Update两类中会出现该Script。

此时,我们虽然添加了Spawn Rate Module,使得场景中出现了粒子,但是默认情况下粒子为灰色,难以分辨。因此,我们将Render中的材质修改一下,便可看到预览场景中出现了该材质的粒子,如下图所示:
请输入图片描述

其中,上图红色方框显示了修改粒子材质为M_Spark。于是可在左图预览界面中看到粒子。为了让粒子动起来,我们还需在Particle Update类型中添加Update Velocity Module:
请输入图片描述

并且,修改Particle Spawn中的Set Particles Velocity Module的Velocity参数z为10.0:
请输入图片描述

即可看到粒子向z方向移动:
请输入图片描述

我们用上述方法实现了简单的粒子移动,但Niagara提供的功能和节点远不止如此。通过编辑节点图,设计者可以控制粒子发射以及运动的整个过程,从而可以实现任意想要的粒子效果。


二、Niagara与Cascade比较

总体来说,UWA认为Niagara粒子系统在功能方面的优势主要有以下两种:

(1) Niagara提供了类似于BluePrint的编辑方式,从而使粒子系统的制作更加方便、更加灵活;

(2) 不光对粒子发射器可以进行控制,同时让用户可以对粒子也可以进行控制,从而可以让用户自定义粒子的运动状态,进而制作出更为复杂的粒子特效。

当然,老版本Cascade粒子系统已经包含了大量常用的粒子系统效果。UWA认为,如果Cascade能够满足您的需求,则直接使用Cascade进行编辑即可,毕竟使用已有功能可以节省开发时间。而当Cascade中提供的功能无法满足需求时,则可考虑使用Niagara。设计者可以通过Niagara实现更加符合项目需求的、特殊的粒子效果。


NiagaraAX开发者向导-docDeveloperPDF NiagaraAX-3.1 Devdloper Guide 中文版 目录结构: 目 录 目 录 ...............目 录 ......1 Niagara 概览 .................4 整体概要 ..................... 4 Niagara: ............ 4 背景....... 4 Java 4 混合集成系统 ..... 4 非专业程序员的编程 ........................... 4 嵌入式系统 ......... 4 分布式系统 ......... 5 组件软件 ..................... 5 结构 ........6 概述....... 6 程序(Programs) ................... 6 通讯协议(Protocols) ........................ 7 平台(Platforms) ................... 7 站点(Stations) ........ 7 守护进程(Daemon) ................... .. 8 工作台(Workbench) ................... . 8 FOX 通讯协议 ............. 9 接口软件栈(API Stack) .......................... 10 API 相关信息 ............. 11 概览..... 11 稳定性(Statbility) ................... ... 11 Baja 是什么 ............... 11 标准与实现 ............... 11 Javax.baja 与 com.tridium ........................ 12 模块(Modules) ....... 13 概览..... 13 版本号. 13 清单(Manifest) .... 13 对象模型 ..................... 16 Niagara 类型 ............. 16 BObject 16 BInterface .................. 16 BObject 语义 ............. 16 建立 BObject 对象 .... 17 组件模型(Component Model) .................. 18 介绍..... 18 插槽(Slots) ........... 18 NiagaraAX-3.1 开发者向导 作者:Tridium 公司 翻译:YC 2 / 52 BValue . 19 建立 BValue .............. 19 建立 Simple 子类对象(Building Simples) . 20 概览..... 20 示例..... 20 建立枚举类型(Buildiing Enums) .............. 23 概览..... 23 示例..... 23 建立 Complex 对象(Building Complexes) . 25 BStructs 与 BComponents ........................ 25 建立 BComplex 子类对象 .......................... 25 内省模式 ................... 25 静态属性(Property) ................... 26 规则 ................... 26 语义 ................... 26 示例 ................... 26 静态活动(Action) ...... 27 规则 ................... 27 语义 ................... 27 示例: ............... 28 静态主题(Topic) .. 28 规则 ................... 28 语义 ................... 28 示例: ............... 28 动态插槽 ................... 29 注册(Registry) ........ 30 概览..... 30 API ....... 30 代理(Agent) ......... 30 Defs ..... 31 Spy ....... 31 命名(Naming) ........ 32 概览..... 32 API ....... 32 分解(parsing) ....... 33 常见“格式”(Common Schemes) ......... 33 IP: ................... 33 Fox: ................. 33 Moudle: .......... 34 Slot: ................ 34 h: .................... 34 Service: ........... 34 Spy: ................. 34 Bql: ................. 34 NiagaraAX-3.1 开发者向导 作者:Tridium 公司 翻译:YC 3 / 52 链接(Links) ............. 35 概览..... 35 连接(Links) ........... 35 链接检查(Link Check) ............................ 35 直接链接和间接链接 ................... .. 36 链接激活(Activation) ............................ 36 执行(Execution) ..... 37 概览..... 37 运行状态(Running state) ...................... 37 链接(Links) ........... 37 定时器(Timer) ..... 37 异步动作(AsyncAction) ......................... 38 系统时间变更(System Clock Changes) . 38 站点(Station) ......... 39 概览..... 39 启动..... 39 远程编程(Remote Programming) .......... 40 概览..... 40 原理..... 41 代理对象的功能 ....... 41 代理对象的状态 ....... 42 订阅(Subscription)................... .. 43 Leasing(租赁) ....... 43 分组调用(Batch Call) ............................. 44 分组解析(Batch Resolve) .............. 44 分组订阅(Batch Subscribe) ........... 44 事务(Transactions) ........................ 44 调试(Debugging) . 45 工作台(Workbench) ................... .. 48 概览..... 48 布局(Layout) ........ 48 浏览器式的导航 ....... 49 WbPlugins ................. 49 WbView 类 ................ 49 WbFieldEditor 类 ...... 50 WbSideBar 类 ............ 51 WbTool 类 ................. 51 WbProfiles 类 ............ 51 ..........1 Niagara 概览 .................4 整体概要 ..................... 4 Niagara: ............ 4 背景....... 4 Java 4 混合集成系统 ..... 4 非专业程序员的编程 ........................... 4 嵌入式系统 ......... 4 分布式系统 ......... 5 组件软件 ..................... 5 结构 ........6 概述....... 6 程序(Programs) ................... 6 通讯协议(Protocols) ........................ 7 平台(Platforms) ................... 7 站点(Stations) ........ 7 守护进程(Daemon) ................... .. 8 工作台(Workbench) ................... . 8 FOX 通讯协议 ............. 9 接口软件栈(API Stack) .......................... 10 API 相关信息 ............. 11 概览..... 11 稳定性(Statbility) ................... ... 11 Baja 是什么 ............... 11 标准与实现 ............... 11 Javax.baja 与 com.tridium ........................ 12 模块(Modules) ....... 13 概览..... 13 版本号. 13 清单(Manifest) .... 13 对象模型 ..................... 16 Niagara 类型 ............. 16 BObject 16 BInterface .................. 16 BObject 语义 ............. 16 建立 BObject 对象 .... 17 组件模型(Component Model) .................. 18 介绍..... 18 插槽(Slots) ........... 18 NiagaraAX-3.1 开发者向导 作者:Tridium 公司 翻译:YC 2 / 52 BValue . 19 建立 BValue .............. 19 建立 Simple 子类对象(Building Simples) . 20 概览..... 20 示例..... 20 建立枚举类型(Buildiing Enums) .............. 23 概览..... 23 示例..... 23 建立 Complex 对象(Building Complexes) . 25 BStructs 与 BComponents ........................ 25 建立 BComplex 子类对象 .......................... 25 内省模式 ................... 25 静态属性(Property) ................... 26 规则 ................... 26 语义 ................... 26 示例 ................... 26 静态活动(Action) ................... ... 27 规则 ................... 27 语义 ................... 27 示例: ............... 28 静态主题(Topic) .. 28 规则 ................... 28 语义 ................... 28 示例: ............... 28 动态插槽 ................... 29 注册(Registry) ........ 30 概览..... 30 API ....... 30 代理(Agent) ......... 30 Defs ..... 31 Spy ....... 31 命名(Naming) ........ 32 概览..... 32 API ....... 32 分解(parsing) ....... 33 常见“格式”(Common Schemes) ......... 33 IP: ................... 33 Fox: ................. 33 Moudle: .......... 34 Slot: ................ 34 h: .................... 34 Service: ........... 34 Spy: ................. 34 Bql: ................. 34 NiagaraAX-3.1 开发者向导 作者:Tridium 公司 翻译:YC 3 / 52 链接(Links) ............. 35 概览..... 35 连接(Links) ........... 35 链接检查(Link Check) ............................ 35 直接链接和间接链接 ................... .. 36 链接激活(Activation) ............................ 36 执行(Execution) ..... 37 概览..... 37 运行状态(Running state) ...................... 37 链接(Links) ........... 37 定时器(Timer) ..... 37 异步动作(AsyncAction) ......................... 38 系统时间变更(System Clock Changes) . 38 站点(Station) ......... 39 概览..... 39 启动..... 39 远程编程(Remote Programming) .......... 40 概览..... 40 原理..... 41 代理对象的功能 ....... 41 代理对象的状态 ....... 42 订阅(Subscription)................... .. 43 Leasing(租赁) ....... 43 分组调用(Batch Call) ............................. 44 分组解析(Batch Resolve) .............. 44 分组订阅(Batch Subscribe) ........... 44 事务(Transactions) ........................ 44 调试(Debugging) . 45 工作台(Workbench) ................... .. 48 概览..... 48 布局(Layout) ........ 48 浏览器式的导航 ....... 49 WbPlugins ................. 49 WbView 类 ................ 49 WbFieldEditor 类 ...... 50 WbSideBar 类 ............ 51 WbTool 类 ................. 51 WbProfiles 类 ............ 51
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值