Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

处理材质属性

ParticleProcessMaterial 设置

最小、最大和曲线属性

在这个材质中的属性控制粒子在其生命周期中的行为和变化。它们中的许多拥 MinMaxCurve 值,允许你对其行为进行微调。这些值之间的关系是:当一个粒子被生成时,属性会被设置为 MinMax 之间的一个随机值。如果 MinMax 是相同的,那么每个粒子的值将始终是相同的。如果也设置了 Curve ,属性的值将会乘以粒子生命周期当前点上曲线的值。使用曲线来改变粒子生命周期中的属性。这种方式可以表达非常复杂的行为。

备注

This page covers how to use ParticleProcessMaterial for 3D scenes specifically. For information on how to use it in a 2D Scene see ParticleProcessMaterial 2D Usage.

时间

Lifetime Randomness 属性控制应用于每个粒子生命周期的随机性程度。值为 0 表示完全没有随机性,由 Lifetime 属性设置的所有粒子的存活时间相同。值为 1 表示粒子的生命周期在 [0.0, Lifetime] 范围内完全随机。

粒子标志

Align Y 属性将每个粒子的 Y 轴与其速度对齐。 启用该属性与将 Transform Align 属性设置为 Y to Velocity 相同。

Rotate Y 属性与 AngleAngular Velocity 组中的属性配合使用,以控制粒子旋转。如果要对粒子应用任何旋转,则必须启用 Rotate Y。例外情况是使用 Standard Material 的任何粒子,其中 Billboard 属性设置为 Particle Billboard。在这种情况下,即使没有启用 Rotate Y,粒子也会旋转。

当启用 Disable Z 属性时,粒子将不会沿 Z 轴移动。将使用局部 Z 轴还是世界 Z 轴由 局部坐标 属性确定。

Daming as Friction 属性将阻尼行为从恒定减速度更改为基于速度的减速度。

生成

发射形状

粒子可以从空间中的单个点发射,也可以以填充形状的方式发射。Shape 属性控制该形状。Point 是默认值。所有粒子均从粒子系统中心的单个点发射。当设置为 SphereBox 时,粒子以均匀填充球体或盒子形状的方式发射。你可以完全控制这些形状的大小。Sphere Surface 的工作方式与 Sphere 类似,但所有粒子都在球体表面生成,而不是填充它。

简单粒子发射形状

从点(左)、球体(中)和盒子(右)发射的粒子

环形粒子系统

一个环形粒子系统

Ring 发射形状使粒子以环形发射。你可以通过更改 Ring Axis 属性来控制环的方向。Ring Height 控制环沿其轴线的厚度。Ring RadiusRing Inner Radius 控制环的宽度以及中间的孔应有多大。该图像显示了一个半径为 2 、内半径为 1.5 的粒子系统,粒子轴指向沿全局 Z 轴。

除了这些相对简单的形状之外,你还可以选择 Points (点)或 Directed Points (定向点)选项来创建高度复杂的发射形状。有关如何设置这些形状的详细说明,请参阅《复杂的发射形状》部分。

角度(Angle)

Angle 属性控制粒子的起始旋转, 如上所述 。要让此属性对粒子产生实际效果,你必须启用以下两个属性之一:Rotate Y 使粒子围绕粒子系统的 Y 轴旋转。在 标准材质 中的 Billboard 属性,如果设置为 Particle Billboard ,则使粒子围绕从粒子指向相机的轴旋转。

方向

备注

Direction 属性本身不足以看到任何粒子移动。你在这里设置的任何值,只有在设置了速度或加速度属性后才会生效。

Direction 属性是一个向量,控制每个粒子在生成时的移动方向。一个值为 (X=1,Y=0,Z=0) 将使所有粒子沿着 X 轴侧向移动。对于像喷泉这样的粒子向上射出的效果,一个值为 (X=0,Y=1,Z=0) 会是一个好的起点。

粒子方向的不同值

