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...
GPUParticles3D
Eredita: GeometryInstance3D < VisualInstance3D < Node3D < Node < Object
Un emettitore di particelle 3D.
Descrizione
Nodo di particelle 3D utilizzato per creare una varietà di sistemi di particelle ed effetti. GPUParticles3D è dotato di un emettitore che genera un certo numero di particelle a una determinata frequenza.
Usa process_material per aggiungere un ParticleProcessMaterial per configurare l'aspetto e il comportamento delle particelle. In alternativa, è possibile aggiungere uno ShaderMaterial che sarà applicato a tutte le particelle.
Tutorial
Proprietà
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Metodi
capture_aabb() const |
|
void |
convert_from_particles(particles: Node) |
void |
emit_particle(xform: Transform3D, velocity: Vector3, color: Color, custom: Color, flags: int) |
get_draw_pass_mesh(pass: int) const |
|
void |
request_particles_process(process_time: float, process_time_residual: float = 0.0) |
void |
|
void |
set_draw_pass_mesh(pass: int, mesh: Mesh) |
Segnali
finished() 🔗
Emesso quando tutte le particelle attive hanno terminato l'elaborazione. Per riavviare immediatamente il ciclo di emissione, chiama restart().
Questo segnale non è mai emesso quando one_shot è disabilitato, poiché le particelle verranno emesse ed elaborate continuamente.
Nota: Per gli emettitori con one_shot abilitato, poiché le particelle vengono elaborate sulla GPU, potrebbe esserci un breve periodo dopo la ricezione del segnale durante il quale l'impostazione di emitting su true non riavvierà il ciclo di emissione. Questo ritardo è evitato chiamando invece restart().
Enumerazioni
enum DrawOrder: 🔗
DrawOrder DRAW_ORDER_INDEX = 0
Le particelle sono disegnate nell'ordine in cui sono emesse.
DrawOrder DRAW_ORDER_LIFETIME = 1
Le particelle sono disegnate nell'ordine di tempo di vita residuo. In altre parole, la particella con il tempo di vita più alto è disegnata davanti.
DrawOrder DRAW_ORDER_REVERSE_LIFETIME = 2
Le particelle sono disegnate in ordine inverso rispetto alla durata residua. In altre parole, la particella con la durata più bassa è disegnata di fronte.
DrawOrder DRAW_ORDER_VIEW_DEPTH = 3
Le particelle sono disegnate in ordine di profondità.
enum EmitFlags: 🔗
EmitFlags EMIT_FLAG_POSITION = 1
La particella inizia alla posizione specificata.
EmitFlags EMIT_FLAG_ROTATION_SCALE = 2
La particella inizia con la rotazione e la scala specificate.
EmitFlags EMIT_FLAG_VELOCITY = 4
La particella inizia con il vettore di velocità specificato, che definisce la direzione e la velocità di emissione.
EmitFlags EMIT_FLAG_COLOR = 8
La particella inizia con il colore specificato.
EmitFlags EMIT_FLAG_CUSTOM = 16
La particella inizia con i dati CUSTOM specificati.
enum TransformAlign: 🔗
TransformAlign TRANSFORM_ALIGN_DISABLED = 0
Do not align particle transforms relative to the camera or velocity.
TransformAlign TRANSFORM_ALIGN_Z_BILLBOARD = 1
Align each particle's Z axis to face the camera.
TransformAlign TRANSFORM_ALIGN_Y_TO_VELOCITY = 2
Align each particle's Y axis to the velocity vector.
TransformAlign TRANSFORM_ALIGN_Z_BILLBOARD_Y_TO_VELOCITY = 3
Align each particle's Z axis to face the camera and Y axis to the velocity vector.
TransformAlign TRANSFORM_ALIGN_LOCAL_BILLBOARD = 4
Align each particle's Z axis to face the camera, while preserving a given axis (X or Y).
Costanti
MAX_DRAW_PASSES = 4 🔗
Numero massimo di passaggi di disegno supportati.
Descrizioni delle proprietà
Numero di particelle da emettere in un ciclo di emissione. La frequenza di emissione effettiva è (quantità* rapporto_di_quantità) / tempo_di_vita particelle al secondo. Valori più alti aumenteranno i requisiti sulla GPU, anche se non tutte le particelle sono visibili in un determinato momento o se amount_ratio viene diminuito.
Nota: La modifica di questo valore causerà il riavvio del sistema di particelle. Per evitarlo, modifica invece amount_ratio.
Il rapporto di particelle che dovrebbero essere effettivamente emesse. Se impostato su un valore inferiore a 1.0, questo imposterà la quantità di particelle emesse durante la durata a quantità * rapporto_di_quantità. A differenza di modificare amount, modificare amount_ratio durante l'emissione non influisce sulle particelle già emesse e non causa il riavvio del sistema di particelle. amount_ratio può essere utilizzato per creare effetti che fanno variare il numero di particelle emesse nel tempo.
Nota: Ridurre amount_ratio non ha alcun vantaggio in termini di prestazioni, poiché le risorse devono essere allocate ed elaborate per il totale di amount di particelle indipendentemente da amount_ratio. Se non intendi modificare il numero di particelle emesse durante l'emissione, assicurati che amount_ratio sia impostato su 1 e modifica invece amount a tuo piacimento.
float collision_base_size = 0.01 🔗
Diametro di base per la collisione delle particelle in metri. Se le particelle sembrano affondare nel terreno durante la collisione, aumenta questo valore. Se le particelle sembrano galleggiare durante la collisione, diminuisci questo valore. Efficace solo se ParticleProcessMaterial.collision_mode è ParticleProcessMaterial.COLLISION_RIGID o ParticleProcessMaterial.COLLISION_HIDE_ON_CONTACT.
Nota: Le particelle hanno sempre una forma di collisione sferica.
Ordine di disegno delle particelle.
Nota: DRAW_ORDER_INDEX è l'unica opzione che supporta i vettori di movimento per effetti come TAA. Si consiglia di utilizzare questo ordine di disegno se le particelle sono opache per correggere gli artefatti di "ghosting".
La Mesh disegnata per il primo passaggio di disegno.
La Mesh disegnata per il secondo passaggio di disegno.
La Mesh disegnata per il terzo passaggio di disegno.
La Mesh disegnata per il quarto passaggio di disegno.
Il numero di passaggi di disegno durante il rendering delle particelle.
There is currently no description for this property. Please help us by contributing one!
Se true, le particelle vengono emesse. emitting può essere utilizzato per avviare e interrompere l'emissione di particelle. Tuttavia, se one_shot è true, impostare emitting su true non riavvierà il ciclo di emissione a meno che tutte le particelle attive non abbiano terminato l'elaborazione. Utilizza il segnale finished per essere avvisato una volta che tutte le particelle attive hanno terminato l'elaborazione.
Nota: Per gli emettitori con one_shot abilitato, poiché le particelle vengono elaborate sulla GPU, potrebbe esserci un breve periodo dopo la ricezione del segnale finished durante il quale impostare su true non riavvierà il ciclo di emissione.
Suggerimento: Se l'emettitore con one_shot abilitato deve riavviare immediatamente l'emissione di particelle una volta ricevuto il segnale finished, considera di chiamare restart() anziché impostare emitting.
Rapporto di tempo tra ogni emissione. Se 0, le particelle sono emesse continuamente. Se 1, tutte le particelle sono emesse allo stesso tempo.
La frequenza dei fotogrammi del sistema di particelle è fissato a un valore. Ad esempio, cambiando il valore a 2, le particelle saranno renderizzate a 2 fotogrammi al secondo. Nota che questo non rallenta la simulazione del sistema di particelle stesso.
Se true, utilizza un calcolo di delta frazionario che consente una visualizzazione più fluida delle particelle.
Provoca l'interpolazione di tutte le particelle in questo nodo verso la fine del loro ciclo di vita.
Nota: Funziona solo se utilizzato con un ParticleProcessMaterial. Deve essere implementato manualmente per gli shader di processo personalizzati.
"Abilita l'interpolazione delle particelle, che rende il movimento delle particelle più fluido quando il loro fixed_fps è inferiore alla frequenza di aggiornamento dello schermo.
La quantità di tempo per cui ogni particella esisterà (in secondi). La frequenza di emissione effettiva è (quantità * rapporto_di_quantità) / tempo_di_vita particelle al secondo.
Se true, le particelle usano lo spazio di coordinate del nodo genitore (noto come coordinate locali). Ciò farà sì che le particelle si muovano e ruotino lungo il nodo GPUParticles3D (e i suoi genitori) quando viene spostato o ruotato. Se false, le particelle usano coordinate globali; non si muoveranno o ruoteranno lungo il nodo GPUParticles3D (e i suoi genitori) quando viene spostato o ruotato.
Se true, verrà emesso solamente il numero di particelle uguali a amount.
Quantità di tempo per pre-elaborare le particelle prima che cominci l'animazione. Ti consente di avviare l'animazione un po' di tempo dopo che le particelle hanno cominciato l'emissione.
Nota: Questo può essere molto costoso se impostato su un numero elevato, poiché richiede l'esecuzione dello shader di particelle un numero di volte pari a fixed_fps (o 30, se fixed_fps è 0) per ogni secondo. In casi estremi può persino causare un arresto anomalo della GPU a causa del volume di lavoro svolto in un singolo frame.
Il Material per l'elaborazione delle particelle. Può essere un ParticleProcessMaterial o uno ShaderMaterial.
Rapporto di casualità dell'emissione.
Imposta il seed casuale utilizzato dal sistema di particelle. Efficace solo se use_fixed_seed è true.
Rapporto di scala della velocità. Un valore di 0 può essere utilizzato per mettere in pausa le particelle.
NodePath sub_emitter = NodePath("") 🔗
Percorso verso un altro nodo GPUParticles3D che sarà utilizzato come sottoemettitore (vedi ParticleProcessMaterial.sub_emitter_mode). I sottoemettitori possono essere utilizzati per ottenere effetti quali fuochi d'artificio, scintille in caso di collisione, bolle che scoppiano in gocce d'acqua e altro ancora.
Nota: Quando sub_emitter è impostato, il nodo di destinazione GPUParticles3D non emetterà più particelle da solo.
Se true, abilita le scie di particelle usando un sistema di skinning mesh. Progettato per funzionare con RibbonTrailMesh e TubeTrailMesh.
Nota: BaseMaterial3D.use_particle_trails deve essere abilitato anche sul materiale della mesh di particelle. Altrimenti, impostare trail_enabled su true non avrà alcun effetto.
Nota: A differenza di GPUParticles2D, il numero di sezioni e suddivisioni della scia è impostato nelle proprietà del RibbonTrailMesh o del TubeTrailMesh.
La quantità di tempo che la scia di particelle dovrebbe rappresentare (in secondi). Efficace solo se trail_enabled è true.
TransformAlign transform_align = 0 🔗
void set_transform_align(value: TransformAlign)
TransformAlign get_transform_align()
The alignment of particles. Use this for billboarding and aligning to velocity.
ParticlesTransformAlignAxis transform_align_axis 🔗
void set_transform_align_axis(value: ParticlesTransformAlignAxis)
ParticlesTransformAlignAxis get_transform_align_axis()
When using transform align local billboard, which axis to use for the billboarding. Supports only X or Y.
ParticlesTransformAlignCustomSrc transform_align_channel_filter 🔗
void set_transform_align_channel_filter(value: ParticlesTransformAlignCustomSrc)
ParticlesTransformAlignCustomSrc get_transform_align_channel_filter()
In the case of billboarded particles, which custom channel to read from to calculate their angle.
Se true, le particelle utilizzeranno lo stesso seed per ogni simulazione, utilizzando il seed definito in seed. Ciò è utile per le situazioni in cui il risultato visivo deve essere coerente tra i replay, ad esempio quando si utilizza la modalità Movie Maker.
AABB visibility_aabb = AABB(-4, -4, -4, 8, 8, 8) 🔗
L'AABB che determina la regione del nodo che deve essere visibile sullo schermo affinché il sistema di particelle sia attivo. GeometryInstance3D.extra_cull_margin è aggiunto su ciascuno degli assi di AABB. Le collisioni e l'attrazione delle particelle si verificheranno solo all'interno di quest'area.
Ingrandisci la box se le particelle appaiono o scompaiono improvvisamente quando il nodo entra o esce dallo schermo. L'AABB può essere ingrandito tramite codice o con lo strumento dell'editor Particelle → Genera AABB.
Nota: visibility_aabb è sovrascritto da GeometryInstance3D.custom_aabb se tale proprietà è impostata su un valore non predefinito.
Descrizioni dei metodi
Restituisce la bounding box allineato all'asse che contiene tutte le particelle attive nel frame attuale.
void convert_from_particles(particles: Node) 🔗
Imposta le proprietà di questo nodo in modo che corrispondano a un dato nodo CPUParticles3D.
void emit_particle(xform: Transform3D, velocity: Vector3, color: Color, custom: Color, flags: int) 🔗
Emette una singola particella. L'applicazione della trasformazione (xform), la velocità (velocity), il colore (color) e custom dipende dal valore di flags. Vedi EmitFlags.
Il ParticleProcessMaterial predefinito sovrascriverà color e utilizzerà il contenuto di custom come (rotazione, tempo iniziale, animazione, tempo di vita).
Nota: emit_particle() è supportato solo sui metodi di rendering Forward+ e Mobile, non su Compatibilità.
Mesh get_draw_pass_mesh(pass: int) const 🔗
Restituisce la Mesh disegnata all'indice pass.
void request_particles_process(process_time: float, process_time_residual: float = 0.0) 🔗
Requests the particles to process for extra process time during a single frame.
process_time defines the time that the particles will process while emitting is on. process_time_residual defines the time that particles will process with emitting turned off for the simulation. When combined with speed_scale set to 0.0, this is useful to be able to seek a particle system timeline.
void restart(keep_seed: bool = false) 🔗
Riavvia il ciclo di emissione delle particelle, eliminando le particelle esistenti. Per evitare che le particelle scompaiano dalla viewport, attendi il segnale finished prima di chiamare questo metodo.
Nota: Il segnale finished viene emesso solo dagli emettitori con one_shot abilitato.
Se keep_seed è true, il seed casuale attuale verrà conservato. Utile per la ricerca e la riproduzione.
void set_draw_pass_mesh(pass: int, mesh: Mesh) 🔗
Imposta la Mesh disegnata all'indice pass.