粒子系统(2D)

简介

Godot提供了一种简单(但对于大多数用途而言足够灵活)的粒子系统. 粒子系统用于模拟复杂的物理效应, 如火花, 火焰, 魔法粒子, 烟雾, 雾气, 等.

这个想法是以固定的间隔发射具有固定的寿命的 “粒子”. 在其生命周期中, 每个粒子都具有相同的基本行为. 让每个粒子变得不同并提供整体更加 “有机” 外观的是与各个参数相关的 “随机性”. 实质上, 创建粒子系统意味着设置基本物理参数, 然后为它们添加随机性.

粒子节点

Godot 为 2D 粒子提供了两个不同的节点:Particles2DCPUParticles2D。Particles2D 更为先进,使用 GPU 处理粒子效果,但这将其限制于相对高端的图形 API 中,在我们的情况下仅限于 GLES3 渲染器。对于使用 GLES2 后端的项目,CPUParticles2D 是一个 CPU 驱动的选项。其功能与 Particles2D 接近,但性能较低。Particles2D 是通过 ParticlesMaterial(以及可选的自定义 Shader)来配置的,但相应的选项在 CPUParticles2D 中是通过节点属性提供的(轨迹设置除外)。您可以通过单击场景中的节点,然后在工具栏的“粒子”菜单中选择“转换为 CPU 粒子”,将 Particles2D 节点转换为 CPUParticles2D 节点。

../../_images/particles_convert.png

这个教程后续将使用 Particles2D 节点。首先,添加一个 Particles2D 节点到场景中。在创建该节点后,您会注意到只创建了一个白点,并且在场景面板的 Particles2D 节点旁边有一个警告图标。这是因为节点需要 ParticlesMaterial 才能工作。

ParticlesMaterial

要将运行材质添加到粒子节点,请转到检查器面板中的 Process Material。单击 Material 旁边的框,然后从下拉菜单中选择 新建 ParticlesMaterial

../../_images/particles_material.png

您的 Particles2D 节点现在应该可以向下发射白点了。

../../_images/particles1.png

Texture (纹理)

粒子系统只能使用单个纹理(将来可能会通过spritesheet扩展到动画纹理). 纹理通过相关的纹理属性设置:

../../_images/particles2.png

Time (时间)参数

Lifetime(寿命)

每个粒子存活的时间(以秒为单位). 生命周期结束时, 会创建一个新粒子来替换它.

寿命:0.5

../../_images/paranim14.gif

寿命:4.0

../../_images/paranim15.gif

One Shot (一次性)

启用后,Particles2D节点将一次性发出所有粒子, 然后再也不发射.

Preprocess(预处理)

粒子系统从没有粒子被发射开始, 然后开始发射. 当加载场景如火炬, 雾等系统时可能会带来不便, 因为它会在进入场景的那一刻开始发射. 预处理用于让系统在第一次实际绘制之前处理给定的秒数.

Speed Scale(速度比例)

速度比例具有默认值 1 , 用于调整粒子系统的速度. 降低值会使粒子变慢, 而增加值会使粒子更快.

Explosiveness(爆炸性)

如果有10个寿命为 1 的粒子, 则意味着粒子将每0.1秒发射一次. 爆炸性参数改变了这一点, 并迫使粒子一起发射. 范围是:

  • 0: 定期发射粒子(默认值).

  • 1: 同时发射所有粒子.

中间的值也是允许的. 此功能对于创建爆炸或突然爆发的粒子非常有用:

../../_images/paranim18.gif

Randomness(随机性)

所有物理参数都可以随机化. 随机值范围从 01 . 随机化参数的公式为:

  1. initial_value = param_value + param_value * randomness

Fixed FPS(固定帧率)

此设置可用于将粒子系统设置为以固定的帧率渲染. 例如, 将值更改为 2 将使粒子以每秒2帧的速度渲染. 请注意, 这不会减慢粒子系统本身的速度.

Fract Delta

这可用于打开或关闭Fract Delta.

Drawing parameters (绘图参数)

Visibility Rect(可见性区域)

可见性矩形控制粒子在屏幕上的可见性. 如果此矩形位于视区之外, 则引擎将不会在屏幕上渲染粒子.

矩形的 WH 属性分别控制其宽度和高度. XY 属性控制矩形左上角相对于粒子发射器的位置.

可以使用2D视图上方的工具栏自动生成可见性区域. 为此, 请选择Particles2D节点, 然后单击 粒子 > 生成可视化区域 . Godot将模拟Particles2D节点发射粒子几秒钟, 并将矩形区域设置为适合粒子的大小.

你可以使用 Generation Time (sec) 选项控制发射持续时间. 最大值为25秒. 如果您需要更多时间让粒子移动, 您可以暂时更改Particles2D节点上的 preprocess 时间.

Local Coords(局部坐标)

