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.

Collisioni di particelle 3D

Collisioni di particelle

Poiché le particelle GPU sono elaborate interamente sulla GPU, non hanno accesso al mondo fisico del gioco. Se hai bisogno che le particelle collidano con l'ambiente, è necessario configurare dei nodi di collisione per le particelle. Ce ne sono quattro: GPUParticlesCollisionBox3D, GPUParticlesCollisionSphere3D, GPUParticlesCollisionSDF3D e GPUParticlesCollisionHeightField3D.

Proprietà comuni

Proprietà comuni di collisione di particelle

Proprietà comuni di collisione

Alcune proprietà sono presenti in tutti i nodi di collisione. Si trovano nella sezione GPUParticlesCollision3D dell'ispettore.

La proprietà Cull Mask controlla quali sistemi di particelle sono influenzati da un nodo di collisione in base agli strati di visibilità di ciascun sistema. Un sistema di particelle entra in collisione con un nodo di collisione solo se almeno uno degli strati di visibilità del sistema è abilitato nella maschera di cull del collisore.

Collisione a scatola

Collisione a scatola di particelle

Collisione a scatola nell'elenco dei nodi

I nodi di collisione a scatola hanno la forma di una scatola solida e rettangolare. Le loro dimensioni si controllano tramite la proprietà Extents. Le dimensioni della scatola misurano sempre metà dei lati dei suoi limiti, quindi un valore di (X=1.0,Y=1.0,Z=1.0) crea una scatola larga 2 metri per ogni lato. I nodi di collisione a scatola sono utili per simulare la geometria di pavimenti e pareti contro cui le particelle dovrebbero collidere.

Per creare un nodo di collisione a scatola, aggiungi un nuovo nodo figlio alla scena e seleziona GPUParticlesCollisionBox3D dall'elenco dei nodi disponibili. Puoi animare la posizione della scatola o aggiungerla a un nodo mobile per effetti più dinamici.

Collisione a scatola con sistemi di particelle

Due sistemi di particelle collidono con un nodo di collisione a scatola

Collisione sferica

Collisione sferica di particelle

Collisione a sfera nell'elenco dei nodi

I nodi di collisione sferica hanno la forma di una sfera piena. La proprietà Radius controlla la dimensione della sfera. Mentre i nodi di collisione a scatola non devono essere necessariamente cubi perfetti, i nodi di collisione sferica saranno sempre sfere. Se si desidera impostare la larghezza separatamente dall'altezza. è necessario modificarne la proprietà Scale nella sezione Node3D.

Per creare un nodo di collisione sferica, aggiungi un nuovo nodo figlio alla scena e seleziona GPUParticlesCollisionSphere3D dall'elenco dei nodi disponibili. Puoi animare la posizione della sfera o aggiungerla a un nodo in movimento per effetti più dinamici.

Collisione sferica con sistemi di particelle

Due sistemi di particelle collidono con un nodo di collisione sferica

Height field collision

Particle collision height field

Collisione a campo di altezza nell'elenco dei nodi

Height field particle collision is very useful for large outdoor areas that need to collide with particles. At runtime, the node creates a height field from all the meshes within its bounds that match its cull mask. Particles collide against the mesh that this height field represents. Since the height field generation is done dynamically, it can follow the player camera around and react to changes in the level. Different settings for the height field density offer a wide range of performance adjustments.

Per creare un nodo di collisione a campo di altezza, aggiungi un nuovo nodo figlio alla scena e seleziona GPUParticlesCollisionHeightField3D dall'elenco dei nodi disponibili.

A height field collision node is shaped like a box. The Extents property controls its size. Extents always measure half of the sides of its bounds, so a value of (X=1.0,Y=1.0,Z=1.0) creates a box that is 2 meters wide on each side. Anything outside of the node's extents is ignored for height field creation.

The Resolution property controls how detailed the height field is. A lower resolution performs faster at the cost of accuracy. If the height field resolution is too low, it may look like particles penetrate level geometry or get stuck in the air during collision events. They might also ignore some smaller meshes completely.

Height field resolutions

A basse risoluzioni, la collisione a campo di altezza manca alcuni dettagli più fini (a sinistra)

La proprietà Update Mode controlla quando il campo di altezza è ricreato dalle mesh all'interno dei suoi limiti. Impostandola su When Moved, l'aggiornamento avverrà solo quando si muove. Ciò offre buone prestazioni ed è adatta a scene statiche che non cambiano molto spesso. Se è necessario che le particelle collidano con oggetti dinamici che cambiano posizione frequentemente, è possibile selezionare Always per aggiornare il campo a ogni frame. Ciò ha un impatto sulle prestazioni e si dovrebbe usare solo quando necessario.