不同的方向值:仅 Y 轴(左侧),X 和 Y 的值相等(中间),启用重力的 X 和 Y(右侧)

在设置了方向后,你会注意到所有粒子都沿着同一方向直线移动。Spread 属性为每个粒子的方向添加了一些变化和随机性。值越高,偏离原始路径的程度就越强。0 的值意味着根本没有扩散,而 180 的值使粒子向每个方向射出。你可以用这个效果来模拟像爆炸效果中的碎片那样的场景。

粒子扩散的不同参数

无展开(左)、45 度角(中)、全 180 度(右)

Flatness 属性限制了沿 Y 轴的扩散。0 的值表示没有限制,1 的值将消除沿 Y 轴的所有粒子移动。粒子将完全“水平”的地展开。

你只有在为下面的速度和加速度属性设置了一些值之后,才会看到任何实际的移动,所以让我们接下来看看这些属性。

初始速度

虽然 Direction 属性控制粒子的移动方向,Initial Velocity 则控制其移动速度。它分为 Velocity MinVelocity Max ,两者默认均设置为 0 ,这就是你最初看不到任何移动的原因。一旦你为这些属性中的任何一个设置了值 如上所述,粒子就开始移动了。方向会被这些值乘以,因此,通过设置负速度,你可以使粒子向相反方向移动。

加速度

重力(Gravity)

接下来的几个属性分组紧密协作,控制粒子的运动和旋转。Gravity 将粒子向其所指的方向拉动,默认情况下是直接向下,强度等于地球的重力。重力影响所有粒子的运动。如果你的游戏使用物理,并且世界的重力可以在运行时更改,你可以使用这个属性来保持游戏的重力与粒子重力同步。如果未设置其他运动属性,Gravity(X=0,Y=0,Z=0) 意味着没有粒子将永远移动。

粒子重力的不同参数

左:(X=0,Y=-9.8,Z=0),中间:(X=0,Y=9.8,Z=0),右:(X=4,Y=2,Z=0)。

角速度

Angular Velocity 控制粒子的旋转速度,如上文所述 。你可以通过使用 Velocity MinVelocity Max 的负数值来反转方向。像 Angle 属性一样,只有当设置了 Rotate Y 位标记或在 Standard Material 中选择了 Particle Billboard 模式时,旋转才会可见。

备注

Damping 属性对角速度没有影响。

线性加速度

粒子的速度是一个恒定值:一旦设置,它就不会改变,粒子将始终以相同的速度移动。你可以使用 Linear Accel 属性来改变粒子生命周期中的移动速度, 如上文所述 。正值将加快粒子速度,使其移动得更快。负值将减慢其速度,直至停止并开始向反方向移动。

粒子线性加速度的不同参数

负值(上)和正值(下)的线性加速度

我们必须牢记,当我们改变加速度时,我们并不是直接改变速度,我们改变的是速度的 变化 。加速度曲线上的 0 值并不会停止粒子的运动,它会停止粒子运动的变化。在那一刻,无论它的速度是多少,它将保持那个速度继续移动,直到加速度再次改变。

径向加速度

Radial Accel 属性为所有粒子添加了类似重力的力,该力的起源位于粒子系统当前位置。负值使粒子向中心移动,就像行星对其轨道上物体的重力一样。正值使粒子远离中心。

粒子径向加速度的不同数值

负值(左)和正值(右)的径向加速度

切向加速度

圆上的切线

圆上的切线

这个属性在粒子系统XZ平面上的圆的切线方向上添加了粒子加速度,该圆的原点位于粒子系统的中心,半径是每个粒子当前位置与系统中心的距离投影到该平面上。

让我们解压它。

圆的切线是与圆 “接触 ”的直线,在接触点与圆的半径成直角。粒子系统XZ平面上的圆是你从上方直接向下看粒子系统时所看到的圆。

从上方观察切向加速度

从上方观察切向加速度

Tangential Accel 始终限制在该平面内,并且不会沿系统的Y轴移动粒子。一个粒子的位置足以定义这样一个圆,如果我们忽略向量的Y分量,到系统中心的距离就是半径。

