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(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 枚举的大小。
属性说明
烘焙粒子碰撞 SDF 时要考虑的可视层。只有其 VisualInstance3D.layers 与该 bake_mask 匹配的 MeshInstance3D,才会被包含在生成的粒子碰撞 SDF 中。默认情况下,粒子碰撞 SDF 烘焙会考虑所有对象。
Resolution resolution = 2
🔗
void set_resolution(value: Resolution)
Resolution get_resolution()
用于有符号距离场 texture 的烘焙分辨率。必须再次烘焙纹理,才能使 resolution 属性的更改生效。更高的分辨率具有更高的性能成本,并且需要更多的时间来烘焙。更高的分辨率还会产生更大的烘焙纹理,从而增加 VRAM 和存储的空间需求。要提高性能并减少烘焙时间,请为表示碰撞的对象使用尽可能低的分辨率。
Vector3 size = Vector3(2, 2, 2)
🔗
碰撞 SDF 的大小,单位为 3D 单位。为了提高 SDF 质量,应在能覆盖需要的场景部分的同时,将 size 设置得尽可能小。
代表有符号距离场的 3D 纹理。
碰撞形状的厚度。与其他粒子碰撞器不同,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
指定。