粒子系统
粒子系统是一种真正通用的技术,可以创建复杂的移动结构,从而产生动态和“模糊”效果。 这些结构用于模拟火焰、烟雾、爆炸、电力、喷泉、火箭轨迹、聚集、魔法等抽象效果。 所有这些效果都很难使用传统的刚性对象来重现:粒子不是由一组原始表面元素表示,而是由形成粒子图元体积的点质量表示。 另一个显着特征是粒子不是静态的——它们不仅可以改变其位置,还可以随着时间改变其形式。
一个粒子系统包括三个主要实体:
另请参阅#
- particles_base材料调整粒子的外观
- ObjectParticles类来管理粒子通过API
- 一组样本位于Art Samples套件
创建粒子#
创建粒子,执行以下步骤:
- 在菜单栏,点击Create -> Particle System -> Particles。
- 粒子对象在世界上的地位。
- 指定粒子参数。
排放参数#
粒子发射器的行为通过发射器设置参数。
Clear On Enable | 使初始化粒子系统的每次启用。禁用此选项时,将粒子系统恢复之前的状态。 |
---|---|
Emitter Enabled | 使发射器。 |
Emitter Sync | 使孩子与父母一个粒子系统的同步,即使孩子粒子系统Emitter Enabled选项禁用。 |
Emitter Shape |
的形状体积内生成的粒子: |
Emitter Size | 粒子的大小。字段的数量(无论是半径或边界尺寸)取决于选择 形状。 |
Particles Type |
|
Sequence Order |
粒子系统的渲染顺序,尤其是在创建像射击这样的复杂效果时(带有枪口闪光、烟雾和射击本身,每个效果都使用不同的粒子系统渲染)。 此参数与材质设置中的 渲染顺序 选项非常相似。 但它允许在粒子系统层次结构内部设置渲染序列,以避免将远处镜头的烟雾渲染在前景镜头的火焰之上时出现这种情况。
|
Emitter Shift | 启用这个复选框使发射器产生粒子只有当粒子系统是移动。 |
Emitter Continuous | 使连续粒子发射器的转变。 |
Texture Atlas |
启用这个特性使得如下:反照率的随机图像纹理 |
Texture Atlas Size | 大小的纹理地图集。 |
Random Flip X |
翻转随机发射粒子的水平(沿着X轴)。
|
Random Flip Y |
垂直翻转的随机发射粒子(沿着Y轴)。
|
Warming On Start | 使用先前活动的幻象打开和关闭粒子系统初始化。 粒子系统会随着时间的推移而进化,所以在虚拟世界中遇到它之后,系统才会开始逐个粒子地生成,直到整个系统获得预期的外观。 当角色出现在林间空地时,我们会看到火逐渐燃烧。 粒子的热启动可以立即渲染成熟的粒子系统。 热启动的技术实现如下:当粒子系统在相遇时初始化时,其寿命是从第一个粒子的产生到其消失计算的。 之后,粒子系统被视为进化并以这种状态渲染。 计算以 25 fps 的固定帧速率进行,这是正确模拟粒子系统所需的最低速率(另请参阅有关帧速率之间的相关性)。 启用热启动不会对任何粒子系统(大型粒子系统除外)产生任何不利影响。 |
Max Warming Time (Sec) | 粒子系统的最大时间热身。 |
Spawn Rate | 每秒的产卵行为。 的值定义了多少次 特定数量的粒子将在一秒钟了强。例如,值设置为 = 5每秒产生行动。 0 导致任何粒子。 |
Number Per Spawn | 粒子数,同时催生了每次根据Spawn Rate。 |
Spawn Threshold |
阈值的粒子数取决于父粒子的速度。 阈值random发射器的功能只有一个粒子系统作为一个父节点。
|
Limit Per Spawn | 每次生成的最大粒子总数。 该参数指定世界上可以同时存在的粒子数量。 也就是说,世界上存在的粒子数量不能超过极限值。 例如,如果每个生成的数量值为10,并且每个生成的限制 值为 5,将发射 5 个粒子。 在先前的粒子存在之前,不会生成任何粒子。 |
Life Time (Sec) | 粒子发射后存在的时间,以秒为单位。该参数还有一个Spread值,用于创建Life Time值的变化,以秒为单位。 |
Delay | T该选项定义了父系统初始化和子节点初始化之间传递的时间。 如果设置了任何延迟,则父系统开始发射粒子,延迟后,激活子粒子的生成。 如果粒子系统没有子级,则延迟定义粒子发射后的时间。 此参数还具有 Spread 值,该值创建粒子初始化的延迟时间(以秒为单位)。 |
Period | 一代之间的停顿时间周期,以秒计。
这个参数也有Spread价值创造的各种周期值,以秒计。 |
Duration |
代时间周期,在发射时,以秒计。
这个参数也有Spread价值,这个值创造了多种的时间价值,以秒计。 |
Spread (+/-) | 分布选项引入了额外的相应的调制参数。它代表值的范围,可以随意增加或减少从指定的参数值。 |
行为后排放#
这组参数定义了粒子发射后:
值设置选项#
大多数参数在这一节中有多个选项,设置一个值:
- Const 值是精确的和不变。
- Between Const 间隔设置,选择一个随机值为每个实例。
- Curve 参数值的变化随着时间的推移,根据中定义的曲线曲线编辑器
- Between Curve 有两条曲线设定曲线编辑器
选择所需的值类型,使用装置按钮。
Depth Sort | 深度排序是必需的,如果粒子使用α混合(除了添加剂)。如果未启用,那么基于深度缓冲数据,不透明的物体定位远可以错误地呈现在面前的透明粒子。随深度排序、几何呈现的顺序从后往前 ,这排除了视觉工件。 | ||||
---|---|---|---|---|---|
Emitter Based | 启用这个选项使粒子运动以及排放国。 | ||||
Position | 粒子的位置坐标相对于发射极沿着X , Y Z 和 轴。 | ||||
Gravity |
重力影响粒子沿着X , Y Z 和 轴。
粒子系统节点的旋转不影响重力向量。 |
||||
Direction | 方向所有发射粒子运动形成一个流,沿着指定 X , Y Z 和 轴。 | ||||
Velocity | 粒子运动的速度方向设置 | ||||
Linear Damping | 粒子线 速度随时间的减少。这个参数是用来模拟摩擦介质的粒子的影响。 | ||||
Angle | 在空间粒子取向角,度。 |
||||
Rotation Speed | 粒子的角速度度每秒。
|
||||
Radius | 半径(半尺寸)的粒子。 | ||||
Increase In Radius | 增量的大小的粒子,在单位每秒。
|
||||
Screen Size Mode |
用于粒子的屏幕尺寸模式。 此模式定义发射粒子的最大和最小尺寸是否应相对于屏幕尺寸进行限制(例如,为了避免 如果雪花或雨滴离相机太近,或者随着与相机的距离增加而变得不可见,就会遮挡视图)。 三种模式可供选择:
|
||||
Screen Min Size |
最低屏幕上粒子的大小,为限制单个粒子可以占领最低的部分:
|
||||
Screen Max Size |
最大屏幕上粒子的大小,为限制单个粒子可以占领最大的部分:
|
||||
Length Stretch | 粒子广告牌的拉伸,可用于Length Particles。 当值为0时,长度粒子只是一个方形的广告牌。 增加该值会沿粒子的运动方向拉伸粒子。 结果是通过将拉伸值乘以粒子速度值来计算的。 因此,速度越高,粒子在其运动方向上拉伸得越多,而另一侧保持相同的宽度。
|
||||
Length Flattening | 使 长度粒子 不像通常的广告牌粒子那样面向相机,而是更垂直于 Z 轴。 值为0时,粒子不会被压平。 最大值为1时,粒子在发射时将是平坦的(垂直于Z轴)。
|
交互#
粒子的相互作用仅限于施加力以及与外部物体的碰撞。 有两种方法可以检测与外部对象的碰撞:使用 Physics Intersection 参数或 碰撞参数。
Physical Mask | 为了使粒子系统与物理节点进行更具选择性的交互,使用physical位掩码 。 该位掩码是为粒子系统和力设置的。 这些掩码应该至少有一位匹配,否则不会有交互。 遮罩的其他部分可以匹配其他力的遮罩,从而提供对场景集成的完美控制。 |
---|---|
Particles Field Mask | 位元遮罩与Particles Field交互节点(Deflectors和Spacers)。发射粒子会受到一个Particles Field只有它们的位掩码匹配(至少一位)。 |
Physical Mass |
参与现场动态,在公斤粒子应该有一定的质量。这个值定义的影响强度 物理节点上的粒子流。 Physical Mass参数不会影响其他计算。
|
Restitution |
粒子反射障碍的力量。这个选项非常方便模拟一些水的影响,包括溅。力量反弹的效果取决于粒子的返还参数和的值restitution表面碰撞对象的参数集(Properties -> Parameters -> Restitution)或restitution Particles Deflector的价值。
|
Roughness |
粗糙表面的粒子碰撞的一个障碍。它决定了粒子分散在不同的方向或反应均匀定向流动。
|
Collision |
启用粒子整个形状的碰撞检测。 碰撞检测到匹配collision位掩码。 |
Physics Intersection |
能够检测与粒子的物理交叉点。 例如,物理相交可用于检测生成的粒子与物理形状和物体或静态对撞机表面的碰撞,以确保正确的交互,或者作为检测模拟地面车辆的光线投射轮碰撞的快速方法,或者检查 如果可破坏的物体或玩家被射弹击中。 物理交叉检测匹配Physics Intersection位掩码。 |
Destroy In Collision/Intersection | 切换开关剔除的粒子,已经经历了碰撞或十字路口。 |
纹理渲染#
粒子可以渲染为程序纹理,以供 正交贴花 或 字段高度。 例如,此功能可用于创建船舶尾流效果或油溅效果。
以下设置:
Rendering | 使粒子渲染程序结构。 |
---|---|
Positioning |
定义了定位模式用于子节点使用过程纹理(贴花或字段),粒子系统的呈现。可用以下值:
仅当Procedural Parenting设置为Children时生效。 |
Parenting |
定义了粒子系统和Decal / Field节点之间的关系,该节点使用粒子系统渲染到的过程纹理:
|
Resolution |
指定分辨率的程序结构,粒子渲染。
|
额外的生理效应#
更复杂的变化进一步运动粒子可能通过应用执行额外的生理效应。它们影响了粒子流的方向或相反的转移。三个一般类型的影响可以:
没有限制数量的额外的生理效应应用于一个粒子系统,它们可以自由地重叠,使构成复杂轨迹容易和快速。
力#
您可以对球形体积内的粒子施加物理力,以影响它们的运动和行为。为此,只需添加Physical Force节点,调整必要的设置并设置Physical Mask以选择性地启用交互。
噪音#
您可以应用物理噪声,并在长方体体积内添加基于体积噪声纹理的分布流。为此,只需添加Physical Noise节点,调整必要的设置并设置 Physical Mask 以选择性地启用交互。
导向板#
有时需要为粒子设置障碍物,使它们通过弹跳或沿着某个表面滑动来改变轨迹。 为此,您可以使用 Particles Deflector 节点,这是一个没有视觉表示的表面场,但与粒子系统进行物理交互,而其他对象不受影响。 您可以通过Particles Field蒙版控制粒子和偏转器之间的交互:如果偏转器与粒子系统生成的粒子都具有匹配的Particles Field蒙版(至少一个比特)。
关于Particles Deflector的更多信息,请参阅本文。
粒子节点层次结构#
创建复杂的影响,有必要对所有粒子系统的同步。设置一个粒子系统作为一个家长节点下面的结果:
- 所有作为子节点的粒子系统都相对于其父粒子系统同步。 如果子系统有自己的子系统,它们仍然与层次结构中最高的主父系统同步。
- 创建新的子粒子系统时,应通过禁用然后再次启用父发射器(Node 选项卡 → Enabled框)。 此时,每个子系统都用其发射器参数进行初始化(例如生成持续时间、生成暂停的时期和初始化的延迟)。
- 禁用或启用父发射器(Node选项卡 → Enabled框)会影响所有子发射器 粒子系统:它们同步停止或开始发射粒子(发射的粒子仍然有效)。
- 禁用或启用父节点(Node选项卡 → Enabled框)也会影响所有子节点:层次结构中的所有粒子系统都被关闭和打开,并保持与禁用时相同的状态。
同步多个粒子系统#
同步几个粒子系统,例如,创建一个拍摄效果(有三个粒子系统:枪口flash,烟雾和子弹),你可以做以下几点:
-
创建父粒子系统,将被用作一个假,纯粹用于同步(你甚至可以禁用它的表面)。Duration设置中的时间间隔应该涵盖子粒子系统的所有持续间隔和延迟间隔(如果有的话)。其他参数(Spawn Rate 等)并不重要。
-
添加子粒子系统。它们可以有时间所需的时间(但应该小于父之一)。例如,同步所有子粒子系统,只产生一个粒子,可以设置如下:
- Duration = 0
- Limit Per Spawn = 1
- Spawn Rate = inf/100000
优化仿真#
更新每一帧一个巨大数量的对象位于远离摄像机很难区分或观察作为一个质量是一种资源浪费。
为了提高性能和避免过度的负载,粒子系统模拟可以使用减少的帧数集进行更新。当粒子系统超出Update Distance Limit指定的区域时,粒子停止更新并静态冻结。
下面给出的组帧速率使您能够指定粒子模拟频率应该更新粒子系统是可见的,当仅能看到它的影子,或者当它是不可见的。
启用这个特性与默认设置确保最佳性能,可以调整逐对象式UnigineEditor或在运行时通过API。
例如,如果您的项目包含不可见的粒子系统(例如,使用 Viewport mask)以及附加到其的一些逻辑 更新(例如,在与对象碰撞时生成一些可见粒子)此逻辑将不起作用,因为粒子系统可能会以降低的速率更新,或者可能根本不更新。 要启用更新此类对象(无论其可见性如何),您可以将Update Distance Limit及其相应的更新速率值设置为infinity。
基于网格粒子#
可以创建基于网格粒子系统。为此,Mesh Cluster应该添加一个子节点的粒子系统(ObjectParticles)。在那之后,网格是由发射器自动产生的。