Els efectes de partícules són una part fonamental en la creació de videojocs, ja que permeten simular fenòmens naturals com el foc, fum, explosions, pluja, neu, i molts altres. Aquest mòdul se centrarà en la comprensió i implementació d'aquests efectes utilitzant sistemes de partícules.
Conceptes Bàsics dels Sistemes de Partícules
Què és un Sistema de Partícules?
Un sistema de partícules és una tècnica de gràfics per ordinador que utilitza moltes petites entitats (partícules) per simular fenòmens difusos. Cada partícula té propietats com la posició, velocitat, vida útil, color, i mida.
Propietats de les Partícules
- Posició: Coordenades en l'espai on es troba la partícula.
- Velocitat: Direcció i velocitat a la qual es mou la partícula.
- Vida útil: Temps durant el qual la partícula existeix abans de desaparèixer.
- Color: Color de la partícula, que pot canviar amb el temps.
- Mida: Dimensions de la partícula, que també poden variar amb el temps.
Components d'un Sistema de Partícules
- Emissor: Punt o regió des d'on es generen les partícules.
- Actualitzador: Mecanisme que modifica les propietats de les partícules al llarg del temps.
- Renderitzador: Component que dibuixa les partícules a la pantalla.
Implementació d'Efectes de Partícules
Exemple: Simulació de Foc
Pas 1: Configuració de l'Emissor
// Unity C# public class FireEmitter : MonoBehaviour { public ParticleSystem fireParticleSystem; void Start() { var emission = fireParticleSystem.emission; emission.rateOverTime = 100; // Genera 100 partícules per segon var main = fireParticleSystem.main; main.startLifetime = 2.0f; // Cada partícula viu durant 2 segons main.startSpeed = 5.0f; // Velocitat inicial de les partícules main.startSize = 0.5f; // Mida inicial de les partícules main.startColor = Color.red; // Color inicial de les partícules } }
Pas 2: Actualització de les Partícules
void Update() { var main = fireParticleSystem.main; main.startColor = new ParticleSystem.MinMaxGradient(Color.red, Color.yellow); // Canvia el color de les partícules amb el temps }
Pas 3: Renderització de les Partícules
Exemple: Simulació de Pluja
Pas 1: Configuració de l'Emissor
// Unity C# public class RainEmitter : MonoBehaviour { public ParticleSystem rainParticleSystem; void Start() { var emission = rainParticleSystem.emission; emission.rateOverTime = 500; // Genera 500 partícules per segon var main = rainParticleSystem.main; main.startLifetime = 4.0f; // Cada partícula viu durant 4 segons main.startSpeed = 10.0f; // Velocitat inicial de les partícules main.startSize = 0.1f; // Mida inicial de les partícules main.startColor = Color.blue; // Color inicial de les partícules } }
Pas 2: Actualització de les Partícules
void Update() { // No cal actualitzar les partícules per a la pluja, ja que el seu comportament és constant }
Pas 3: Renderització de les Partícules
Exercicis Pràctics
Exercici 1: Simulació de Fum
- Configura un emissor de partícules per simular fum.
- Ajusta les propietats de les partícules per fer que el fum sembli realista (vida útil més llarga, velocitat més baixa, color gris).
- Implementa l'actualització de les partícules per fer que el color canviï de gris fosc a gris clar amb el temps.
Exercici 2: Simulació d'Explosió
- Configura un emissor de partícules per simular una explosió.
- Ajusta les propietats de les partícules per fer que l'explosió sembli realista (vida útil curta, velocitat alta, colors variats).
- Implementa l'actualització de les partícules per fer que la mida de les partícules disminueixi amb el temps.
Solucions dels Exercicis
Solució 1: Simulació de Fum
public class SmokeEmitter : MonoBehaviour { public ParticleSystem smokeParticleSystem; void Start() { var emission = smokeParticleSystem.emission; emission.rateOverTime = 50; // Genera 50 partícules per segon var main = smokeParticleSystem.main; main.startLifetime = 5.0f; // Cada partícula viu durant 5 segons main.startSpeed = 1.0f; // Velocitat inicial de les partícules main.startSize = 1.0f; // Mida inicial de les partícules main.startColor = Color.gray; // Color inicial de les partícules } void Update() { var main = smokeParticleSystem.main; main.startColor = new ParticleSystem.MinMaxGradient(Color.gray, Color.lightGray); // Canvia el color de les partícules amb el temps } }
Solució 2: Simulació d'Explosió
public class ExplosionEmitter : MonoBehaviour { public ParticleSystem explosionParticleSystem; void Start() { var emission = explosionParticleSystem.emission; emission.rateOverTime = 0; // No genera partícules contínuament emission.SetBursts(new ParticleSystem.Burst[] { new ParticleSystem.Burst(0.0f, 100) }); // Genera 100 partícules en un sol esclat var main = explosionParticleSystem.main; main.startLifetime = 1.0f; // Cada partícula viu durant 1 segon main.startSpeed = 20.0f; // Velocitat inicial de les partícules main.startSize = 0.5f; // Mida inicial de les partícules main.startColor = new ParticleSystem.MinMaxGradient(Color.red, Color.yellow); // Color inicial de les partícules } void Update() { var main = explosionParticleSystem.main; main.startSize = new ParticleSystem.MinMaxCurve(0.5f, 0.1f); // Disminueix la mida de les partícules amb el temps } }
Resum
En aquesta secció, hem après els conceptes bàsics dels sistemes de partícules i com implementar efectes de partícules comuns com el foc, la pluja, el fum i les explosions. Hem vist com configurar els emissors, actualitzar les propietats de les partícules i renderitzar-les a la pantalla. També hem practicat amb exercicis per reforçar els conceptes apresos. Amb aquests coneixements, estàs preparat per crear efectes de partícules més complexos i realistes en els teus videojocs.
Física de Videojocs
Mòdul 1: Introducció a la Física en Videojocs
Mòdul 2: Cinemàtica i Dinàmica
- Moviment Rectilini Uniforme (MRU)
- Moviment Rectilini Uniformement Accelerat (MRUA)
- Lleis de Newton
- Moviment Circular
Mòdul 3: Col·lisions i Respostes
Mòdul 4: Física de Rigid Bodies
- Introducció a Rigid Bodies
- Simulació de Rigid Bodies
- Interaccions entre Rigid Bodies
- Constraints i Joints