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.
Checking the stable version of the documentation...
GPUParticlesCollisionSDF3D¶
继承: GPUParticlesCollision3D < VisualInstance3D < Node3D < Node < Object
影响 GPUParticles3D 节点的烘焙的带符号距离场 3D 粒子碰撞形状。
描述¶
影响 GPUParticles3D 节点的烘焙的带符号距离场 3D 粒子碰撞形状。
有符号的距离场(SDF)允许有效地表示任何形状的凸面和凹面对象的近似碰撞形状。它比 GPUParticlesCollisionHeightField3D 更灵活,但需要一个烘焙步骤。
烘焙:可以通过在编辑器中选择 GPUParticlesCollisionSDF3D 节点,然后点击 3D 视口顶部的烘焙 SDF,来烘焙有符号的距离场纹理。size 内的任何可见 MeshInstance3D,无论它们的 GeometryInstance3D.gi_mode 如何,都将被考虑用于烘焙。
注意:烘焙 GPUParticlesCollisionSDF3D 的 texture 只能在编辑器中进行,因为没有公开的烘焙方法可用于导出的游戏项目中。但是,在导出的游戏项目中,仍然可以将预先烘焙的 Texture3D 加载到 texture 属性中。
注意:在 GPUParticles3D 的处理材质上,ParticleProcessMaterial.collision_mode 必须是 ParticleProcessMaterial.COLLISION_RIGID 或 ParticleProcessMaterial.COLLISION_HIDE_ON_CONTACT,才能使碰撞生效。
注意:粒子碰撞只影响 GPUParticles3D,不影响 CPUParticles3D。
属性¶
|
||
|
||
|
||
|
方法¶
get_bake_mask_value ( int layer_number ) const |
|
void |
set_bake_mask_value ( int layer_number, bool value ) |
枚举¶
enum Resolution:
Resolution RESOLUTION_16 = 0
烘焙 16×16×16 的有符号距离场。这是最快的选项,但也是最不精确的。
Resolution RESOLUTION_32 = 1
烘焙 32×32×32 的有符号距离场。
Resolution RESOLUTION_64 = 2
烘焙 64×64×64 的有符号距离场。
Resolution RESOLUTION_128 = 3
烘焙 128×128×128 的有符号距离场。
Resolution RESOLUTION_256 = 4
烘焙 256×256×256 的有符号距离场。
Resolution RESOLUTION_512 = 5
烘焙 512×512×512 的有符号距离场。这是最慢的选项,但也是最精确的。
Resolution RESOLUTION_MAX = 6
代表 Resolution 枚举的大小。
属性说明¶
int bake_mask = 4294967295
烘焙粒子碰撞 SDF 时要考虑的可视层。只有其 VisualInstance3D.layers 与该 bake_mask 匹配的 MeshInstance3D,才会被包含在生成的粒子碰撞 SDF 中。默认情况下,粒子碰撞 SDF 烘焙会考虑所有对象。
Resolution resolution = 2
void set_resolution ( Resolution value )
Resolution get_resolution ( )
用于有符号距离场 texture 的烘焙分辨率。必须再次烘焙纹理,才能使 resolution 属性的更改生效。更高的分辨率具有更高的性能成本,并且需要更多的时间来烘焙。更高的分辨率还会产生更大的烘焙纹理,从而增加 VRAM 和存储的空间需求。要提高性能并减少烘焙时间,请为表示碰撞的对象使用尽可能低的分辨率。
Vector3 size = Vector3(2, 2, 2)
碰撞 SDF 的大小,单位为 3D 单位。为了提高 SDF 质量,应在能覆盖需要的场景部分的同时,将 size 设置得尽可能小。
Texture3D texture
代表有符号距离场的 3D 纹理。
float thickness = 1.0
碰撞形状的厚度。与其他粒子碰撞器不同,GPUParticlesCollisionSDF3D 实际上内部是空心的。可以增加 thickness,以防止粒子在高速运动、或者当 GPUParticlesCollisionSDF3D 移动时,穿过碰撞形状。
方法说明¶
bool get_bake_mask_value ( int layer_number ) const
返回是否启用了 bake_mask 的指定层,该层由给定的一个介于 1 和 32 之间的 layer_number
指定。
void set_bake_mask_value ( int layer_number, bool value )
基于 value
,启用或禁用 bake_mask 中的指定层,该层由给定的一个介于 1 和 32 之间的 layer_number
指定。