Grafica – Le Particelle

In questo articolo, come da titolo, ti mostrerò la tecnica per costruire una tipologia di Particelle che è possibile modificare al 100% a seconda del gioco che stati facendo. Detto questo direi di iniziare. Come prima cosa è indispensabile avere una Texture (.png va bene), oppure se è possibile anche dei piccoli oggetti, anche primitive, ma questo sarà il tema del prossimo articolo; adesso scarica la texture QUA. Il risultato finale dovrebbe essere un pò come questo del video. Come ho detto è un sistema customizzabile e semplice da implementare, fatto a Mattoni.

L’oggetto particella

Come sopra citato, per questo esempio vedrai come creare un piano texturizzato e animato che si muove e crea insieme alla logica un loop perfetto che da la sensazione di avere un fuoco, in questo caso, come nel video. 

Come prima cosa puoi caricare la texture. Se non vuoi usare quella che ho messo a disposizione puoi usarne una tua ma cerca di rispettare alcuni canoni quando la crei e salvi il file in .png

Questa qua sopra è l’immagine che userò io, come vedi è una sfera con un gradiente trasparente sul borde e con il fondale trasparente, quando salvi il file fai attenzione che vengano mantenute le trasparenze, è importante. Puoi sperimentare in seguito dopo che avrai capito la logica e il sistema di animazioni utili a fare muovere la particella. Quest’ultimo aspetto, delle animazioni, è basilare se si vuole creare una particella diversa da quella che farò io, darò più avanti una lista di consigli a proposito.

Cancella il cubo e inserisci un piano, per ora manteniamo le dimensioni attuali per questioni pratiche. Fai l’unwrap del piano assegnandogli la texture, inserisci un materiale e accoppiagli la texture.

Ci sono un pò di opzioni da impostare:

  • Nel pannello del materiale sulla tab Shading si può mettere la spunta su Shadless oppure modificare il parametro emit a piacimento, a seconda di quanto si vuole la texture sia più illuminata anche in assenza di una forte luce, quindi visibile anche con un filo di luce e questo può essere un vantaggio per dare al gioco un tono.
  • Poi vai alla tab Trasparency, si trova in basso alle opzioni del materiale, attivala e metti a zero il campo Alpha sotto i pulsanti dei tipi di trasparenza.

A questo punto dovresti vedere la texture, trasparenze incluse, nel piano, come nell’immagine successiva, riguarda i passaggi sopra se non vedi il piano così.

Continuano le impostazioni, è un pò tedioso lo so, ma nulla viene da solo.

  • Nel pannello del Materiale nella tab Options metti la spunta su Object Color. Questo perché animerò il colore dell’oggetto e non il Diffuse del Materiale.
  • Leva la spunta al pannello Physics.
  • Nel pannello della Texture, nella tab Influece puoi levare la spunta sul Color.

L’ultima indispensabile modifica la si deve apportare direttamente all’oggetto, entra in edit mode e ruota il piano sull’asse Y di 90 gradi, usa la scorciatoia S-Y-90. Adesso vai sul pannello del materiale e sulla tab Game Setting, apri il menù Face Orientation e seleziona Halo, in questo modo il piano guarderà sempre la camera, senza aggiunta di Mattoni, il che vuol dire che non peserà più sulla logica.

A questo punto l’aspetto grafico è finito.

Animare l’oggetto

Come menzionato in questa prima parte delle impostazioni, userò il colore dell’oggetto. Vai nel pannello dell’oggetto, quello col cubo giallo, rinomina sempre gli oggetti, io l’ho chiamato semplicemente particella. In basso c’è una tab che si chiama Display, queste sono le opzioni di visualizzazione dell’oggetto nella scena, sia in run time che in 3D view. C’è una voce colore, la ruota dei colori in basso a destra Object Color, da li possiamo scegliere i nostri colori dell’animazione, fai anche delle prove cambiando colore.

Una caratteristica della scelta dei colori per l’animazione di una particella è legato all’intento che si vuole, bisogna chiedersi cosa si vuole fare, in questo esempio faremo una fiammella che poi moltiplicata darà vita a un fuoco. La palette ideale va da un giallo molto chiaro, un’arancione fino al rosso, per poi impostare la parte finale quel pennacchio di fumo che si crea, quindi un pò di grigio e nero. Il primo colore quindi è la punta del fuoco, dove arde, quindi direi un giallo molto chiaro, come quello nella prossima immagine, tu puoi usare una palette diversa se vuoi o una tonalità differente.

 

