Fumo, fuoco, scintille, polvere sollevata dai passi, gocce di pioggia, scie luminose: buona parte degli effetti visivi dei videogiochi nasce da un'idea semplice. Invece di animare a mano un'esplosione, si generano decine o centinaia di piccoli elementi indipendenti, le particelle, ciascuno con regole elementari. Il risultato complessivo appare organico e sempre leggermente diverso.
Che cos'è una particella
Una particella è un oggetto molto leggero, con poche proprietà:
- posizione e velocità;
- tempo di vita residuo;
- dimensione, colore, opacità;
- rotazione e velocità di rotazione;
- eventualmente una texture o un fotogramma di una piccola animazione.
A ogni aggiornamento la particella si sposta, invecchia e, quando il suo tempo di vita si esaurisce, viene rimossa. Non ha collisioni complesse né intelligenza: la ricchezza dell'effetto viene dal numero e dalla variazione.
L'emettitore
Le particelle vengono create da un emettitore, che definisce come nascono. I parametri principali:
| Parametro | Esempio fumo | Esempio esplosione |
|---|---|---|
| Modalità | Continua, 20 al secondo | Raffica unica di 80 |
| Forma | Punto o piccolo cerchio | Sfera |
| Direzione iniziale | Verso l'alto, cono stretto | Tutte le direzioni |
| Velocità iniziale | Bassa, poco variabile | Alta, molto variabile |
| Durata di vita | 2-4 secondi | 0,3-1 secondo |
| Gravità | Leggermente negativa, sale | Positiva per i detriti |
Quasi ogni valore è definito come intervallo, non come numero fisso: la velocità tra 50 e 120, la durata tra 0,5 e 0,9. È questa casualità controllata a evitare l'aspetto artificiale.
Evoluzione nel tempo
Il segreto di un buon effetto è il modo in cui le proprietà cambiano durante la vita della particella. Invece di valori costanti si usano curve o gradienti in funzione dell'età normalizzata, da 0 alla nascita a 1 alla morte:
- dimensione: il fumo cresce mentre sale; una scintilla si rimpicciolisce;
- colore: il fuoco passa dal giallo al rosso al grigio scuro;
- opacità: comparsa rapida all'inizio e dissolvenza alla fine, così la particella non appare e scompare di colpo;
- velocità: un attrito che la riduce progressivamente rende il movimento più credibile.
eta = 1 - vita_residua / vita_totale
dimensione = curva_dimensione(eta) * dimensione_base
colore = gradiente_colore(eta)
velocita *= (1 - attrito * dt)
Fusione e ordine di disegno
Il modo in cui le particelle si combinano con lo sfondo cambia completamente l'aspetto:
- fusione alfa normale: adatta a fumo, polvere, detriti, che coprono ciò che sta dietro;
- fusione additiva: i colori si sommano, le zone sovrapposte diventano più luminose. È ideale per fuoco, scintille, raggi di energia e laser, e ha il vantaggio di non dipendere dall'ordine di disegno.
Con la fusione alfa invece l'ordine conta: le particelle andrebbero disegnate dalla più lontana alla più vicina. In 2D spesso il problema è trascurabile; in 3D, con molti effetti sovrapposti, è una delle difficoltà principali.
Effetti composti
Un effetto convincente raramente nasce da un solo emettitore. Un'esplosione ben fatta combina, per esempio:
- un lampo iniziale molto breve e luminoso;
- una palla di fuoco additiva che si espande e si raffredda di colore;
- detriti che volano via con gravità;
- fumo che resta più a lungo e sale lentamente;
- un'eventuale onda d'urto, un anello che si allarga rapidamente.
Ogni strato ha durata e comportamento propri, e insieme a un suono adeguato e a un leggero scuotimento dello schermo producono un impatto molto superiore alla somma delle parti.
Prestazioni
Le particelle sono tante per definizione, quindi l'efficienza conta:
- usare un pool di particelle preallocato invece di creare e distruggere oggetti;
- memorizzare le proprietà in array contigui per un aggiornamento rapido;
- disegnare tutte le particelle di un emettitore in un'unica chiamata, con una sola texture o un atlante;
- impostare un limite massimo per emettitore e globale;
- sospendere gli emettitori fuori dallo schermo;
- per numeri molto elevati, delegare la simulazione alla scheda grafica, possibilità offerta dai motori principali.
Attenzione anche al sovradisegno: tante particelle grandi e semitrasparenti sovrapposte obbligano la GPU a calcolare più volte gli stessi pixel. Spesso poche particelle più grandi e ben disegnate rendono meglio di molte particelle piccole.
Particelle al servizio del gioco
Gli effetti non sono solo decorazione: comunicano informazioni. La polvere all'atterraggio conferma il contatto con il suolo, le scintille indicano che un colpo ha incontrato un'armatura, un bagliore segnala un oggetto da raccogliere. Due raccomandazioni:
- gli effetti non devono coprire elementi importanti come proiettili nemici o il personaggio;
- prevedere un'opzione per ridurre lampi e particelle, utile a chi è sensibile a stimoli visivi intensi e su hardware meno potente.
In sintesi
- Un sistema di particelle genera molti elementi semplici con proprietà leggermente casuali.
- L'emettitore definisce quantità, forma, direzione, velocità e durata delle particelle.
- Curve e gradienti nel tempo rendono credibili dimensione, colore e opacità.
- La fusione additiva è ideale per fuoco ed energia; quella alfa per fumo e polvere.
- Pool, limiti e attenzione al sovradisegno mantengono buone le prestazioni.