默认情况下, 此选项处于启用状态, 这意味着粒子发射的空间是相对于节点来算的. 如果移动节点, 则所有粒子会随之移动:

../../_images/paranim20.gif

如果禁用, 粒子将发射到全局空间, 这意味着如果移动节点, 则已发射的粒子不会受到影响:

../../_images/paranim21.gif

Draw Order(绘图顺序)

这可以控制绘制单个粒子的顺序. Index 表示粒子根据它们的发射顺序被绘制(默认). Lifetime 表示它们按照剩余寿命的顺序被绘制.

ParticlesMaterial(粒子材质)设置

方向

这是粒子发射的基础方向. 默认值是 Vector3(1,0,0) , 它使粒子向右发射. 然而, 在默认的重力设置下, 粒子会直线下降.

../../_images/direction1.png

为了让这个属性作用更明显, 你需要一个大于0的 初始速度(initial velocity) . 这里, 我们把初始速度设为40. 你会注意到粒子向右发射, 然后受重力作用下降.

../../_images/direction2.png

Spread(铺开角度)

此参数是以度为单位的角度, 它会被随机加减到基础 Direction 上. 180 的铺开角度将向所有方向发射(+/- 180).

../../_images/paranim3.gif

Flatness(平直度)

这个属性只对3D粒子有用.

Gravity(重力)

应用于每个粒子上的重力.

../../_images/paranim7.gif

Initial Velocity(初始速度)

初始速度是粒子发射的速度(以像素/秒为单位). 以后可以通过重力或其他加速度来修改速度(下面将进一步描述).

../../_images/paranim4.gif

Angular Velocity(角速度)

角速度是应用于粒子的初始角速度.

Spin Velocity(旋转速度)

旋转速度是粒子围绕其中心转动的速度(以度/秒为单位).

../../_images/paranim5.gif

Orbit Velocity(环绕速度)

环绕速度速度用于使粒子绕它们的中心转动.

../../_images/paranim6.gif

Linear Acceleration(线性加速度)

应用于每个粒子的线性加速度.

Radial Acceleration(径向加速度)

如果此加速度为正, 则粒子会向远离发射中心加速. 如果是负的, 他们会被加速吸进去.

../../_images/paranim8.gif

Tangential Acceleration(切向加速度)

该加速度会使用从粒子到中心点的切向量, 结合径向加速度可以做出很酷炫的效果.

../../_images/paranim9.gif

Damping(阻尼)

阻尼选项会对颗粒施加摩擦力, 迫使它们停止. 它特别适用于火花或爆炸, 火花或爆炸通常以高线速度开始, 然后在他们隐去时停下来.

../../_images/paranim10.gif

Angle(角度)

确定粒子的初始角度(以度为单位). 该参数通常在随机化后会有用.

../../_images/paranim11.gif

Scale(大小)

确定粒子的初始大小.

../../_images/paranim12.gif

颜色

用于改变发射出来的粒子颜色.

Hue Variation(色调变化)

Variation 值设置的是应用于每个粒子的初始色调变化. Variation Rand 值控制色调变化的随机性比率.

Emission Shapes(发射形状)

ParticlesMaterial 可以让你设置一个发射遮挡(Emission Mask), 它决定了粒子发射的区域和方向. 这些可以用项目中的纹理来生成.

确保设置了ParticlesMaterial, 选中Particles2D节点. 工具栏中应显示 “Particles(粒子)” 菜单:

../../_images/emission_shapes1.png

打开它, 选择”加载 Emission Mask(发射遮挡)”:

../../_images/emission_shapes2.png

然后选择你想要用作遮挡的纹理:

../../_images/emission_shapes3.png

会出现一个具有多个设置的对话框.

发射遮罩

纹理可以生成三种类型的发射遮挡:

  • Solid Pixels(实心像素): 粒子将从纹理的任何区域产生, 透明区域除外.

../../_images/emission_mask_solid.gif

  • Border Pixels(边界像素): 粒子将从纹理的外边缘产生.

../../_images/emission_mask_border.gif

  • Directed Border Pixels(定向边界像素): 类似于边界像素, 在遮罩中添加额外的信息, 使粒子能够从边缘发射出去. 请注意, 想要使用它, 需要设置一个 初始速度.

../../_images/emission_mask_directed_border.gif

发射色彩

Capture from Pixel 会使粒子在其产生点处继承遮挡材质的颜色.

一旦你点击 “确定”, 将生成遮挡并设置为粒子材质. 可以在 Emission Shape(发射形状) 部分看到它:

../../_images/emission_shapes4.png

这个部分所有提到的值, “加载Emission Mask(发射遮挡)”菜单都会自动生成, 所以通常他们放着不管就可以了.

注解

不应该直接添加图像到 Point TextureColor Texture 中. 应该始终使用”加载Emisson Mask(发射遮挡)”菜单.