ParticleColliderSDFGPU

继承: ParticleColliderGPUBase < VisualRender < Item3D < Item < Object

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

描述

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

符号距离字段(SDF)允许有效地表示任何形状的凸和凹物体的近似碰撞形状。这比ParticleColliderHeightFieldGPU更灵活,但它需要烘烤步骤。

烘焙:可以通过选择编辑器中的ParticleColliderSDFGPU节点,然后单击3D视口顶部的烘焙SDF来烘焙带符号的距离场纹理。size内的任何可见MeshRenders都将被考虑用于烘焙,而不管它们的GeometryRender.gi_mode

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

注意:ParticleProcessMaterial.collision_mode必须是ParticleProcessMaterial.COLLISION_RIGIDParticleProcessMaterial.COLLISION_HIDE_ON_CONTACTParticlesGPU的处理材质进行碰撞才能工作。

注意:粒子碰撞只影响ParticlesGPU,不影响ParticlesCPU

属性

方法

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时要考虑的视觉层。只有VisualRender.layers与此bake_mask匹配的MeshRender才会包含在生成的粒子碰撞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()

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


方法说明

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