观察Niagara特效系统中的基本概念

5 篇文章 14 订阅

目标

之前的博客中我观察了Cascade粒子系统中的基本概念,相较于前者,Niagara特效系统拥有更多的概念。但考虑到Niagara的主要目标就是:“让美术师可以直接全权掌控效果而不必求助于程序员”,因此复杂度更高是很自然的。
本篇的目标是通过:参考《Niagara关键概念 | Unreal Engine Documentation》等官方文档、简单观察源代码、进行些简单的实践,来了解Niagara特效系统中的以下基础概念:

  • Niagara系统
  • Niagara发射器
  • Niagara Module Script
  • 参数

Niagara系统

“Niagara系统” 是一种资源,可以直接在内容浏览器中被创建:
在这里插入图片描述

/** Container for multiple emitters that combine together to create a particle system effect.*/
class NIAGARA_API UNiagaraSystem : public UFXSystemAsset

它是多个“Niagara发射器”的容器。
UNiagaraSystem这个类的继承关系如下:

UObject
UFXSystemAsset
UParticleSystem
UNiagaraSystem

Niagara发射器

打开“Niagara系统编辑器”,可以看到当前Niagara系统所拥有的发射器:
在这里插入图片描述
从代码上看,UNiagaraSystem有一个当前它所拥有的发射器的列表:

/** Handles to the emitter this System will simulate. */
UPROPERTY()
TArray<FNiagaraEmitterHandle> EmitterHandles;

“Niagara系统”是“Niagara发射器”的容器,“Cascade粒子系统”是“Cascade粒子发射器”的容器。但是这里有一个区别是:“Niagara发射器”可以在内容浏览器中创建一个Asset:
在这里插入图片描述
而随后在“Niagara系统”中能以刚才创建的发射器Asset继承来创建新的发射器:
在这里插入图片描述
我想,这也许意味着“Niagara发射器”拥有比“Cascade粒子发射器”更复杂的逻辑,并且Niagara系统想要更高的复用性

需要强调的是,这里的关系是继承,不是引用(意思是并没有新发射器出现,只是引用了现存的发射器Asset)或者模板(意思是新发射器是用发射器Asset复制出来了,一旦创建之后便和Asset脱离了关系)。
继承的关系稍微复杂,简单地讲,继承可以让它有父项的行为,但是可以有独自的变化。例如MyTestEmitter这个资源有一个Ribbon Renderer
在这里插入图片描述
继承它创建出的新发射器也将拥有Ribbon Renderer,但却不能删除:
在这里插入图片描述
不过,新创建的发射器可以添加新东西并删除:
在这里插入图片描述

Niagara Module Script

“Cascade粒子系统”中 “模块” 的角色将由Niagara Module Script扮演。但结构上存在区别:

  • Niagara Module Script 不仅可以加入到“发射器”中,还可以加入到“系统”中。
  • Niagara Module Script 将明确属于一个阶段

例如,可以看到下面几个阶段
在这里插入图片描述

  • 系统 生成阶段
  • 系统 更新阶段
  • 发射器 生成阶段
  • 发射器 更新阶段
  • 粒子 生成阶段
  • 粒子 更新阶段
  • 粒子 事件阶段

一个和“Cascade粒子系统”重要的区别是:
这里的Niagara Module Script实际是引用一种Asset
在这里插入图片描述
在这里插入图片描述
而打开这个Asset中,有一个类似蓝图的可视化编辑脚本:
在这里插入图片描述
例如这个Color模块。它有三个输入:ColorScale ColorScale Alpha。这些输入参数可以在“Niagara系统编辑器”中编辑。而在Color模块的编辑器里,将可以看到它具体的行为:
它将Color拆分为RGB部分和alpha部分。其中RGB部分将乘算上Scale Color;而Alpha部分将乘算上Scale AlphaAlphaScale(发射器的参数)。最终颜色的结果将被设置到Color上(这里的Color是一个粒子的参数,不是模块的名字)

“Cascade粒子系统模块”是用C++写的,只能由程序员编辑并重新编译才可以使用。而Niagara Module Script则可以用上面这种方式直接用可视化脚本的方式来编辑。体现了Niagara一个重要的设计目标:“让美术师可以直接全权掌控效果而不必求助于程序员”。


此外,值得一提的是:Niagara Module Script的C++类是UNiagaraScript,而有另外两种Asset也是这个C++类。
也就是说总共有三种Asset都是UNiagaraScript类:
在这里插入图片描述
他们的区别是Usage(作用)不一样,在UNiagaraScript中:

// how this script is to be used. cannot be private due to use of GET_MEMBER_NAME_CHECKED
UPROPERTY(AssetRegistrySearchable)
ENiagaraScriptUsage Usage;

如果打开Asset,可以看到他们的模块使用位掩码不一样,例如Niagara Module Script将打开模块这一项:
在这里插入图片描述
其余的Script的作用待后续观察。

参数

刚才研究Color模块时看到,它最后的行为其实就是为了设置一个参数:
在这里插入图片描述
需要注意的是,参数都有个“命名空间”。例如Color的命名空间就是粒子
命名空间的层级从上至下依次是:

  • 用户
  • 引擎
  • 系统
  • 发射器
  • 粒子

在处于相对下层的情境中可以使用相对上层的参数,但只能修改自己这个层级的参数。
例如:
MyTestVar是一个系统命名空间的参数。
在这里插入图片描述
如果尝试在“Niagara系统”中修改这个参数,是可以的:
在这里插入图片描述
但如果尝试在“Niagara发射器”修改这个参数,就会被禁止:
在这里插入图片描述
关于参数还有更多需要学习的东西,待后续研究。

Niagara Framework ® 介绍 Tridium 是一家全球性的软件及技术服务公司,致力于开发通用软件框架来解决智能设备管理相关的各种问 题。软件框架是为用户更容易开发产品而提供的一种平台技术。Niagara Framework ®( 简称 Niagara) 是基 于 Java 为用户提供的一种极其开放式的软件架构,可以集成各种设备和系统形成统一平台,通过 Internet 使用标准 Web 浏览器进行实时控制和管理。 目前全球 70 亿世界人口,一半以上 (40 亿 ) 人拥有移动手机,未来可以智能联接的设备接近 600 亿。而 这些设备又是分布在不同垂直领域、网络和协议之间,这种繁杂程度实在超乎想象。如何将这些智能设备有 机连接起来,相互通信,并可以很好的与上层企业级管理系统和门户有机一体化融合,挑战性太大了。 而 Tridium 却让此变得可能。拥有专利的 Niagara Framework ® 是 Tridium 的核心技术,它提供一个完 整的智能的企业集成平台,用于开发、集成、连接和管理普遍存在的各种协议。此平台可以接入任何协议、 任何设备、任何网络,并轻松与企业管理系统进行一体化应用,为企业创造商业价值。 Tridium 的产品线设计基于 IT/IP 和企业服务平台基础架构之上,提供更大的灵活性、可扩展性和移植性, 并兼容其它创新技术的独特功能。Tridium 的开放式技术已经被系统集成商、OEM 设备制造商和经销商等 合作伙伴广泛应用,以构建自己的产品或纳入现有的产品平台。这使得合作伙伴有更多的灵活性,满足最 终用户更独特个性化的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值