学习Niagara特效系统:观察内容示例所展示的特性

5 篇文章 14 订阅

目标

《观察Niagara特效系统的核心概念:参数(FNiagaraVariable)》中,我观察了Niagara系统的核心概念:参数。现在我觉得是时候对一些具体的实例进行些学习了。

本篇和《学习Cascade粒子系统:观察内容示例所展示的特性》类似,简单浏览一下Niagara特效范例进行学习。
在这里插入图片描述

1.1 Simple Sprite Emitter

在这里插入图片描述
主要展示了Sprite(面片)这种渲染器
在这里插入图片描述


其中“粒子大小随声明周期变大变小”的效果,是Scale Sprite Size模块定义的行为,而其中Scale Factor使用了动态输入:首先用Vector 2D From Float将一个float转变为一个2d向量,然后用Sine指定一个正弦的变化。
在这里插入图片描述
然后大小会“乘”上粒子NormalizedAge(归一化的年龄)
在这里插入图片描述

1.2 Simple Mesh Emitter

在这里插入图片描述
主要展示了网格这种渲染器。
在这里插入图片描述

1.3 Simple GPU Emitter

在这里插入图片描述
展示了GPU计算粒子
在这里插入图片描述

1.4 Sprite Facing

在这里插入图片描述
这个例子的重点是控制粒子朝向中心。


Sphere Location使得粒子在一个球面位置上出生。
在这里插入图片描述


接下来,有关“粒子朝向”的逻辑,是通过动态输入脚本对三个参数进行设置来指定的,
在这里插入图片描述
翻译成伪代码的话,就类似:

FacingCenter = 系统的中心 - 粒子.Position;            
SpriteFacing = Rotate(FacingCenter,(60.0,60.0,60.0));
SpriteFacing = Lerp(FacingCenter,SpriteFacing,发射器.SineWave);

其中FacingCenter是一个临时的参数,相当于是编程时处于一个局部作用域的变量。而SpriteFacing负责决定最终粒子的朝向。

留意:最终是根据发射器.SineWave进行插值的。如果对此改变,比如改为0,就会使朝向都变为FacingCenter
在这里插入图片描述
改为1,就会使朝向都变为FacingCenter旋转(60.0,60.0,60.0)的值:
在这里插入图片描述

1.5 Blend Attribute by Value

在这里插入图片描述
这个例子重点达成的效果是:粒子会根据距离进行属性的变化,比如“颜色”:
在这里插入图片描述
根据NormalizedDistanceFromCenter对红色和蓝色进行插值。

2.1 Static Beams

在这里插入图片描述
展示了条带渲染器。不过要注意条带需要的模块:
在这里插入图片描述

2.2 Dynamic Beams

在这里插入图片描述
相比上一个例子,起点、末点、切线 都在每一帧发生变化。
这是通过Rotate Around Point模块和Update Beam模块作用的:
在这里插入图片描述
在这里插入图片描述

2.3 Multiple Renderers

在这里插入图片描述
这个例子意思是:同一种数据可以驱动多种renderer,比如这个例子中一个粒子点的数据就驱动了:sprite渲染器网格渲染器条带渲染器
在这里插入图片描述

2.4 Location Events

在这里插入图片描述
这个例子分为三个发射器:
在这里插入图片描述
第一个发射器是一个大的白色粒子,负责引导后面两个发射器:条带渲染器的发射器;以及在周围小的白色粒子。

Generate Locations Event将大的白色粒子的位置写入事件。
在这里插入图片描述
随后被后两个发射器接收。
在这里插入图片描述
在这里插入图片描述

2.5 Expressions

在这里插入图片描述
在这个例子中没有使用模块,而是使用表达式来控制粒子的行为:
在这里插入图片描述

2.6 Collision

在这里插入图片描述
这个例子展示了“碰撞的功能”。
对于CPU发射器,“碰撞”可以进行射线检测:
在这里插入图片描述
对于GPU发射器,“碰撞”可以通过“深度缓冲”或者“距离场”进行判断:
在这里插入图片描述


