Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
- Principi di animazione
o Exaggeration, Squash & Stretch: spinge l’effetto più lontano di quanto pensi
- L’abilità di visualizzare una reference per un effetto, spacchettarla e ricrearla in un game engine in
tempo reale
- Agire come ponte tra gli artisti e i programmatori che lavorano a un gioco
o Gli art assets devono essere semplici da integrare nel gioco, senza sacrificare né la visione
artistica né i limiti tecnici della piattaforma scelta
Attributi
I valori sono in Start e OverLifetime. Se sono basati su gradienti/curve, il tempo normalizzato è
- Main:
o Prewarm
o SimulationSpace: Local/World
- Emission:
- Shape:
o Can be on a 2D – 3D Shape/Mesh
o Spread: punti su cui sono distribuite le particelle emesse
o Mode: Random/Loop/PingPong
o AlignToDirection
o SpherizeDirection: Box/Volume
È possibile impostare un valore soglia per un canale sotto il quale la particella non
viene emessa
o Mesh:
o Drag: basato sulla dimensione (particelle più grandi hanno minor velocità) e sulla velocità
(partendo da una velocità negativa e andando verso una positiva, il drag diventa più
evidente)
- Inherit Velocity
- Color By Speed
External Forces
Windzone:
- PulseMagnitude: è una forza addizionale che si aggiunge alla forza Main in accordo alla Frequency
per creare un effetto più naturale
Collisioni
Le particelle hanno un collider circolare.
- World/Plane collisions: le particelle possono rimbalzare tra più piani (infiniti, la dimensione è solo
per poterli vedere)
- Dampen: quando una particella collide, perde una frazione della propria velocità
- Bounce
- Lifetime Loss: quando una particella collide, perde una frazione della propria StartLifetime
- Min/Max Kill Speed: se una particella esce fuori dal range [min, max], muore nella collisione
cEventList[i].intersection/normal/velocity
Per recuperare le informazioni sul particle system, dobbiamo accedere ai suoi moduli:
particleSystem.main.startSpeed.constantMax (accede al modulo main)
Scripting
Per accedere al particle system si usa un metodo “allocation free”, in quanto l’array di particle è già
preallocato. Solo una piccola parte dell’array delle particle potrebbe essere usato, in quanto dipende da
quante particelle sono vive nel sistema quando si richiama GetParicles().
- ParticleSystem.SetParticles(m_Particles, numParticlesAlive)
Per cambiare le proprietà del particle system, bisogna accedere ai suoi moduli
Non si assegna nuovamente al particle system il modulo, in quanto sono un’interfaccia interna al sistema.
- Constant
- Curve: salvato in 2 modi a seconda se abbia o meno più di 3 chiavi (in caso è possibile ottimizzarla)
È possibile valutare la curva via script attraverso MinMaxCurve.Evaluate(). Queste curve possono essere
usate anche al di fuori di un Particle System.
Trigger
Modifica i particle quando interagiscono con un Physic Collider e permette di avere più controllo sugli
eventi di collisione e trigger rispetto al modulo collision in quanto non ci sono risposte automatiche e
modifica le particle in una callback OnParticleTrigger() in uno script del Particle System.
Sono disponibili gli eventi: Inside/Outside/Enter/Exit
Sub Emitters
Sono utili per effetti come: fuochi d’artificio, pioggia, bombe, esplosioni, etc. Possono ereditare le proprietà
Start del Particle System padre.
I trigger per i SubEmitter sono Birth, Collision e Death.
Trail Renderer
Permette di lasciare un trail dietro il GameObject mentre si muove, sottolineando il percorso o
enfatizzandone il movimento e dovrebbe essere l’unico Renderer usato sull’oggetto.
- MinVertexDistance: quanto lontano l’oggetto che contiene il trail deve viaggiare prima che un
segmento del trail venga solidificato
- Corner/Endcap Vertices: rifinisce la geometria alla fine in mezzo ai segmenti del trail
Il Trail Renderer spesso produce artefatti, sarebbe meglio, quindi, usare altri prodotti nello store
Trails
Come il TrailRenderer, permette di lasciare una scia dietro le particelle. Il material del trail è impostato nel
modulo Renderer. Per poter renderizzare solo i trail, va impostato RenderModule/RenderMode: None.
- Mode:
o Particle:
MinVertexDistance: distanza che la particella deve avere prima che il suo trail
riceva un nuovo vertice
o Ribbon:
RibbonCount: quanti ribbon renderizzare attraverso il particle system
Force Field
Il particle system, per interagire con un Force Field, deve avere il modulo External Forces attivo. La
proprietà Focus agisce come uno spazio interno dove le particelle sono attratte. È un valore normalizzato
tra 0 (il centro del Force Field) e 1 (raggio finale).
Noise
Basato sul Curl Noise, è un campo vettore. Il Curl è un operatore vettore che descrive la rotazione
infinitesimale di un campo vettore all’interno di uno spazio Euclideo tridimensionale. Si possono calcolare i
Curl in uno spazio usando una Curl Function che faccia il sample delle celle vicine. Il Curl Noise, quindi, è
una Curl Function del Perling Noise (un tipo di rumore-gradiente sviluppato da Ken Perlin negli anni 80 per
Tron). È usato per la simulazione di gas e fluidi.
Perling Noise > Perling Noise Vector Field > Curl Noise Vector Field
o 1D e 2d: riusano sempre gli stessi sample lungo gli assi combinandoli in modo differenti per
nascondere il riuso, con un beneficio importante sulle prestazioni
Noise Remap
I valori del rumore sono normalizzati sull’asse della X e sono rimappati usando una funzione curva.
Permette inoltre di definire una forma personalizzata del rumore, anche potendolo togliere completamente
in alcuni range. Curve casuali faranno sembrare il rumore meno prevedibile.
Renderer
- Renderer Mode:
o Billboard: per le particle rappresentanti volumi che vengono visti allo stesso modo da tutte
le direzioni (nuvole)
o Stretched Billboard: tecnica “Stretch & Squash” applicata alle particle, allineate per vedere
la camera
o Mesh:
- Normals:
- Sorting Fudge: deve essere un valore basso se si vuole che il sistema appaia davanti le altre particle
o altri oggetti trasparenti
- Pivot: se la dimensione del particle cambia e il pivot rimane lo stesso, la posizione cambia
Lights
Aggiunge luci alle particle e supporta lo Shadow Casting (ha un costo elevato). Le luci possono ereditare il
colore dalle particle.
Il numero di luci emesse dal sistema dipende da:
- LightModule/Maximum Light
L’attributo Ratio in caso RandomDistribution fosse disabilitato, rappresenta la percentuale di particelle che
avrà le luci, altrimenti la probabilità che ogni particella abbia la luce.
Custom Data
Definisce nell’editor 2 formati di dati personalizzati (Vector4/Color) che possono essere attaccati alle
particle. Possono essere impostati anche attraverso gli script. Genera dati personalizzati per ogni particella
che possono essere usati sia negli script che negli shader.
Script
- ParticleSystem.GetCustomParticleData(cData, ParticleSystemCustomData.Custom1);
- Ritorna la lista nello stesso ordine delle particle nel GetParticles(); e questo è utile, perché se uno di
questi valori è una curva da 0 a 10, la particles[i] a tempo normalizzato 0.5 avrà un valore 5
Shaders
Performances
RingBuffer
Una volta che la lista di particle raggiunge il numero massimo di particle, non ne possono più apparire altre.
Nel RingBufferMode invece di morire quando il Lifetime finisice, la particle rimane in vita finché il buffer
MaxParticle non è pieno per poi essere rimpiazzata da una particle nuova.
- LoopUntilReplace: imposta un punto di loop, così può effettuare continuamente l’animazione tra
due punti di loop così che quando dovrà essere rimossa, farà il loop rimanente (?)
- Multithreading
- SIMD Math Library (operazioni su vettori 4D in una singola istruzione, 2.5x più veloci)
- Procedural Mode
o Può predire lo stato di un sistema in ogni momento e questo significa che non dobbiamo
aggiornarlo continuamente anche se fuori dallo schermo
RateOverDistance
SimulationSpaceWorld
- AnimationClips può contenere tutte le proprietà di un Particle System. Può migliorare le prestazioni