Nota

È importante ricordare che quando Update Mode è impostato su When Moved, è il nodo del campo di altezza il cui movimento forza un aggiornamento. Il campo di altezza non viene aggiornato quando si sposta una delle mesh al suo interno.

La proprietà Follow Camera Enabled fa sì che il campo di altezza segua la telecamera attuale quando è abilitata. Si aggiornerà ogni volta che la telecamera si muove. Questa proprietà può servire per garantire che ci sia sempre una collisione di particelle intorno al giocatore, evitando inoltre di sprecare risorse su regioni fuori dal campo visivo o troppo lontane.

Collisione SDF

Nota

Le collisioni SDF di particelle sono solo supportate nei renderer Forward+ e Mobile, non in Compatibilità.

Collisione SDF di particelle

Collisione SDF nell'elenco dei nodi

I nodi di collisione SDF creano un campo di distanza con segno con cui le particelle possono collidere. Una collisione SDF è simile a una collisione a campo di altezza in quanto trasforma più mesh all'interno dei suoi limiti in un singolo volume di collisione per le particelle. Una differenza fondamentale è che i campi di distanza con segno possono rappresentare buchi, tunnel e sporgenze, cosa impossibile da fare con i soli campi di altezza. Il sovraccarico sulle prestazioni è maggiore rispetto ai campi di altezza, quindi sono più adatti ad ambienti di piccole e medie dimensioni.

Per creare un nodo di collisione SDF, aggiungi un nuovo nodo figlio alla scena e seleziona GPUParticlesCollisionSDF3D dall'elenco dei nodi disponibili. I nodi di collisione SDF devono essere precalcolati per avere effetto sulle particelle nel livello. Per farlo, clicca sul pulsante Bake SDF nella barra degli strumenti della viewport mentre il nodo di collisione SDF è selezionato e scegli una cartella in cui salvare i dati precalcolati. Poiché la collisione SDF deve essere preparata nell'editor, è statica e non può cambiare in fase di esecuzione.

Collisioni SDF di particelle

La collisione SDF di particelle consente di ottenere forme di collisione tridimensionali molto dettagliate

An SDF collision node is shaped like a box. The Extents property controls its size. Extents always measure half of the sides of its bounds, so a value of (X=1.0,Y=1.0,Z=1.0) creates a box that is 2 meters wide on each side. Anything outside of the node's extents is ignored for collision.

La proprietà Resolution controlla il livello di dettaglio del campo di distanza. Una risoluzione inferiore garantisce prestazioni più veloci a scapito della precisione. Se la risoluzione è troppo bassa, potrebbe sembrare che le particelle penetrino la geometria del livello o rimangano sospese in aria durante le collisioni. Potrebbero anche ignorare completamente alcune mesh più piccole.

Resolution comparison

La stessa area coperta da un campo di distanza con segno a diverse risoluzioni: 16 (a sinistra) e 256 (a destra)

La proprietà Thickness fornisce uno spessore al campo di distanza, che di solito è cavo all'interno, per impedire alle particelle di penetrarlo ad alta velocità. Se noti che alcune particelle non collidono con la geometria del livello e la attraversano, prova ad aumentare questo valore.

La proprietà Bake Mask controlla quali mesh saranno considerate durante il precalcolo dell'SDF. Solo le mesh che sono renderizzate sugli strati attivi nella maschera di precalcolo contribuiscono alla collisione di particelle.

Risoluzione dei problemi

Affinché la collisione di particelle funzioni, l'AABB di visibilità delle particelle deve sovrapporsi all'AABB del collisore. Se le collisioni sembrano non funzionare nonostante i collisori siano configurati, genera un AABB di visibilità aggiornato, selezionando il nodo GPUParticles3D e scegliendo GPUParticles3D > Genera AABB di visibilità… in alto la viewport dell'editor 3D.

Se le particelle si muovono velocemente e i collisori sono sottili. Ci sono due soluzioni:

  • Rendi i collisori più spessi. Ad esempio, se le particelle non possono scendere sotto un pavimento solido, potresti rendere il collisore che rappresenta il pavimento più spesso della sua effettiva rappresentazione visiva. Il collisore a campo di altezza gestisce automaticamente questo aspetto, poiché i campi di altezza non possono rappresentare collisioni "stanza su stanza".

  • Aumenta il valore di Fixed FPS nel nodo GPUParticles3D, che effettuerà le verifiche di collisione più frequentemente. Ciò ha un impatto sulle prestazioni, quindi evita di impostare un valore troppo alto.