在这个例子中有三个发射器:
在这里插入图片描述

  • 第【1】个发射器是大的白色粒子。在碰撞时会改变自己的颜色,另外也会生成事件。
  • 第【2】个发射器是小的蓝色粒子。在碰撞时会停止(因为Bounce(反弹)restitution(补偿参数)设为了0)
  • 第【3】个发射器是小的橙色粒子。接收【1】号发射器生成的事件,在事件发生时生成粒子。

3.1 Static Mesh Sampling

在这里插入图片描述
这个例子展示了从模型上采样信息的功能。
主要是使用了Sample Static Mesh这个模块:
在这里插入图片描述
而他会向用户空间加入一个StaticMeshSampler的参数,可以在界面中看到:
在这里插入图片描述
在其中可以设置:Actor是哪个,StaticMesh是哪个。

Sample Static Mesh这个模块则最终向自己的模块空间(即SAMPLE STATIC MESH 空间)加入如下的参数:
在这里插入图片描述


不过最终的位置、朝向、颜色,还做了些逻辑:
在最开始算一个球形的位置与方向,
然后以ClampedSineWave作为系数,对:位置法线颜色 这三者进行插值:
在这里插入图片描述
在这里插入图片描述

3.2 Renderer Overrides

在这里插入图片描述
正如在《观察Niagara特效系统的核心概念:参数(FNiagaraVariable)》所讨论那样,“参数”的最终去向是喂给了renderer。例如对于Sprite(面片)这种渲染器,默认状态下将使用这些参数:
在这里插入图片描述
然而这些参数的绑定是可以改变的。而这个例子所展示的就是这个功能:
在这里插入图片描述
“位置”原先被绑定为Particles.Position,现在被改变为了Particles.RenderOffset。而它是个新创建的参数,也有自己的更新逻辑(见上图)。

3.3 Skeletal Mesh Reproduction

在这里插入图片描述
虽然看起来像一个骨骼模型,不过仔细观察会发现其实是由多个密集的面片粒子组成的。而粒子的材质是模型的材质(光照模型为“Surface”,着色模型是“默认光照”):
在这里插入图片描述


“重建”这个骨骼模型,需要Initialize_MeshReproductionSprite模块,和Update_MeshReproductionSprite模块:
在这里插入图片描述
不同于静态模型,骨骼模型还需要每帧更新,因为它需要变化。

Update_MeshReproductionSprite模块中,这些参数被更新:
在这里插入图片描述


至于角色看起来被一个接近的粒子所变为“橙色的高光并离开角色表面”,则和第【2】个放射器有关:
在这里插入图片描述
具体来说:

  • 第【2】个发射器的粒子将会生成一个“位置事件”
  • 在第【1】个发射器接收这个“位置事件”,随后在AccumulateNearbyParticleInfluences模块中联系上InfluencerVelocity这个参数。
  • 然后在第【1】个发射器时,使用InfluencerVelocity这个参数作为系数,来在“模型表面的位置及状态”与“离开模型表面的位置及状态”之间插值。

3.4 Texture Sampling

在这里插入图片描述
这个采样贴图的功能是通过Sample Texture模块实现的
在这里插入图片描述
在这个模块中采样了贴图的颜色放到了SampledColor这个参数中。
在这里插入图片描述
随后生成粒子时将以此为颜色:
在这里插入图片描述
注意,在方格之内却在“UE4标志”这个图形之外的粒子并不是没有生成,而是由于颜色是全透明,所以看不到。

之后待讨论的问题

这一篇实际上只是从流程上分析每个例子使用什么样的功能达成效果,也没有自己从零重建一个相同的效果来确认自己分析的是正确的,因此很可能有疏漏之处,以后有机会待仔细确认。

另外,这一篇也没有讨论特别细。模块脚本中的很多节点还并没有确认实际功能,待研究。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值