UE4 Niagara 工具与数学模块

一.工具模块

*

Do Once

工具模块

该模块追踪其触发条件在前一帧是否为true。若否,Particles.Module.Execute 返回true。

若触发条件在前一帧返回了true,则 Particles.Module.Execute 返回false。

该模块是设置Particles.Module.TriggeredOnce,是一个布尔值,当我们需要编写一些只在Update中触发一次的Script时,可以使用。

Generate Grid Ribbon IDs

工具模块

可用该模块生成输出粒子参数,此类参数用于生成具有3个条带发射器的3D网格。在条带渲染器中,用 Particles.RibbonID1Particles.RibbonID2Particles.RibbonID3 替代 RibbonID。将 Ribbon Link Order 设为 123。对于2D网格,执行上述操作,但只具有2个条带发射器。

要启动该模块,需要开启 Persistent IDs.未知作用

Increment Over Time

工具模块

该模块将每帧增大值。该计数器变量使用tick差量值进行增量,并将其乘以用户指定率。

每帧进行累加++;

Update MS Vertex Animation Tools Morph Targets

工具模块

该模块读取变形目标纹理数据,并输出给定逐粒子像素索引的位置和法线向量。将模块的场景空间法线输出传送到资源的材质中,同时在该材质中禁用切线空间法线,以复制网格体表面。

这里是把变形数据存储在贴图上,然后进行读取和识别。

二.数学模块

*

Calculate Line Plane Int

数学模块

该模块根据追踪原点、向量和平面描述,查找到平面的距离。若线与平面对齐,则线相交向量将产生NAN。为避免引用该值,确保适当引用输出布尔线相交。

给定一个平面的定义,然后对每个粒子计算每个点与平面的距离。

具有里程碑式参考意义。

Cone Mask

数学模块

该模块在三维空间中定义椎体,并检查位置输入是否位于椎体内。若位置位于椎体内,其将返回 1;否则返回 0

具有参考意义。

Lerp Particle Attributes

数学模块

该模块支持所有默认粒子参数的线性内插(lerp)。可选择特定参数来对各默认粒子参数内插,还可选择内插因子对各默认粒子参数内插。

在这里可以开启和设置所有的粒子的参数进行lerp

Recreate Camera Projection

数学模块

该模块重新创建场景采集2D像素的摄像机相对场景位置。利用投影仪变换域,可重新定位和旋转投射位置。

重新计算粒子相对于camera的位置,

具有里程碑式参考意义。

Slerp Vector

数学模块

该模块使用透明度执行从A点到B点的球体线性内插(slerp)操作,然后缩放生成的向量。

具有里程碑式参考意义。

Temporal Lerp Float

数学模块

该模块根据用户指定 当前值 随时间执行缓慢线性内插(lerp)。通过 变化率(Rate of Change) 输入指定收敛速率。

具有参考意义。

Temporal Lerp Vector

数学模块

该模块根据用户指定 当前值 随时间执行缓慢线性内插(lerp)。通过 变化率(Rate of Change) 输入指定收敛速率。

具有参考意义。

UE4 Niagara 碰撞模块

Generated

*

Align Particles with Collision Plane

碰撞模块

 

该模块随时间将sprite与平面对齐。平面默认由碰撞模块的返回碰撞平面定义。使用该模块时,Sprite渲染器中的 对齐(Alignment) 设置必须设定为 自定义对齐(Custom Alignment)朝向模式(Facing Mode) 必须设定为 自定义朝向向量(Custom Facing Vector)自定义朝向向量遮罩(Custom Facing Vector Mask) 必须设定为 111

 

Analytical Collision Query

碰撞模块

该模块查找给定大小的粒子与平面碰撞的位置。角冲量和线性冲量力模块随后可使用碰撞数据,之后由解算器正常解算

 

Collision

碰撞模块

该模块必须刚好放在解算器模块前面。在CPU发射器中使用时,该模块将发射光线来计算其与场景的碰撞。在GPU发射器中使用时,该模块将使用场景深度或全局距离场来查找碰撞表面。

 

Debug Collision Events

碰撞模块

可利用该模块将碰撞事件作为逐粒子参数进行调试。

 

在4.24之前的版本,碰撞模块的使用是非常复杂的。在新的4.24模块之后,我们只需要Collision模块就可以开启粒子的碰撞。

能够开启碰撞模块是非常有意义的,这说明了我们的粒子拥有了与场景交互的能力。需要注意的是,我们官方提供的基础碰撞模块仅是处理粒子物理运动轨迹。这里我们其实是能做更多的东西。

