GPUParticlesCollisionSDF3D
繼承: GPUParticlesCollision3D < VisualInstance3D < Node3D < Node < Object
烘焙的有符號距離場 3D 粒子吸引器,影響 GPUParticles3D 節點。
說明
烘焙的有符號距離場 3D 粒子吸引器,影響 GPUParticles3D 節點。
有符號的距離場(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 指定。