目录
Exporting Particle Data to Blueprint
Mesh Orientation vs. Rotational Force
内容示例
Niagara是UE的下一代VFX工具;完全可编程的VFX模拟,具有基于节点的模块化行为、定序器时间线、HLSL表达式支持和继承;Niagara有许多内置的发射器模板,在内容浏览器启用"Show Plugin Content","Show Engine Content" ,可显现这些模板;
Simple Sprite Emitter
Niagara运行一系列脚本,称之为Stacks;
蓝色是系统脚本,控制粒子系统的整个生命周期,System Spawn控制着系统生成的第一帧上发生的事情,System Update是此后每帧运行的逻辑;当数据从系统->发射器->粒子流动时,系统中的每个其他发射器和粒子都可以访问此处创建的属性;
橙色是系统中的每个发射器脚本,每个发射器都有一个类似的Spawn和Update脚本;可控制系统中每个单独发射器生命周期,循环还是单次等;
绿色是粒子脚本,对发射器中的每个单独粒子独立运行;Particle Spawn是对粒子生命周期的第一帧,Particle update是对此后的每帧;粒子生成、更新中都有许多内置行为(称为模块),可通过每个脚本标题旁边的彩色“+”访问,也可通过右键单击模块并选择“Insert Above”或“Insert Below”来访问;
系统可包含多个发射器,想添加另一个发射器,可右击并选择;如没有看到任何模板,"Show Plugin Content","Show Engine Content";

Simple Mesh Emitter
Initialize Particle模块不仅可初始化简单的点属性,如lifetime或color,还可初始化渲染器特定的属性,如Mesh的Scale或精灵粒子的SpriteSize;该案例Initial Mesh Orientation,及Update Mesh Orientation,都是设置或更新属性Particles.MeshOrientation;

Simple GPU Emitter
注意发射器properties上的黄色GPU图标,表示发射器处于GPU模式下;
大多数功能在CPU和GPU模式下都能工作,但有些功能的行为不同,如GPU碰撞在GPU上以更高性能但不太准确的方式处理,某些渲染器如light渲染器和ribbon渲染器,目前仅使用CPU;
GPU模拟的好处是通常可很好地处理更高的粒子数,缺点是如已经过大GPU边界,有时最好让CPU来模拟粒子;
同样值得注意的是,只有PARTICLE脚本(绿色的Spawn和Update部分)在GPU上运行;
系统和发射器脚本(上面的橙色和蓝色部分)仅在CPU上执行,因此仅限于CPU友好的操作,如系统和发射器的脚本不能sample textures,也不能查询场景距离场;

Sprite Facing
Particles.SpriteFacing是控制粒子朝向的矢量变量,此案例是在粒子位置减去球体中心位置;
Particles.SpriteFacing、Particles.SpriteAlignment 都是worldspace向量,与simulation坐标空间无关;
在Sprite Renderer的Bindings内可查看绑定的粒子属性列表,这些属性对引用它们的渲染器具有特殊意义,如果需要,每个属性都可以被其他属性覆盖;
注,Vortex Velocity 此节点已废弃,该模块是直接修改Velocity是不推荐的工作流,使用 Vortex Force 模块替代;在Particle Update阶段直接修改速度,可保证粒子沿球运动;

Blend Attributes by Value
Transient变量仅对给定的堆栈上下文(如Particle Update)是局部的,且每帧都会从头开始重新计算,它们不会在每帧之间持久化它们的值;这使得它们不同于Particles变量,它们保存在粒子playload中,并在帧与帧之间持续存在,这会带来内存和性能成本;
此案例创建一个Transient变量,表示粒子到发射器原点的当前距离,用来驱动Color和Spirte Size;


Static Beams
Particles.RibbonLinkOrder 变量决定了给定RibbonID的粒子如何相互链接;“Spawn Beam”模块根据在爆发中生成的新粒子建立顺序,并为每组新粒子分配一个新的唯一RibbonID,以使它们保持为单独的束,而不是发射器中所有粒子组成的一个大型相互连接的条带;
注,新版Curl Noise Force的Noise Frequency缩小1000倍,更加用户友好;

Dynamic Beams
Update Beam 沿着起始点路径放置粒子,会每帧重新计算起始点,可动态的改变起始点位置;


Multiple Renderers
Renderer Bindings 如“Color”或“Scale”,是在许多模块的底层设置的,但也可直接在堆栈中设置;如在Parameters面板中创建新的参数,可将其直接拖动到堆栈中进行设置;

Simple Lightweight Emitter
轻量级发射器更快,使用更少的内存,不需要编译时间;为实现这一点,轻量级发射器有一组更小的工具来构建效果;之所以选择可用的工具,是因为它们是最常用的,且被认为是“无状态的”,即:它们可在任何时候进行评估,而无需启动;
轻型发射器相当于瑞士军刀,其紧凑、高效,但在某些方面存在不足;

Lightweight Renderers
在可能的情况下,轻量级发射器模仿标准发射器的行为;轻量级发射器目前支持Sprite、Mesh和Ribbon渲染器;

CPU vs GPU
使用标准发射器,可选择使用CPU或GPU发射器;轻量级发射器根据生成计数在CPU和GPU之间自动切换,以实现最高效的性能;

User and System Bindings
一些粒子属性可以通过绑定到用户或系统参数来控制,

Bindings are Instantaneous
轻量级粒子存储状态的能力有限,Spawn vs Update的概念不适用于轻量级发射器;此案例中初始化粒子模块正在使用系统绑定,但是,颜色会在每一帧上更新,而不是在粒子似乎被生成时更新;

Fast, Faster, Fastest
轻型发射器可以与常规发射器结合使用,然而在没有常规发射器的情况下时,性能会达到峰值,因为这能够避免系统脚本的执行;
红色粒子被锁定到带动画Actor,即把指定Actor的位置赋给粒子,需System Update堆栈中每帧执行脚本;


