粒子系统(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 旁边的框,然后从下拉菜单中选择 New Particles Material

../../_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 。随机化参数的公式为:

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(粒子材质)设置

Direction

This is the base direction at which particles emit. The default is Vector3(1, 0, 0) which makes particles emit to the right. However, with the default gravity settings, particles will go straight down.

../../_images/direction1.png

For this property to be noticeable, you need an initial velocity greater than 0. Here, we set the initial velocity to 40. You'll notice that particles emit toward the right, then go down because of gravity.

../../_images/direction2.png

Spread(铺开角度)

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

../../_images/paranim3.gif

Flatness

This property is only useful for 3D particles.

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

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

Emission Mask(发射遮挡)

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

  • Solid Pixels(实心像素):粒子将从纹理的任何区域产生,透明区域除外。
../../_images/emission_mask_solid.gif
  • Border Pixels(边界像素):粒子将从纹理的外边缘产生。
../../_images/emission_mask_border.gif
  • Directed Border Pixels(定向边界像素):类似于边界像素,在遮罩中添加额外的信息,使粒子能够从边缘发射出去。请注意,想要使用它,需要设置一个 初始速度
../../_images/emission_mask_directed_border.gif

Emission Colors(自发光颜色)

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

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

../../_images/emission_shapes4.png

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

注解

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