Come puoi notare sotto gli slider degli RGB c’è il canale Alpha, questo è un’altro vantaggio dell’uso dell’Object color. Cambia la finestra da Logic Editor a Time Line, cambia la fine dell’animazione dal parametro End nella barra della Time Line a 50. Zooma e accentra bene i frame. Posiziona il cursore del mouse sullo slot dell’Object Color e premi il tasto i, come vedi è apparso un key frame, procedendo così puoi aggiungere altri key frame con colori diversi, per velocizzare l’operazione metti i frame tutti ad una distanza uguale, tipo 5, servono un bel pò di colori, quindi sposta il cursore sul frame 5 cambia colore, inserirò di seguito la sequenza di immagini, col cursore del mouse sopra lo slot premi i, questa è la procedura per ogni colore, ecco la sequenza, il file è molto grande quindi clicca e si aprirà su un’altra pagina.

Adesso cambia la Time Line con la Dope Sheet, in questa finestra hai i singoli frame visualizzati in verticale, ti ricordo che quello che fai sulle altre finestre lo puoi fare anche su questa, come scalare, spostare e gli short cut sono sempre gli stessi. Deseleziona tutto premendo il tasto A, adesso usando il box selection, tasto b, puoi selezionare una serie di frame e spostarli, per rendere l’animazione più o meno veloce su alcuni colori, per esempio se vuoi più rosso cerchi di creare spazio dopo il rosso in modo da farlo durare di più.

Una Nota : l’animazione può essere più lunga o corta a seconda dell’uso che si deve fare e più o meno asimmetrica.

 Questa è la mia configurazione

Naturalmente è personale, ma questo si può cambiare anche in seguito se il risultato non è quello voluto.

Logica a Mattoni

A questo punto del tutorial si può iniziare a implementare la logica, anche per vedere un pò il risultato e magari cambiare qualcosa se non è quello voluto. Sposta la particella nel secondo layer, o in un layer a tuo piacimento, per farlo selezionala e premi M e il numero relativo al layer, nel mio caso il 2; questo perché la particella sarà creata da una empty. Vai al layer e seleziona la particella (dovrebbe già esserlo), inserisci un Sensor Always e clicca su True Level Trigger (i puntini in alto), inserisci un Actuator Action e uno Motion, collegali  entrambi tramite un Controller And al Sensor Always. L’azione è quella del cambio dei colori, mentre per il Motion ho impostato un movimento sull’asse Z di 0.02, quindi molto lento, ecco i mattoni

Se fai partire il motore di gioco vedrai la particella salire verso l’alto mentre cambia colore.

Spostati sul primo layer e inserisci una Empty Single Arrow (Shift+A-Empty-Single Arrow), la logica della Empty, che io ho rinominato particel_spawn, è semplice ma molto potente, da qui puoi decide quante particelle vengono create e per quanto tempo la particella resta visibile prima di essere distrutta (è il termine che indica la cancellazione di un’oggetto). Inserisci un Sensor Always, clicca sui True Level Trigger, nel campo Skip inserisci per ora il valore 10; adesso inserisci un Actuator Edit Object e sul campo Object scegli la particella, collegali tramite Controller And. Se fai partire il motore adesso vedrai diverse particelle andare verso l’alto ripetendo l’animazione all’infinito, questo perché non abbiamo impostato un tempo di distruzione. Nell’Actuator cambia il numero del campo Time, il numero è direttamente proporzionale all’animazione, cioè se vuoi che l’animazione venga eseguita per intero devi raggiungere un valore che faccia si che la particella viva per la durata dell’intera animazione, nel mio caso è 42 o 43, se stai usando dei valori a tuo piacimento ti consiglio di provare fino a quando non trovi il numero giusto. L’altro valore da variare a seconda del tipo di particella che stai creando è lo Skip del Sensor Always, il valore salta un frame ogni numero, quindi se lo imposti a 10 (come prima indicato) Blender salterà 10 frame dei 60 di default prima di inviare l’impulso positivo e quindi creare una particella, quindi crea una particella ogni 10 frame, quello che vedi a video non sono altro che le varie particelle create che salgono verso l’altro mentre riproducono l’animazione. In questo caso più basso è il numero dello Skip più le particelle vengono create velocemente (detto molto semplicemente), quindi abbassa il numero fino a quando non è di tuo gradimento, il mio è 3.

