3D 粒子吸引子

粒子吸引子

粒子吸引器是向其范围内的所有粒子施加力的节点。它们根据力的方向将粒子拉近或推开。吸引器有三种类型:GPUParticlesAttractorBox3DGPUParticlesAttractorSphere3DGPUParticlesAttractorVectorField3D。你可以在运行时实例化它们,并通过游戏代码更改它们的属性;你甚至可以为它们设置动画并将它们组合起来,以产生复杂的吸引效果。

备注

粒子吸引器还没有实现二维粒子系统。

如果要使用吸引器,你要做的第一件事就是在 ParticleProcessMaterial 上启用 Attractor Interaction 属性。对每个需要对吸引器做出反应的粒子系统执行该操作。与 Godot 中的大多数属性一样,你也可以在运行时更改它。

通用属性

通用粒子吸引器属性

通用吸引器属性

你可以在所有吸引器上找到一些属性。它们位于检查器中的 GPUParticlesAttractor3D 部分。

强度(Strength)控制吸引器的强度。正值将粒子拉近吸引器中心,而负值则将它们推开。

衰减(Attenuation)控制着吸引器影响区域内的强度衰减。每个粒子吸引器都有一个边界。它的强度在边界的边界处最弱,在中心处最强。边界外的粒子完全不受吸引器的影响。衰减曲线控制强度在这段距离上的减弱方式。直线表示强度与距离成正比:如果粒子位于边界和中心的中间,则吸引器的强度将是中心强度的一半。不同的曲线形状会改变粒子向吸引器加速的速度。

不同的吸引器衰减曲线

强度增加变化:不断超过吸引子的距离(左),快速在边界边界和缓慢在中心(中),缓慢在边界和快速在中心(右)。

Directionality 属性可改变粒子被拉动的方向。值为 0.0 时,没有方向性,这意味着粒子被拉向吸引器的中心。值为 1.0 时,吸引器是完全定向的,这意味着粒子将沿着吸引器的局部 -Z 轴被拉动。你可以通过旋转吸引器来更改全局方向。如果 Strength 为负,则粒子将沿着 +Z 轴被拉动。

不同的吸引器方向性值

无方向性(左)与全方向性(右)。注意粒子如何沿着吸引子的局部Z轴运动。

Cull Mask 属性根据每个系统的 visibility layer 控制哪些粒子系统会受到吸引器的影响。仅当在吸引器的剔除遮罩中启用了至少一个系统的可见性层时,粒子系统才会受到吸引器的影响。

警告

GPU 粒子吸引器存在一个已知问题 ,导致剔除遮罩无法在 Godot 4.0 中正常工作。我们将在修复后立即更新文档。

盒状吸引器

粒子吸引子箱

节点列表中的盒吸引器

盒状吸引器具有盒状的影响区域。你可以使用 Extents 属性控制其大小。盒子范围始终测量其边界边的一半,因此 (X=1.0,Y=1.0,Z=1.0) 值会创建一个影响区域各边宽 2 米的盒子。

要创建盒状吸引器,请将新的子节点添加到场景中,然后从可用节点列表中选择 GPUParticlesAttractorBox3D。你可以为盒子位置设置动画,或将其附加到移动的节点以获得更多动态效果。

盒状吸引器粒子场

具有负强度值的盒吸引子在粒子场运动时分割粒子场。

球状吸引器

粒子吸引子球

节点列表中的球状吸引器

球状吸引器具有球形影响区域。你可以使用 Radius 属性控制其大小。虽然盒状吸引器不必是完美的立方体,但球状吸引器始终是球体:你不能独立于高度设置宽度。如果你想将球状吸引器用于细长形状,则必须在吸引器的 Node3D 部分中更改其 Scale

要创建一个球状吸引器,请向场景添加一个新的子节点,然后从可用节点列表中选择 GPUParticlesAttractorSphere3D。你可以为动画化该球体位置,或将其附加到一个移动的节点以获得更多动态效果。

球面吸引器粒子场

具有强度值的球形吸引器在粒子场运动时分割粒子场。

向量运算

粒子吸引向量场

节点表中的向量场吸引器

向量场是包含网格上的矢量的三维区域。网格密度控制着向量的数量以及它们的分布距离。向量场中的每个向量都指向一个特定的方向。这可以是完全随机或对齐的方式,形成不同的模式和路径。

当粒子与向量场相互作用时,它们的运动方向会发生变化,以与场中最近的矢量相匹配。当粒子靠近场中的下一个向量时,它改变方向以匹配该向量的方向。粒子的速度取决于矢量的长度。

与盒状吸引器一样,向量场吸引器也具有盒状的影响区域。你可以使用 Extents 属性控制它们的大小,其中 (X=1.0,Y=1.0,Z=1.0) 的值会创建一个盒状影响区域,该区域各边宽 2 米。Texture 属性采用 3D 纹理,其中每个像素代表一个向量,像素的颜色被解释为向量的方向和大小。

备注

当纹理用作向量场时,需要注意两种类型的转换:

  1. 纹理坐标映射到吸引器边界。下图显示了纹理的哪一部分对应于向量场体积的哪一部分。例如,纹理的下半部分会影响向量场吸引器的上半部分,因为 +Y 在纹理 UV 空间中是向下的,但在 Godot 的世界空间中是向上的。

  2. 像素颜色值映射到空间中的方向向量。下图提供了一个概述。由于粒子可以沿着每个轴向两个方向移动,颜色范围的下半部分代表负方向值,而上半部代表正方向值。因此,黄色像素 (R=1,G=1,B=0) 映射到向量 (X=1,Y=1,Z=-1),而中性灰色 (R=0.5,G=0.5,B=0.5) 则不会产生任何移动。

纹理映射到向量场

要创建一个向量场吸引器,在场景中添加一个新的子节点,并从可用节点列表中选择 GPUParticlesAttractorVectorField3D。你可以动画化吸引器的位置或将它附加到一个移动节点上以获得更多的动态效果。

小技巧

如果你没有外部工具可以创建向量场纹理,可以用带有 Color Ramp 的 NoiseTexture3D 来代替。修改 Color Ramp 就可以调整每个坐标受向量场影响的程度。

粒子场中的向量场吸引器

两个粒子系统受到同一个向量场吸引器影响。点击这里下载 3D 纹理