Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
GPUParticlesCollisionHeightField3D
继承: GPUParticlesCollision3D < VisualInstance3D < Node3D < Node < Object
影响 GPUParticles3D 节点的实时高度图形状 3D 粒子碰撞形状。
描述
影响 GPUParticles3D 节点的实时高度图形状的 3D 粒子碰撞形状。
高度图形状允许有效地表示凸面和凹面对象与单个“地板”(例如地形)的碰撞。它不如 GPUParticlesCollisionSDF3D 灵活,但不需要烘焙步骤。
也可以在移动时、相机移动时、甚至连续时,实时重新生成 GPUParticlesCollisionHeightField3D。这对雨雪等天气效果、以及具有高度动态几何体的游戏来说,GPUParticlesCollisionHeightField3D 是一个不错的选择。但是,该类有限制,因为高度图无法表示悬垂(例如室内或洞穴)。
注意:在 GPUParticles3D 的处理材质上,ParticleProcessMaterial.collision_mode 必须为 true
,才能使碰撞生效。
注意:粒子碰撞只影响 GPUParticles3D,不影响 CPUParticles3D。
属性
|
||
|
||
|
||
|
||
|
方法
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
仅在 GPUParticlesCollisionHeightField3D 节点移动时,或者当 follow_camera_enabled 为 true
且相机移动时,更新高度图。可以通过向任意方向稍微移动 GPUParticlesCollisionHeightField3D 或者调用 RenderingServer.particles_collision_height_field_update() 来强制更新。
UpdateMode UPDATE_MODE_ALWAYS = 1
每帧更新高度图。这具有显著的性能成本。只有当粒子可以碰撞的几何体在游戏过程中发生显著变化时,才应使用该更新选项。
属性说明
bool follow_camera_enabled = false
🔗
如果为 true
,则 GPUParticlesCollisionHeightField3D 将在全局空间中跟随当前相机。GPUParticlesCollisionHeightField3D 不需要是该 Camera3D 节点的子节点也能工作。
跟随相机会有性能成本,因为它会在相机移动时强制更新高度图。如果 follow_camera_enabled 为 true
,请考虑降低 resolution 以提高性能。
int heightfield_mask = 1048575
🔗
更新高度图时要考虑的可视层。高度图碰撞更新中只会包含 VisualInstance3D.layers 与 heightfield_mask 匹配的 MeshInstance3D。默认情况下,更新高度图碰撞时会考虑全部 20 个用户可见层。
注意:由于 heightfield_mask 总共能够存储 32 个层,还有 12 个层是仅限引擎内部使用的,未在编辑器中暴露。通过脚本设置 heightfield_mask 就可以开关这些保留的层,适用于编辑器插件。
脚本中可以使用 get_heightfield_mask_value() 和 set_heightfield_mask_value() 更方便地调整 heightfield_mask。
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
,给定的 layer_number
在 1
到 20
之间,包括端点。
void set_heightfield_mask_value(layer_number: int, value: bool) 🔗
根据 value
启用或禁用 heightfield_mask 中的指定层,给定的 layer_number
在 1
到 20
之间,包括端点。