Nota: Come ho detto prima questo sistema incide sul render in tempo reale, quindi più particelle sono presenti nella visuale della camera più la possibilità che il gioco lagghi è alta. Ma per questo esempio puoi anche usare un numero basso che non sia zero.

 L’ultimo passaggio è quello di creare un’animazione per la Empty in modo da farle creare le particelle in vari punti, nel caso della fiammella il movimento sarà minimo ma il risultato è assicurato. 

Animare la Empty

Spostati nella visuale dall’alto (Tn7) e cerca di zoommare sulla Empty il più possibile, cambia la finestra Logic Editor con la Time Line, l’animazione della Empty è legata al tipo di particella che vuoi creare, un movimento semplice con pochi frame spesso può essere efficace, facendo pratica vedrai che è più semplice di quanto credi. Per il mio esempio io creero 5 frame che muoveranno la Empty in maniera quasi circolare. Per inserire un key frame sposta l’oggetto nella posizione che desideri, posiziona il puntatore del mouse sulla 3D View e premi il tasto i, dal menù scegli Location, poi sposti la Empty su una posizione diversa ripeti l’operazione per tutti i frame che ti servono. Ricorda che per questo esempio la Empty deve eseguire un movimento molto piccolo, millimetrico, perché una fiammella è generata da un punto, per esempio lo stoppino di una candela. Una volta finita la tua animazione vai nella Dope sheet e seleziona soltanto il primo frame dell’animazione, copialo e spostalo al frame 50, in questo modo avrai un’animazione in loop. Puoi anche cambiare la modalità della curva nella Graph Editor, seleziona tutti i frame, tasto A, premi T e scegli lineare. Adesso basta aggiungere alla Empty una linea di mattoni Always-And-Action per riprodurre l’animazione, ricorda di cliccare sul True level Trigger. Fai partire il motore e vedrai il risultato.

Miglioramenti

Il risultato è evidente, tutto molto bello, ma come avrai sicuramente notato la fiammella è troppo regolare, è della stessa grandezza. Il passaggio successivo lo lascio fare a te come esercizio finale ed è quello di creare un’animazione che scali la particella a seconda del colore, dai un’occhiata ad una candela e vedrai che la forma è tipo una goccia d’acqua che sta per uscire dal rubinetto, quindi panciuta in basso e a punta in alto con un’andamento scalare, questo sarà il tuo compito fare in modo che la particella diventi come la vuoi tu. Ricorda di inserire un Actuator per questa ultima parte.

Consigli

  • Il primo è sicuramente quello di evitare di appesantire il motore di gioco inserendo particelle come se piovesse, ma questo penso che l’avrai capito.
  • La forma circolare della particella è molto malleabile, ma è possibile creare texture di diversa forma per dare vita a particella personalizzate.
  • Sperimenta, sperimenta, sperimenta e sperimenta.
  • Le particelle sono la parte grafica che rende il tuo gioco accattivante, se vai su youtube e vedi i giochi creati dagli altri utenti vedrai che sono privi di particelle e quindi poco appetibili (non tutti giusto).
  • Il movimento delle particelle è legato al tipo che vuoi realizzare, il fuoco va verso l’alto, ma l’acqua di un rubinetto scorre decisamente dalla parte opposta; guarda il mondo attorno a te per capire come implementare le particelle che servono al tuo gioco, questo se il gioco è simil-reale, se fai un gioco fantasy di sicuro puoi sbizzarrirti e inventare particelle adatte al tuo gioco.

Con questo è tutto, il prossimo articolo, quello finale per questa serie sulla grafica, sarà una sorta di appendice di questo, parlerò delle particelle voxel (create con oggetti primitive) che a differenza di questa tipologia hanno una fisica e interagiscono con il mondo virtuale che stai creando. Ho già realizzato una prova che puoi vedere in questo VIDEO dove l’acqua della fontana è creata da dei cubi. Come sempre fai molta pratica e buon Game Engine.