ParticleColliderHeightFieldGPU¶
继承: ParticleColliderGPUBase < VisualRender < Item3D < Item < Object
实时高度图形状的3D粒子碰撞形状影响ParticlesGPU节点。
描述¶
实时高度图形状的3D粒子碰撞形状影响ParticlesGPU节点。
高度图形状允许有效地表示具有单个“地板”(如地形)的凸凹物体的碰撞。这不如ParticleColliderSDFGPU灵活,但不需要烘烤步骤。
ParticleColliderHeightFieldGPU也可以在移动时、摄像机移动时、甚至连续时实时再生,这使得ParticleColliderHeightFieldGPU成为雨雪等天气效果和具有高度动态几何形状的应用的不错选择,但由于高度图不能表示悬垂(例如室内或洞穴),因此此类受到限制。
注意:ParticleProcessMaterial.collision_mode必须是true上的ParticlesGPU的处理材质碰撞才能工作。
注意:粒子碰撞只影响ParticlesGPU,不影响ParticlesCPU。
属性¶
|
||
|
||
|
||
|
||
|
方法¶
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_enabled为true,则在摄像机移动时更新高度图。可以通过向任何方向稍微移动ParticleColliderHeightFieldGPU或调用RenderingServer.particles_collision_height_field_update()来强制更新。
UpdateMode UPDATE_MODE_ALWAYS = 1
每帧更新高度图。这有很大的性能成本。此更新应仅在运行时粒子可能发生碰撞并发生重大变化时使用。
属性说明¶
bool follow_camera_enabled = false 🔗
如果true,则ParticleColliderHeightFieldGPU将跟随全局空间中的当前摄像机。ParticleColliderHeightFieldGPU不需要是Camera节点的子节点即可工作。
跟随摄像机有性能成本,因为它会强制高度图在摄像机移动时更新。如果follow_camera_enabled为true,请考虑降低resolution以提高性能。
int heightfield_mask = 1048575 🔗
更新高度图时要考虑的可视图层。只有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 🔗
void set_resolution(value: Resolution)
Resolution get_resolution()
更高的分辨率可以在大场景中更准确地表示小细节,代价是性能更低,如果update_mode是UPDATE_MODE_ALWAYS,考虑使用尽可能低的分辨率。
Vector3 size = Vector3(2, 2, 2) 🔗
碰撞高度图的尺寸以3D为单位。为了提高高度图质量,size应设置得尽可能小,同时覆盖您需要的场景部分。
UpdateMode update_mode = 0 🔗
void set_update_mode(value: UpdateMode)
UpdateMode get_update_mode()
用于生成高度图的更新策略。
方法说明¶
bool get_heightfield_mask_value(layer_number: int) const 🔗
如果heightfield_mask的指定层已启用,则返回true,给定1和20之间的layer_number,包括。
void set_heightfield_mask_value(layer_number: int, value: bool) 🔗
基于value,启用或禁用heightfield_mask中的指定层,给定1和20之间的layer_number,包括。