Tangential Accel 属性将使粒子围绕粒子系统的中心轨道运动,但半径会不断增加。从上方看,粒子将从中心向外螺旋移动。负值会反转方向。

阻尼(Damping)

Damping 属性逐渐停止所有运动。每一帧,粒子的运动都会稍微减慢,除非总加速度大于阻尼效果。如果不是,粒子将继续减速直到完全不动。值越大,将粒子完全停止所需的时间就越少。

吸引器相互作用

如果你想让粒子系统与 particle attractors 互动,你必须勾选 Enabled 属性。当它被禁用时,粒子系统会忽略所有的粒子吸引器。

显示

缩放(Scale)

如上文所述Scale 控制粒子的大小。你可以为 Scale MinScale Max 设置不同的值,以随机化每个粒子的大小。不允许负值,所以你无法用这个属性翻转粒子。如果你将粒子作为公告板发射,你的绘制阶段中的 Standard MaterialKeep Size 属性必须启用,缩放才能生效。

Color

Color 属性控制粒子的初始颜色。只有在 Standard MaterialVertex Color 组中的 Use As Albedo 属性启用后,这个属性才会生效。这个属性与来自粒子材质自己的 ColorTexture 属性的颜色相乘。

粒子颜色渐变

设置颜色渐变

Color 组中有两个 Ramp 属性。这些允许你定义一系列颜色,用于设置粒子的颜色。Color Ramp 属性在粒子的生命周期内改变粒子的颜色。它会遍历你所定义的所有颜色范围。Color Initial Ramp 属性从颜色坡道上的随机位置选择粒子的初始颜色。

要设置颜色坡道,点击属性名旁边的框,从下拉菜单选择 New GradientTexture1D。再次点击该框以打开纹理的详细信息。找到 Gradient 属性,点击旁边的框并选择 新建 Gradient。再次点击该框,你将看到一个颜色范围。点击该范围上的任何位置插入一个新标记。你可以用鼠标移动标记,并通过右键点击删除它。当一个标记被选中时,你可以使用范围旁边的颜色选择器来改变它的颜色。

色调变化

Color 属性一样,Hue Variation 控制粒子的颜色,但是方式不同。它不是直接设置颜色值,而是通过改变颜色的色相来实现。

色相是描述色彩种类的名称,如:红色、橙色、黄色、绿色等。它无法体现颜色有多亮或有多饱和。如上文所述Hue Variation 属性控制的是可用色相的范围。

它在粒子当前颜色的基础上工作。你为 Variation MinVariation Max 设置的值控制色相在任一方向上所允许偏移的距离。将其设为较高的值会导致颜色变化更加剧烈,而较低的值则限制可用颜色为原始的最近邻颜色。

不同的色相变化值

不同的色相变化值,两次都以蓝色为基色:0.6(左)和 0.1(右)

动画

Animation 属性组控制粒子的标准材质中精灵表动画的行为。MinMaxCurve 值的工作方式如上所述

动态 sprite 画板(精灵表)是一个包含多个小图像的纹理,在栅格上对齐。这些图像按序快速播放,像翻页手书一样连续起来就能播放一个短动画。你可以用它们来制作像烟雾或火焰这样的动画粒子。以下是创建动画粒子系统的步骤:

精灵表

8x8 动画烟雾精灵表

  1. 将精灵表纹理导入引擎。如果你手头没有,你可以下载示例图像的高分辨率版本

  2. 设置具有至少一次绘制过程的粒子系统,并为该绘制过程中的网格分配一个 Standard Material

  3. 将精灵表指定给 Albedo 组中的 Texture 属性

  4. 将材质的 Billboard 属性设置为 Particle Billboard。这样就可以用材质中的 Particles Anim 分组了。

  5. H Frames 设置为精灵表中的列数,将 V Frames 设置为精灵表中的行数。

  6. 如果你希望动画持续重复,请勾选 Loop