Generated

Simulation Target,我们将采用的是GPU模拟还是CPU模拟,CPU模拟是在粒子的运动轨迹上使用射线检测,最为准确但是消耗巨大,GPU模拟使用scene depth,做一些比较不那么准确的模拟。

Collision Radius,是让我们设定我们每一个粒子的碰撞体。是使用Mesh的还是Sprite。

Bounce,在测试中,只有CPU模拟是可以Bounce的,Restitution指的是能量消耗,如果是1的话他的能量是无限的,会一直崩

Friction,摩擦力,这是控制粒子滑行的时候的摩擦力进行。

Rest,是否运行渗透进去

Ray Trace:设置射线追踪的属性

 

UE4 Niagara 速度与约束模块

一.速度模块

力和速度几乎拥有相同的数据对应关系,我们这里的速度不care Mess外。这里的速度我们是可以直接加在Particle Spawn中,如果在Particle Update中 启用Update AGE (旧版本)或者Particle State(新版本)那么就会有一个恒定的速度。

在Particle Update中调用,则会不断的累加速度。

*

Add Velocity

速度模块

 

该模块向生成粒子指定速度。可添加各种动态输入来修改在该模块中输入的值。

这,没什么好说的

Add Velocity from Point

 

该模块添加空间中任意点内的速度,可选衰减。其使用速度原点和粒子位置间的向量决定速度向量。若未初始化粒子位置(导致粒子位置与速度原点过于接近),则该模块将注入随机速度。为获得最精确的结果,请将该模块置于堆栈中位置模块下。此操作可确保已初始化粒子位置。

这,没什么好说的

Add Velocity in Cone

 

该模块以椎体形状向 Particles.Velocity 参数添加速度,同时提供椎体角度及沿椎体轴分布速度的参数。

这,没什么好说的

Align Velocity to Random Axis

 

 

该模块获取速度向量并保持其量级,同时选取随机轴将其对齐,并可选择在两次更新间添加时间间隔(以秒计)。

Generated

以秒为时间单位,每秒随机变换其速度轴向

 

Inherit Velocity

 

该模块添加另一源中继承的速度。此参数默认为拥有当前发射器的系统的位置。

Generated

Scale Velocity

 

该模块将 Particles.Velocity 乘以特定坐标空间中的单独向量。

可以用曲线控制

Static Mesh Velocity

 

该模块根据静态网格中的法线添加速度,同时添加静态网格的继承速度。

按照采样的StaticMesh法线来进行速度的控制

Vortex Velocity

 

该模块计算绕旋涡轴的角速度,并将其注入 Particles.Velocity 参数。该模块将被添加到粒子生成时的初速度。

这,没什么好说的

 

*

Calculate Accurate Velocity

 

该模块计算上一位置到当前位置的准确速度。应用约束若改变粒子在解算器框架外的预期位置,此模块将十分有用。

!!!

 

二.约束模块

该模块不能代替location 的作用。

*

Constrain to Plane

 

约束模块

该实验性模块将sprite与分析平面的表面对齐。

这个节点可以做成切面,不过好像也没有什么卵用

Generated

*

Maintain a Set Distance Between Two Points

约束模块

 

 

该模块获取两个不同位置:粒子位置和目标位置。该模块将空间中点投射远离初始位置处,即两个位置间向量上的位置。该向量的长度设为所需距离。对于某些情况,可能需切换目标位置和粒子位置变量。

将粒子的位置插在两点。

对于整体有无限规则的移动很有意义

 

Pendulum Constraint

 

该模块引入非物理性正确的钟摆约束,该约束与力交互。添加 重力(Gravity Force) 模块,使其与重力交互;添加 加速力(Acceleration Force) 模块,使其与重力以外的加速力交互用;添加 拖动力(Drag Force) 模块,使其与粘性摩擦阻力交互。

 

这两个必须整体使用,做一个能够在钟摆。

Generated

Pendulum Setup

 

该模块引入非物理性正确的钟摆约束,该约束与力交互。添加 重力(Gravity Force) 模块,使其与重力交互;添加 加速力(Acceleration Force) 模块,使其与重力以外的加速力交互用;添加 拖动力(Drag Force) 模块,使其与粘性摩擦阻力交互。

 

 

UE4 Niagara 网格体模块

这是具有创新性的模块。可以采样Mesh 的表面作为发射器的形状。

Generated Generated

这里需要注意的是,我们需要Sample 和对应的Location共同使用.

Generated

 

*

Sprite(Initialize Mesh Reproduction Sprite)

 

网格体模块

 

