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.

GPUParticlesCollisionHeightField3D

Eredita: GPUParticlesCollision3D < VisualInstance3D < Node3D < Node < Object

Una forma di collisione di particelle 3D a forma di heightmap in tempo reale che influenza i nodi GPUParticles3D.

Descrizione

Una forma di collisione di particelle 3D a forma di heightmap in tempo reale che influenza i nodi GPUParticles3D.

Le forme heightmap consentono di rappresentare in modo efficiente le collisioni per oggetti convessi e concavi con un singolo "piano" (come il terreno). Questo è meno flessibile di GPUParticlesCollisionSDF3D, ma non richiede una fase di precalcolo.

GPUParticlesCollisionHeightField3D può anche essere rigenerato in tempo reale quando viene spostato, quando la telecamera si muove o persino in modo continuo. Ciò rende GPUParticlesCollisionHeightField3D una buona scelta per effetti meteorologici come pioggia e neve e giochi con geometria altamente dinamica. Tuttavia, questa classe è limitata poiché le heightmap non possono rappresentare sporgenze (ad esempio al chiuso o nelle grotte).

Nota: ParticleProcessMaterial.collision_mode deve essere true sul materiale di processo di GPUParticles3D affinché la collisione funzioni.

Nota: La collisione delle particelle influenza solo i GPUParticles3D, non i CPUParticles3D.

Proprietà

bool

follow_camera_enabled

false

int

heightfield_mask

1048575

Resolution

resolution

2

Vector3

size

Vector3(2, 2, 2)

UpdateMode

update_mode

0

Metodi

bool

get_heightfield_mask_value(layer_number: int) const

void

set_heightfield_mask_value(layer_number: int, value: bool)


Enumerazioni

enum Resolution: 🔗

Resolution RESOLUTION_256 = 0

Genera una heightmap di 256×256. Pensata per scene su piccola scala o scene più grandi senza particelle distanti.

Resolution RESOLUTION_512 = 1

Genera una heightmap di 512×512. Pensata per scene di media scala o scene più grandi senza particelle distanti.

Resolution RESOLUTION_1024 = 2

Genera una heightmap di 1024×1024. Pensata per scene di grandi dimensioni con particelle distanti.

Resolution RESOLUTION_2048 = 3

Genera una heightmap di 2048×2048. Pensata per scene molto grandi con particelle distanti.

Resolution RESOLUTION_4096 = 4

Genera una heightmap di 4096×4096. Pensata per scene enormi con particelle distanti.

Resolution RESOLUTION_8192 = 5

Genera una heightmap di 8192×8192. Pensata per scene gigantesche con particelle distanti.

Resolution RESOLUTION_MAX = 6

Rappresenta la dimensione dell'enumerazione Resolution.


enum UpdateMode: 🔗

UpdateMode UPDATE_MODE_WHEN_MOVED = 0

Aggiorna la heightmap solo quando il nodo GPUParticlesCollisionHeightField3D viene spostato, o quando la telecamera si sposta se follow_camera_enabled è true. È possibile forzare un aggiornamento spostando leggermente il GPUParticlesCollisionHeightField3D in qualsiasi direzione o chiamando RenderingServer.particles_collision_height_field_update().

UpdateMode UPDATE_MODE_ALWAYS = 1

Aggiorna la heightmap a ogni frame. Ciò ha un impatto notevole sulle prestazioni. Questo aggiornamento si dovrebbe utilizzare solo quando la geometria con cui le particelle possono collidere cambia significativamente durante il gioco.


Descrizioni delle proprietà

bool follow_camera_enabled = false 🔗

  • void set_follow_camera_enabled(value: bool)

  • bool is_follow_camera_enabled()

Se true, GPUParticlesCollisionHeightField3D seguirà la telecamera attuale nello spazio globale. GPUParticlesCollisionHeightField3D non deve essere un nodo figlio del nodo Camera3D affinché questo funzioni.

Seguire la telecamera ha un costo in termini di prestazioni, poiché costringerà la heightmap ad aggiornarsi ogni volta che la telecamera si muove. Considera di abbassare resolution per migliorare le prestazioni se follow_camera_enabled è true.


int heightfield_mask = 1048575 🔗

  • void set_heightfield_mask(value: int)

  • int get_heightfield_mask()

Gli strati visuali da considerare quando si aggiorna la heightmap. Solo i MeshInstance3D i cui VisualInstance3D.layers corrispondono a questa heightfield_mask saranno inclusi nell'aggiornamento della collisione della heightmap. Per impostazione predefinita, sono considerati tutti i 20 strati visibili all'utente per aggiornare la collisione della heightmap.

Nota: Poiché heightfield_mask consente di memorizzare 32 strati in totale, ci sono altri 12 strati che sono utilizzati solo internamente dal motore e non sono esposti nell'editor. Impostare heightfield_mask tramite uno script consente di attivare o disattivare i livelli riservati, il che può essere utile per le estensioni dell'editor.

Per regolare heightfield_mask più facilmente tramite uno script, usa get_heightfield_mask_value() e set_heightfield_mask_value().


Resolution resolution = 2 🔗

Le risoluzioni più elevate possono rappresentare piccoli dettagli in modo più accurato in scene di grandi dimensioni, a scapito delle prestazioni. Se update_mode è UPDATE_MODE_ALWAYS, considera di usare la risoluzione più bassa possibile.


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

La dimensione della heightmap di collisione in unità 3D. Per migliorare la qualità della heightmap, size dovrebbe essere impostato il più piccolo possibile, coprendo le parti della scena di cui hai bisogno.


UpdateMode update_mode = 0 🔗

Il criterio di aggiornamento da usare per la heightmap generata.


Descrizioni dei metodi

bool get_heightfield_mask_value(layer_number: int) const 🔗

Restituisce true se lo strato specificato di heightfield_mask è abilitato, dato un layer_number compreso tra 1 e 20, inclusivo.


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

In base a value, abilita o disabilita lo strato specificato in heightfield_mask, dato un layer_number compreso tra 1 e 20.