GPUParticlesCollisionSDF3D

继承: GPUParticlesCollision3D < VisualInstance3D < Node3D < Node < Object

影响 GPUParticles3D 节点的烘焙的带符号距离场 3D 粒子碰撞形状。

描述

影响 GPUParticles3D 节点的烘焙的带符号距离场 3D 粒子碰撞形状。

有符号的距离场(SDF)允许有效地表示任何形状的凸面和凹面对象的近似碰撞形状。它比 GPUParticlesCollisionHeightField3D 更灵活,但需要一个烘焙步骤。

烘焙:可以通过在编辑器中选择 GPUParticlesCollisionSDF3D 节点,然后点击 3D 视口顶部的烘焙 SDF,来烘焙有符号的距离场纹理。size 内的任何可见 MeshInstance3D,无论它们的 GeometryInstance3D.gi_mode 如何,都将被考虑用于烘焙。

注意:烘焙 GPUParticlesCollisionSDF3Dtexture 只能在编辑器中进行,因为没有公开的烘焙方法可用于导出的游戏项目中。但是,在导出的游戏项目中,仍然可以将预先烘焙的 Texture3D 加载到 texture 属性中。

注意:GPUParticles3D 的处理材质上,ParticleProcessMaterial.collision_mode 必须是 ParticleProcessMaterial.COLLISION_RIGIDParticleProcessMaterial.COLLISION_HIDE_ON_CONTACT,才能使碰撞生效。

注意:粒子碰撞只影响 GPUParticles3D,不影响 CPUParticles3D

属性

int

bake_mask

4294967295

Resolution

resolution

2

Vector3

size

Vector3(2, 2, 2)

Texture3D

texture

float

thickness

1.0

方法

bool

get_bake_mask_value(layer_number: int) const

void

set_bake_mask_value(layer_number: int, value: bool)


枚举

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 🔗

  • void set_bake_mask(value: int)

  • int get_bake_mask()

烘焙粒子碰撞 SDF 时要考虑的可视层。只有其 VisualInstance3D.layers 与该 bake_mask 匹配的 MeshInstance3D,才会被包含在生成的粒子碰撞 SDF 中。默认情况下,粒子碰撞 SDF 烘焙会考虑所有对象。


Resolution resolution = 2 🔗

用于有符号距离场 texture 的烘焙分辨率。必须再次烘焙纹理,才能使 resolution 属性的更改生效。更高的分辨率具有更高的性能成本,并且需要更多的时间来烘焙。更高的分辨率还会产生更大的烘焙纹理,从而增加 VRAM 和存储的空间需求。要提高性能并减少烘焙时间,请为表示碰撞的对象使用尽可能低的分辨率。


Vector3 size = Vector3(2, 2, 2) 🔗

碰撞 SDF 的大小,单位为 3D 单位。为了提高 SDF 质量,应在能覆盖需要的场景部分的同时,将 size 设置得尽可能小。


Texture3D texture 🔗

代表有符号距离场的 3D 纹理。


float thickness = 1.0 🔗

  • void set_thickness(value: float)

  • float get_thickness()

碰撞形状的厚度。与其他粒子碰撞器不同,GPUParticlesCollisionSDF3D 实际上内部是空心的。可以增加 thickness,以防止粒子在高速运动或者当 GPUParticlesCollisionSDF3D 移动时,穿过碰撞形状。


方法说明

bool get_bake_mask_value(layer_number: int) const 🔗

返回是否启用了 bake_mask 的指定层,该层由给定的一个介于 1 和 32 之间的 layer_number 指定。


void set_bake_mask_value(layer_number: int, value: bool) 🔗

基于 value,启用或禁用 bake_mask 中的指定层,该层由给定的一个介于 1 和 32 之间的 layer_number 指定。