该模块首先在骨架网格体上随机选择位置。然后使用选定三角形来计算所需粒子大小、UV缩放、sprite对齐等。为使粒子与网格体表面正确对齐,应将sprite的 渲染对齐(Render Alignment) 设为 自定义对齐(Custom Alignment),并将 朝向模式(Facing Mode) 设为 自定义朝向(Custom Facing)。然后将 自定义朝向向量遮罩(Custom Facing Vector Mask) 设为 1,1,1

若网格体未设置动画,可勾选 覆盖固有变量(Overwrite Intrinsic Variables) 框来设置粒子系统的所有固有参数。若要在效果期间更新朝向模式(Facing Mode),切勿勾选覆盖固有变量框。换为将 更新网格体复制Sprite(Update Mesh Reproduction Sprite) 模块添加到粒子更新组中。在材质中,使用 Niagara_MeshReproductionSpriteUVs 对网格体的UV进行采样。

 

Sample Skeletal Mesh Skeleton

网格体模块

该模块对骨架网格体的骨骼或插槽采样,然后将采样值写入粒子参数。稍后可在堆栈中使用此类粒子参数。

 

Sample Skeletal Mesh Surface

网格体模块

该模块对骨架网格体的表面采样,然后将采样值写入粒子参数。稍后可在堆栈中使用此类粒子参数。

 

Sample Static Mesh

网格体模块

该模块对静态网格体行采样,然后将采样值写入粒子参数。稍后可在堆栈中使用此类粒子参数。

 