绿色粒子在生成时吸附到Actor位置,在System Spawn上执行一个系统脚本;
蓝色粒子根本不与Actor结合,所有系统脚本均已停用,包括系统状态,最快;

Location Events
当前事件Event仅限于CPU发射器!在GPU发射器上,有一个Lead/Follower范式,使用“Spawn Particles From Other Emitter”和“Sample Particles From Other Emitter”模块,这些模块利用了粒子属性Reader;
Event Generators如"Generate Location Event" 存在于粒子脚本;通常,默认在解算器运行后发送位置事件以获得最高精度,但模块可以放置到任何地方,以确定事件何时发送;默认“Send Rate”为每秒合理的事件数,可降低该值以限制事件的发送速率;
"Event Handler"可接收事件,类似Particle Spawn or Update一样的脚本,在接收到事件后运行;

Expressions
可在参数上直接使用表达式;



Collision
碰撞在CPU和GPU发射器上都有效,有些选项会不同,如只有GPU发射器可以对场景深度或全局距离场进行采样;与GPU碰撞相比,CPU碰撞通常非常昂贵,应该谨慎使用;
"Generate Collision Event" 能生成碰撞事件,但仅在CPU上支持;

Static Mesh Sampling
可点击Detail面板的搜索栏右侧的view option,以显示写入的参数;


Renderer Overrides
每个渲染器在“Bindings”类别下显示其绑定,如需要,这些绑定甚至可以用自定义属性覆盖;此案例在Sprite Render的Position Binding上使用RenderOffset替代Position属性;

Visibility Tag
Particles.VisibilityTag 变量关于确定渲染器,但与渲染器中的Render Visibility参数匹配时;

注:如希望简单地从单个mesh渲染器内拾取给定多个mesh,只需在mesh渲染器中添加指定数量的mesh,在Initialize Particle,设置Mesh Render Array Visibility Mode(即设置MeshIndex);此可见性标记功能更适合在精灵、网格、灯光或其他渲染器之间进行选择;

Texture Sampling
Texture sampling当前仅支持GPU;


Mesh LOD Modes
Mesh Renderer的LOD模式:
- LODLevel,使用提供的LODLevel去渲染所有mesh粒子;
- LODBias,使用最高LOD+LODBias以渲染所有mesh粒子;
- By Component Bounds,基于组件边界的屏幕尺寸计算LODLevel,所有粒子使用相同级别;
- Per Particle,使用粒子位置和mesh球边界计算LODLevel,针对每粒子计算级别;

PlayAudioExample
当前从粒子播放音频仅限于CPU;
Play Audio
在指定位置播放一次音频,有多种播放模式:Direct Set、Random、On Death;

Play Persistent Audio
在指定位置生成音频效果,并返回一个句柄以控制效果;当条件为假或重置发射器时,声音停止;




Exporting Particle Data to Blueprint
GPU粒子数据导出是通过从GPU内存中回读来执行的,存在不可预测的延迟,延迟帧数不固定,通常为1-2帧;
- 回读性能受回读缓冲区大小的限制,建议采用GPU固定大小分配;
Niagara系统
- 创建Object类型的用户参数,指定将使用的蓝图;
- 添加Export Particle Data to Blueprint,指定导出的数据;

蓝图
- 添加Niagara组件,指定设置好的Niagara;
- 添加蓝图接口Niagara Particle Callback Handler,以接收粒子数据;
- 接口函数Event Receive Paticle Data;


RendererWithNoParticles
Sprite和 Mesh渲染器Source Mode可设置为"Emitter",渲染器会创建单个sprite/mesh,由发射器脚本驱动而不是粒子脚本驱动;这是一种优化,只需一个小精灵渲染器,执行了最小的粒子脚本逻辑,如效果中心的单个光晕;
- 此时所有Bindings都将是Emitter命名空间而不是Particle命名空间;
- 粒子的生命周期将由Emitter State的生命周期控制;
![]()


Mesh Orientation vs. Rotational Force
Initial Mesh Orientation / Update Mesh Orientation 直接设置方向值,会创建恒定的旋转速率,与mesh粒子的大小或质量无关;这是一种廉价的方法,使用户可根据粒子年龄或其他指标直接控制旋转;
Mesh Rotational Force 是一种基于力的旋转系统,更物理的旋转方法;与Drag结合在一起使用,其中质量和旋转惯性旋转是因素;如在Particle Spawn内使用此模块,需在添加Apply Initial Forces模块,以将旋转力应用到旋转速度上;如需考虑mess,可直接使用Add Rotational Velocity 模块;


其他案例
Beam Effect
Emitter Update
- Beam Emitter Setup,设置起始点、终点及切线;
Particle Spawn
- Spawn Beam,沿着起始点路径放置粒子,不会每帧重新计算起始点;
- Beam Width,设置条带宽度,RibbonLinkOrder标准化的粒子顺序(0-1);
Particle Update
- Update Beam,沿着起始点路径放置粒子,会每帧重新计算起始点;
Render
- Ribbon Renderer,条带渲染器,Curve Tension曲线张力;
Beam Emitter Setup模块的Beam End设置
- 点击Beam End右侧的下拉箭头,选择New Dynamic Scratch Input;
- 在打开的scratch pad图表内,点击Map Set的(+)选择Actor Component Interface(访问actor或组件信息),设置并输出位置;
- 在Actor Component Interface参数右侧的下拉箭头,选择Read from new User paramete;




附着闪电
随机获取Skeletal Mesh点位置,作为闪电的起始点;可另创建闪电材质以增强效果;


1758



被折叠的 条评论
为什么被折叠?



