粒子系统(3D)
本教程的本节介绍了(3D) GPU 加速的粒子系统。这里讨论的大部分内容同样适用于 CPU 粒子。
前言
你可以使用粒子系统来模拟复杂的物理效果,如火焰、火花、烟雾、魔法效果等等。它们非常适用于创建动态而有机的行为,并为你的场景增加”生命”。
这个想法是,以固定的间隔发射具有固定的寿命的“粒子”。在其生命周期中,每个粒子都具有相同的基本行为。让每个粒子变得不同并提供整体更加 “有机” 外观的是你可以添加到大多数参数和行为中的“随机性”。
在Godot中,你创建的每个粒子系统由两个主要部分组成:粒子和发射器。
Particles
粒子是粒子系统中可见的部分。当粒子系统处于活动状态时,它就是你在屏幕上看到的东西:微小的尘埃、火焰的火苗、魔法效果的发光球体。在一个单独的系统中,你可以拥有从几百个到成千上万个粒子。你可以随机设置粒子的大小、速度和运动方向,并在其生命周期内改变其颜色。当你想到一堆火时,可以将所有从中飞出的小火星视为独立的粒子。
发射器
发射器产生粒子。发射器通常是不可见的,但它们可以有一个形状。该形状控制粒子的生成位置和方式,例如它们是否应该像尘土一样填满房间,还是像喷泉一样从一个点射出。回到火的例子,发射器就相当于火焰中心的炽热,产生了烟尘和火焰。
节点总览
在 Godot 中有两种类型的三维粒子系统:在 GPU 上进行处理的 GPUParticles3D,以及在 CPU 上进行处理的 CPUParticles3D。
CPU 粒子系统相对于 GPU 粒子系统来说不够灵活,但它们适用于更广泛的硬件,并可为旧设备和手机提供更好的支持。由于它们在 CPU 上进行处理,因此性能上不如 GPU 粒子系统,并且无法渲染出尽可能多的单个粒子。此外,CPU 粒子系统目前不具备 GPU 粒子控制的所有可用选项。
GPU粒子系统在GPU上运行,并且可以在现代硬件上渲染成十几万个粒子。你可以为其编写自定义粒子着色器,使其非常灵活。还可以通过使用吸引子节点和碰撞节点,使它们与环境进行交互。
有三种粒子吸引器节点:GPUParticlesAttractorBox3D、GPUParticlesAttractorSphere3D 和 GPUParticlesAttractorVectorField3D。吸引器节点对其作用范围内的所有粒子施加力,并根据该力的方向使它们靠近或远离。
有几种粒子碰撞节点。GPUParticlesCollisionBox3D 和 GPUParticlesCollisionSphere3D 是较简单的节点。你可以使用它们来创建基本形状,如盒子、地板或墙壁,以便粒子与其碰撞。另外两个节点提供了更复杂的碰撞行为。当你希望室内场景与粒子发生碰撞,无需手动创建所有单独的盒子和球体碰撞器时,GPUParticlesCollisionSDF3D 非常有用。如果你希望粒子与大型室外场景发生碰撞,可以使用 GPUParticlesCollisionHeightField3D 节点。它会创建一个包含世界和其中对象的高度图,并将其用于大规模粒子碰撞。