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.

GPUParticlesCollisionSDF3D

繼承: GPUParticlesCollision3D < VisualInstance3D < Node3D < Node < Object

烘焙的有符號距離場 3D 粒子吸引器,影響 GPUParticles3D 節點。

說明

烘焙的有符號距離場 3D 粒子吸引器,影響 GPUParticles3D 節點。

有符號的距離場(SDF)允許有效地表示任何形狀的凸面和凹面物件的近似碰撞形狀。它比 GPUParticlesCollisionHeightField3D 更靈活,但需要一個烘焙步驟。

烘焙:可以通過在編輯器中選擇 GPUParticlesCollisionSDF3D 節點,然後點擊 3D 視口頂部的烘焙 SDF,來烘焙有符號的距離場紋理。size 內的任何可見 MeshInstance3D,無論它們的 GeometryInstance3D.gi_mode 如何,都將被考慮用於烘焙。

注意:烘焙 GPUParticlesCollisionSDF3Dtexture 只能在編輯器中進行,因為沒有公開的烘焙方法可用於匯出的遊戲專案中。但是,在匯出的遊戲項目中,仍然可以將預先烘焙的 Texture3D 載入到 texture 屬性中。

注意:GPUParticles3D 的處理材質上,ParticleProcessMaterial.collision_mode 必須是 ParticleProcessMaterial.COLLISION_RIGIDParticleProcessMaterial.COLLISION_HIDE_ON_CONTACT,才能使碰撞生效。

注意:粒子碰撞只影響 GPUParticles3D,不影響 CPUParticles3D

屬性

int

bake_mask

4294967295

Resolution

resolution

2

Vector3

size

Vector3(2, 2, 2)

Texture3D

texture

float

thickness

1.0

方法

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 時要考慮的可視層。只有其 VisualInstance3D.layers 與該 bake_mask 配對的 MeshInstance3D,才會被包含在生成的粒子碰撞 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()

碰撞形狀的厚度。與其他粒子碰撞器不同,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 指定。