ParticleColliderHeightFieldGPU

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

实时高度图形状的3D粒子碰撞形状影响ParticlesGPU节点。

描述

实时高度图形状的3D粒子碰撞形状影响ParticlesGPU节点。

高度图形状允许有效地表示具有单个“地板”(如地形)的凸凹物体的碰撞。这不如ParticleColliderSDFGPU灵活,但不需要烘烤步骤。

ParticleColliderHeightFieldGPU也可以在移动时、摄像机移动时、甚至连续时实时再生,这使得ParticleColliderHeightFieldGPU成为雨雪等天气效果和具有高度动态几何形状的应用的不错选择,但由于高度图不能表示悬垂(例如室内或洞穴),因此此类受到限制。

注意:ParticleProcessMaterial.collision_mode必须是true上的ParticlesGPU的处理材质碰撞才能工作。

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

属性

方法

bool

get_heightfield_mask_value(layer_number: int) const

void

set_heightfield_mask_value(layer_number: int, value: bool)


枚举

enum Resolution: 🔗

Resolution RESOLUTION_256 = 0

生成256×256高度图。适用于小规模场景,或没有远处粒子的较大场景。

Resolution RESOLUTION_512 = 1

生成512×512高度图。适用于中等规模的场景,或没有远处粒子的较大场景。

Resolution RESOLUTION_1024 = 2

生成1024×1024高度图。适用于具有遥远粒子的大场景。

Resolution RESOLUTION_2048 = 3

生成2048×2048高度图。适用于具有远处粒子的非常大的场景。

Resolution RESOLUTION_4096 = 4

生成4096×4096高度图。适用于具有遥远粒子的巨大场景。

Resolution RESOLUTION_8192 = 5

生成8192×8192高度图。适用于具有遥远粒子的巨大场景。

Resolution RESOLUTION_MAX = 6

表示Resolution枚举的大小。


enum UpdateMode: 🔗

UpdateMode UPDATE_MODE_WHEN_MOVED = 0

仅在移动ParticleColliderHeightFieldGPU节点时更新高度图,或者如果follow_camera_enabledtrue,则在摄像机移动时更新高度图。可以通过向任何方向稍微移动ParticleColliderHeightFieldGPU或调用RenderingServer.particles_collision_height_field_update()来强制更新。

UpdateMode UPDATE_MODE_ALWAYS = 1

每帧更新高度图。这有很大的性能成本。此更新应仅在运行时粒子可能发生碰撞并发生重大变化时使用。


属性说明

bool follow_camera_enabled = false 🔗

  • void set_follow_camera_enabled(value: bool)

  • bool is_follow_camera_enabled()

如果true,则ParticleColliderHeightFieldGPU将跟随全局空间中的当前摄像机。ParticleColliderHeightFieldGPU不需要是Camera节点的子节点即可工作。

跟随摄像机有性能成本,因为它会强制高度图在摄像机移动时更新。如果follow_camera_enabledtrue,请考虑降低resolution以提高性能。


int heightfield_mask = 1048575 🔗

  • void set_heightfield_mask(value: int)

  • int get_heightfield_mask()

更新高度图时要考虑的可视图层。只有VisualRender.layers与此heightfield_mask匹配的MeshRender才会包含在高度图冲突更新中。默认情况下,更新高度图冲突时会考虑所有20个用户可见图层。

注意:由于heightfield_mask允许总共存储32层,因此还有另外12层仅由引擎内部使用,不会在编辑器中公开。使用脚本设置heightfield_mask允许您切换这些保留层,这对编辑器插件很有用。

要使用脚本更容易地调整heightfield_mask,请使用get_heightfield_mask_value()set_heightfield_mask_value()


Resolution resolution = 2 🔗

更高的分辨率可以在大场景中更准确地表示小细节,代价是性能更低,如果update_modeUPDATE_MODE_ALWAYS,考虑使用尽可能低的分辨率。


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

碰撞高度图的尺寸以3D为单位。为了提高高度图质量,size应设置得尽可能小,同时覆盖您需要的场景部分。


UpdateMode update_mode = 0 🔗

用于生成高度图的更新策略。


方法说明

bool get_heightfield_mask_value(layer_number: int) const 🔗

如果heightfield_mask的指定层已启用,则返回true,给定120之间的layer_number,包括。


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

基于value,启用或禁用heightfield_mask中的指定层,给定120之间的layer_number,包括。