这是标准材质的全部设置。你不会立即看到任何动画。这时就需要 Animation 属性了。Speed 属性控制精灵表动画的速度。将 Speed MinSpeed Max 都设置为 1 ,你应该能看到动画播放了。Offset 属性控制新生成的粒子动画的起始位置。默认情况下,它总是序列中的第一张图片。你可以通过改变 Offset MinOffset Max 来增加一些变化,以随机化起始位置。

动画粒子

三个不同的粒子系统使用相同的烟雾精灵表

根据精灵表包含的图像数量以及粒子的存活时间情况,你的动画可能看起来会并不流畅。粒子的存活时间、动画速度和精灵表中图像数量之间的关系是这样的:

备注

当动画速度为 1.0 时,动画将在粒子生命周期结束时,播放到序列中的最后一个图像。

\[Animation\ FPS = \frac{Number\ of\ images}{Lifetime}\]

如果你的精灵表包含 64 (8x8) 个图像,并且粒子的生命周期设置为 1 ,则动画在 64 FPS (1 秒 / 64 个图像)下将非常流畅。如果将生命周期设置为 2 ,则在 32 FPS 下仍将相当流畅。但是,如果粒子存活 8 ,则在 8 FPS 下动画将明显卡顿。为了使动画再次流畅,你需要将动画速度增加到 3 之类的速度以达到可接受的帧速率。

动画粒子寿命

不同生命周期的相同粒子系统:1 秒(左),2 秒(中),8 秒(右)

请注意,GPUParticles3D 节点的 Fixed FPS 也会影响动画播放。为了动画播放流畅,建议将其设置为 0,以便在每个渲染帧上模拟粒子。如果这个设置不适合你的用例,请将 Fixed FPS 设置为等于翻页动画使用的有效帧速率(请参阅上面的公式)。

湍流

湍流为粒子运动添加了噪声,能够创造出生动有趣的图案。勾选 Enabled 属性旁边的框就可以激活。此时会出现一些新的属性,可以用来控制运动速度、噪声图案以及对粒子系统的总体影响。你可以在粒子湍流章节找到这些属性的详细解释。

碰撞

Mode 属性控制发射器如何以及是否与粒子碰撞节点发生碰撞。将其设置为 Disabled 以禁用此粒子系统的任何碰撞。将其设置为 Hide On Contact ,粒子在碰撞时会立即消失。将其设置为 Constant ,粒子碰撞后会反弹。你会在检查器中看到两个新属性。它们控制粒子在碰撞事件期间的行为。

较高的 摩擦 值会减少沿表面的滑动。这在粒子与倾斜表面碰撞时特别有用,如果你希望它们保持在原地而不是滑到底部,比如雪花落在山上。较高的 反弹 值会使粒子在与表面碰撞时像橡胶球一样反弹。

如果启用了 Use Scale 属性,碰撞基础大小 将乘以粒子的 当前缩放 。你可以使用这个属性来确保渲染大小和碰撞大小对于随机缩放或随时间变化的粒子相匹配。

你可以在 碰撞 部分的手册中了解更多关于粒子碰撞的信息。

子发射器

子发射器模式

可用的子发射器模式

Mode 属性控制子发射器如何以及何时生成。将其设置为 Disabled ,则永远不会生成子发射器。将其设置为 Constant ,子发射器会以恒定的速率持续生成。Frequency 属性控制一秒钟内发生的次数。将模式设置为 At End ,子发射器将在父粒子生命周期结束时生成,正好在它被销毁之前。Amount At End 属性控制将生成多少个子发射器。将模式设置为 At Collision ,粒子与环境碰撞时子发射器会生成。Amount At Collision 属性控制将生成多少个子发射器。

当启用了 保持速度 属性时,新生成的子发射器一开始就具有父粒子在子发射器创建时的速度。

有关如何将子发射器添加到粒子系统的详细解释,请参见本手册中的 Sub-emitters 部分。