Sprite(Update Mesh Reproduction Sprite

网格体模块

该模块与初始化网格体复制Sprite模块一起使用。要在Niagara关卡的内容范例中重新创建该效果,请执行以下步骤:

初始化网格体复制Sprite(Initialize Mesh Reproduction Sprite) 模块放置在 粒子生成(Particle Spawn) 组中。

更新网格体复制Sprite(Update Mesh Reproduction Sprite) 模块放置在 粒子更新(Particle Update) 组中。

在Sprite渲染器中,将 对齐(Alignment) 设为 自定义对齐(Custom Alignment);将 朝向模式(Facing Mode) 设为 自定义朝向向量(Custom Facing Vector);将 自定义朝向向量遮罩(Custom Facing Vector Mask) 设为 1,1,1

在材质中,使用 Niagara网格体复制Sprite UV 对网格体的UV进行采样。

Module.OverwriteIntrinsicVariables 设为 False,确保该模块的输出变量驱动粒子的属性(例如位置、对齐等)。

 

 

UE4 Niagara 位置与朝向模块

一.位置模块

*

Box Location

位置模块

 

该模块生成矩形盒体形状的粒子。

Generated

Cone Location

位置模块

该模块生成椎体形状的粒子。

Generated

Cylinder Location

位置模块

该模块生成圆柱体形状的粒子,并利用Lathe式功能按钮来修改圆柱体的轮廓。

Generated

Grid Location

位置模块

网格式均匀排布,这里可以调节间隔。

Generated

Jitter Position

位置模块

该模块根据延时定时器在随机方向上抖动生成粒子。

没测试出来

Rotate Around Point

位置模块

该模块将在用户定义中心点周围的向前向量对齐圆上寻找位置。该圆的半径和位置将随时间发生改变。

有bug

 

Skeletal Mesh Skeleton Location

位置模块

该模块将在骨架网格体的骨架(骨骼或插槽)中生成粒子。这里需要一些细节设计

 

Generated

Skeletal Mesh Surface Location

位置模块

该模块将在骨架网格体的表面上生成粒子。

Generated

Sphere Location

位置模块

该模块将生成球形粒子,同时可选择半球形状和密度。

Generated

Static Mesh Location

位置模块

该模块将在静态网格体的表面上生成粒子。StaticMesh 的效率和设置的简单程度,非常的Nice。

Generated

System Location

位置模块

该模块在系统的位置中生成粒子。

 

Torus Location

 

 

该模块将生成圆环形粒子。

 

Generated

Generated

 

所有的位置模块都是可以用在Particle Spawn 和Particle Update中,使用在Spawn中主要是呈现一些初始时候的基础状态,一般都是使用这个状态;如果我们在Particle Update 中进行位置的Location,那么粒子的位置将会是瞬移的。

我们所有的Location,都来自随机采样,随机采样球体,随机采样Box ,staticMesh,SkeletalMesh等等。我们对于模块中的具体细节这里并不会进行更加细致的梳理,总之,Location是改变的Particle.Position。

 

二.朝向模块

*

Align Sprite to Mesh Orientation

 

朝向模块

该模块将sprite与网格体粒子的朝向对齐。利用此参数可使用 网格体旋转(Mesh Rotation)旋转速度(Rotational Velocity) 模块来控制sprite的对齐和场景的关系。

确保Sprite渲染器中的 对齐(Alignment)朝向模式(Facing Mode) 设置分别设为 自定义对齐(Custom Alignment)自定义朝向(Custom Facing)

自定义朝向向量遮罩(Custom Facing Vector Mask) 设为 1,1,1

Generated

Initial Mesh Orientation

朝向模块

该模块将网格体与向量对齐,或使用旋转向量将其旋转到位。

 

Orient Mesh to Vector

朝向模块

该模块将网格体与输入向量对齐。

 

Orientation一般而言是对于Mesh来使用的,但是使用Align Sprite to Mesh Orientation当然也是能够控制。

对于Sprite而言 ,主要的朝向控制参数是Particle.SpriteFacing和Particle.SpriteAlignment。facing相当于法线,决定的是这个粒子平面的所在平面,SpriteAlignment是定义切线方向。

由于完全可编程,我们的每个粒子的朝向信息是完全可以控制的。

 

而对于Mesh而言,我们更加需要的是四元数,Particle.MeshOrientation。这是表示我们的Mesh在空间当中的旋转程度。

*

Update Mesh Orientation

 

该模块随时间旋转网格体朝向参数。

 

 

 

UE4 Niagara 纹理与材质模块

一.纹理模块

Generated

 

*

Sample Pseudo Volume Texture

 

纹理模块

 

该模块基于UVW坐标对伪体积纹理的颜色采样。

根据位置采样三维的体纹理,由于手头没VolumeTexture ,所以没有测试,不过根据原理来说,对于一些云或者雾来说,采样使用VolumeTexture可以进行一些颜色上的变换

Sample Rasterized Mesh Distance Field

纹理模块

该模块基于UVW坐标对伪体积纹理的颜色采样。

手头没有,没办法测试

Sample Texture

 

纹理模块

此模块将对特定UV位置的纹理采样,并返回纹理该部分的颜色。

 

有bug,我采样啥都是紫色

Generated

Generated

Sub UV Texture Sample

纹理模块

该模块以行列方式对单个纹理像素采样。该模块采用相位0-1,并从中找到行列索引,然后使用该UV索引对纹理中的像素采样。

测试失败

World Aligned Texture Sample

纹理模块

该模块基于粒子位置对纹理的颜色采样,类似场景对齐纹理在材质编辑器中操作。

测试失败

二.材质模块

*

Dynamic Material Parameters

材质模块

此类参数写入材质编辑器中的动态参数顶点内插器(Dynamic Parameter Vertex Interpolator)节点。要使用索引1-3,请在材质编辑器中将节点自身的 参数索引 更改为相应编号。利用此参数,可在给定材质中使用最多四个唯一动态参数节点。

Cascade中只有一个,但是我们Niagara有四个!

 

 

UE4 Niagara 向量域模块

GPU粒子最有趣的特性是向量域。

向量域是一个由影响粒子运动的向量组成的统一网格。向量域作为Actor放置在场景中(整体向量域),可以像任何其他Actor一样进行平移、旋转和缩放。它们是动态的,可以在任何时候移动。场也可以放置在级联中(局部向量域),限制其对与其相关联的发射器的影响。当粒子进入向量域的边界时,粒子的运动将受到向量域的影响,当粒子离开边界时,向量域的影响将消失。

Generated

默认情况下,向量域会对其中的粒子施力。向量域还有一个“紧密度”参数。此参数控制粒子如何直接跟随场中的向量。当紧密度设置为1时,粒子直接从场中读取其速度,从而准确地跟随场。

静态向量域是向量网格永不改变的场。这些场可以从Maya导出并作为体积纹理导入。静态场资源占用低,可以用来向粒子添加有趣的运动,特别是通过对场本身的运动设置动画。

Generated

此外,还可以从二维图像重新构建向量域。在这种情况下,可以导入一个非常类似于法线贴图的图像,通过挤压它或将其围绕体积旋转来重新构建体积纹理。在此重新构建的基础上,可以添加一个静态向量域,引入一些噪点和随机性。此外,可以通过在图谱纹理中存储单独的帧来对2D图像设置动画。这样做让您可以离线执行流体模拟,并以极低的成本实时重新构建运动。

*

Apply Vector Field

向量域模块

 

该模块通过向量域采样器对向量采样,并将其作为力或速度应用。

 

Construct Bounding Box for Vector Field

向量域模块

该模块转换边界框边缘网格体的十二个实例,以便其组成的立方体。该立方体代表向量域的边界框。此操作可选择应用本地平移、旋转或缩放变换。

 

Distribute Arrows for Vector Field

向量域模块

该模块基于向量域在网格中分配点。

 

Get Vector Field Properties

向量域模块

该模块从向量域对象中提取相关属性,并计算其他有用属性。

 

Sample Vector Field

向量域模块

 

该模块对向量域进行采样,应用逐粒子强度因子和可选衰减因子,该衰减因子将消退向量域对边界框边缘的影响。此操作可选择应用本地平移、旋转或缩放变换。

 

 

 

UE4 Niagara力学与物理模块

一.力学模块

我们需要注意的是:力是Niagara最新的模块,而在Cascade中并没有力,因为Cascade中并没有质量这个参数,正是由于拥有了Mass属性,我们才能进行更多的能量的计算。

和速度一样,这个模块是累加的,也就是说这力是拥有惯性的,如果在Spawn中放置。如果在Update中,则会表示类似于加速度一样。

注意:如果没有效果,请不断点击√测试。

Generated

 

 

*

Acceleration Force

力模块

 

添加到 Physics.Force 参数,其将在解算器中平移到加速中。

 

Generated

Curl Noise Force

 

 

添加到使用留英域的 Physics.Force 参数。通常对中等分辨率烘烤的平铺留英域进行采样,也可选择直接对perlin派生的旋度函数进行采样,但开销会更大。

这是我们会经常使用的模块。

Generated

Drag

 

阻力

无视质量,将拖动直接应用于粒子速度和/或旋转速度。累加到 Physics.DragPhysics.RotationalDrag**中,将在 解算力和速度(Solve Forces and Velocity)解算旋转力和速度(Solve Rotational Forces and Velocity)** 模块中解算二者。

跟质量无关,只跟速度又关系,几乎是把已经拥有的速度-Drag。如果本身的速度小于Drag,则粒子会不能进行运动的。还是有点反逻辑。

Gravity Force

 

将重力(以cm/s计)应用于 Physics.Force 参数。

没什么好说的。

Limit Force

 

Physics.Force 参数超出力限制,则将该参数缩小到指定量级。

可以将力的大小锁定在一个范围里面

Line Attraction Force

 

向线条段上最近位置累加拉力,并将其添加到 Physics.Force 参数。

Generated

我惊呆了

 

Linear Force

 

将力向量(以cm/s计)添加到特定坐标空间中的 Physics.Force 参数。

 

Mesh Rotation Force

 

根据yaw、pitch和roll轴上应用的牛顿添加旋转力,并将该值累加到 Physics.RotationalForce 参数。

 

Point Attraction Force

 

AttractorPosition 的累加拉力,以拉入 Physics.Force 参数中。

点拉力

Point Force

 

使用可选衰减在空间中添加任意点内的力。使用速度原点与 Particles.Position 参数之间的向量来确定力向量。若尚未初始化位置(即粒子位置与速度原点相互叠加),则该模块将注入随机速度。应将此模块置于堆栈中任意位置模块之后,确保初始化粒子位置。

Generated

Vector Noise Force

 

该模块将随机噪点引入 Physics.Force 参数。

就是扰动

Vortex Force

 

选取绕旋涡轴的速度(可额外选取向旋涡原点的拉力),并将其注入到 Physics.Force 参数。

Generated

会越甩越大。

Wind Force

 

 

将风力应用到粒子,同时可选空气阻力参数。若和风同向的粒子移动速度快于风速,则不施加额外的力。

我实在看不出来这和普通的力有什么区别

*

Solve Forces and Velocity

 

该模块获取累加到 Physics.Force 参数中的值,将此值与 System.DeltaTime 参数相乘,并将总数添加到当前速度。其之后会将速度值置于 Particles.Velocity 参数中。

最终的结算速度的地方

我们需要在力学或者速度后面加入这跟

 

 

二.物理模块

这个模块就两个,可以预见的是,这并没有改变任何的基础数据,只是计算和写入保存下来数据,而数据怎么用,用在什么地方,能产生什么效果则是因人而异的。

*

Add Rotational Velocity

物理模块

该模块添加到用户定义空间中的 旋转速度(Rotational Velocity) 值。

非常狭窄的使用。

Find Kinetic and Potential Energy

物理模块

该模块返回以下内容:

基于粒子速度的粒子动能。

粒子的势能,即写入 Physics.PotentialEnergy 的所有力模块的总和。

1和2的总和。