THINKING PARTICLES - INTERFACCIA.


Thinking Particles è un sistema particellare di tipo RULE-BASED, e si differenzia ad esempio dal Particle Flow, che è invece unsistema EVENT-DRIVEN.

Un sistema Event-Driven si basa sui "triggers", ovvero eventi che devono accadere a un certo punto nel tempo per attivare uno specifico effetto per il sistema particellare. Un sistema Rule-Based invece funzione a precindere dal tempo e si basa su condizioni generali per impostare il comportamento delle particelle.
Ad esempio consideriamo delle particelle che si suddividono quando una collide con un'altra. Questo è un evento che avviene in base a particolari keyframe posizionati nel tempo che indicano l'istante in cui avviene la collisione. Questo è il caso di un sistema Event-Driven.
Al contrario con Thinking Particle il comportamento delle particelle è definito in base a delle regole indipendnenti dal tempo.

Ad esempio, consideriamo una astronave che viaggia attraverso un campo di meteoriti. Con Thinking Particle possiamo dire all'astronave di evitare i meteoriti grandi e invece collidere con quelli piccoli, lungo il suo percorso, stabilendo delle regole che ad esempio mettono in gioco la grandezza dei meteoriti per effettuare dei controlli (evitare oppure collidere), ma che non contemplano alcuna variabile temporale.

Per creare un sistema Thinking Particle vai qui:

Poi clicca una volta nella vista. Apparirà l'icona del sistema particellare:

 

 

 

 

 

 

I parametri del sistema sono questi:

Clicca su PROPERTIES (oppuire ALT+SHIFT+P) e si aprirà il pannellone dei comandi:

Il pannello è diviso in 4 parti principali.

La zona in alto a sinistra è la PARTICLE GROUP TREE VIEW. Qui si definiscono i differenti Groups in cui contenere le particelle.

La zona in basso a sinistra è la DYNAMICSET TREE VIEW. Qui si organizzano gli insiemi di nodi e operatori.

La zona centrale è la MAIN WIRE SETUP VIEW. Questa è la zona in cui vengono creati i collegamenti fra i nodi e gli operatori.
I nodi e gli operatori che appaiono qui dipendono da quale Dynamic Set è statao selezionato nella DynamicSet Tree View.

Sulla destra appaiono i comandi di creazione e di modifica degli elementi selezionati nel Main Wire Setup View.

EDIT ON THE FLY.
Se è attivo, è possibile modificare il sistema mentre l'animazione procede nella vista.

Sulla barra superiore appaiono delle informazioni relative alle particelle generate dal sistema.

 


PARTICLE GROUP TREE VIEW.


Da qui è possibile organizzare eventi di animazione e oggetti in gerarchie, e definire raggruppamenti di particelle.

La particelle possono essere divise in Groups, i quali a loro volta possono contenere dei sottogruppi. In questo modo è possibile definire animazioni che influiscono solo su certi gruppi di particelle e non su altri.
Le particelle associate a un gruppo, non lo sono permanentemente, ma possono passare da un gruppo a un altro in base a certe condizioni.
Per default, viene utilizzato il gruppo ALL come gruppo di base e non può essere cancellato. Esso rappresenta la root di ogni gerarchia che viene definita. In questo modo è possibile accedere a tutte le particelle indipendentemente dalle sottocatene gerarchiche create.

Thinking Particle necessita di un solo sistema particellare per potere gestire più comportamenti differenti per le particelle. E tutti sono collegabili tra di loro tramite le gerarchie, in modo tale da potere gestire variazioni di un aspetto dell'animazione particellare indipendentemente dall'impostazioni di keyframe nel tempo.

Per creare un nuovo gruppo di particelle, clicca sul pulsante CREATE.

Rinominalo.

I gruppi creati possono essere spostati utilizzando i pulsante UP e DOWN, oppure trascinandoli direttamente al livello desiderato. Questa operazione di annidamento dei gruppi è chiamata NESTING.

Tutte le modifiche applicate a un gruppo che si trova a un livello superiore vengono sentite su tutti i gruppi dei livelli inferiori.


DYNAMICSET TREE VIEW.

Il DynamicSet è un altro tipo di gerarchia che contiene operatori, helper e condizioni che dicono ai gruppi di particelle cosa fare. In questo modo è possibile assegnare un insieme di regole tramite uno specifico DynamicSet a un singolo gruppo di particelle, e usare un altro DynamicSet per un gruppo differente e così via.
Anche qui è possibile definire delle gerarchie, di istruzioni questa volta.
Quindi nel Particle Group si definiscono gerarchie di gruppi di particelle, mentre nel DynamicSet si definiscono gerarchie di dinamiche (cioè gruppi di condizioni per il loro comportamento) per le particelle.

Il MasterDynamic è la root della gerarchia generale del DynamicSet Treee non può essere cancellato. Tutti i Dynamic Set creati finiscono sotto il Master Dynamic, e al loro interno possono essere definiti dei sub-Dynamic Set, analogamente all'operazione di nesting che si può fare sui gruppi di particelle.

Clicca sul pulsante CREATE per creare un DynamicSet. Puoi anche modificare l'ordine con i pulsanti UP/DOWN oppure trascinare i DynamicSet direttamente.

Durante il trascinamento, se il punto di arrivo è il nome dei Dynamic Set, quello trascinato viene spostato in alto in basso rispetto a questo.
Se invece il punto di arrivo è l'icona del Dynamic Set, quello trascinato finisce al suo interno.

SHIFT+ trascinamento: copia di un Dynamic Set.

E' possibile disattivare un DynamicSet cliccandoci sopra col destro.

Le gerarchia dei Dynamic Set viene analizzata con una logica dall'alto in basso per definire l'applicazione di regole e quindi l'evolvere dell'animazione particellare.


DYNAMICSET CACHING

Cliccando col destro su un Dynamic Set si apre questo menù:

CACHE RECORD.
Permette di registrare un Dynamic Set su hard disk. in quesot modo è possibile risparmiare calcoli per generare da capo il comportamento quando il Dynemic Set viene richiamato.
Le limitazioni sono le seguenti:
- Le particella cached non possono essere modificate nel loro comportamento (a meno di registrare nuovamente il Dynamic Set).
- I DynamicSet registrabili devono essere completi, ovvero contenere un Generator.
- I Dynamic Sets disattivi non riprodurranno le loro caches.

CACHE UNSET.
Cancella i file cache registrati per il Dynamic Set.


Consideriamo il la MAIN WIRE SETUP VIEW.

In questa zona appaiono dei riquadri a seconda dell'elemento selezionato nel DynamicSet Tree View. Gli elementi del DynamicSet Tree View si comportano come dei contenitori, e la Main Wire Setup View mostra il loro contenuto. Qui vengono connessi tutti i vari operatori e condizioni insieme per definire una animazione particellare inerente uno specifico Dynamica Set.

Ad esempio creiamo 2 Dynamic Set e selezioniamone uno.

Nella Main Wire Setup View apparirà questo:

A destra invece appare, oltre ai parametri generali del Dynamic Set selezionato, anche il pannello di creazione con il quale è possibile definire gli operatori per il Dynamic Set (che appariranno sia nel DynamicSet Tree View che all'interno della Main Wire Setup View):

Il pannello di creazione è automaticamente impostato sulla sezione Groups, all'interno della quale appaiono i gruppi di particelle create nel Particle Group Tree View.

 

Occorre fare attenzione all'ordine con cui vengono aggiunti i vari operatori: influirà sull'animazione finale.

Per inserire degli elementi nella Main Wire Setup View seleziona un Dynamic Set e poi nel pannelo Create seleziona un elemento e clicca nella vista. Prendine uno per ogni categoria.


Gli elementi hanno delle iniziali:
O: gruppi e operatori.
C: condizioni.
H: helper
D: BlackBox (si tratta di Dynamic Set salvati).

Una volta aggiunti operatori, questi possono essere connessi tra di loro.


INPUT E OUTPUT DATA STREAM

Gli Input Data Stream si trovano sul lato sinistro dell'operatore, gli Output Data Stream si trovano sulla destra.
Alcuni parametri di un elemento possono essere sovrascritti dagli Input che esso riceve. Gli Output invece si occupano di portare fuori dall'elemento dei valori che possono essere utilizzati per i parametri di un altro elemento.

Per default sugli elementi sono visualizzati gli Input e gli Output più comuni, per vedere quelli nascosti clicca sul cerchietto verde sopra la colonnina degli Input o degli Ouput.

Cliccando con il destro sul nome dell'operatore, è possibile fare apparire altre opzioni di visualizzazione degli Input e Output.


CONNESSIONE DI BLOCCHI E TIPI DI DATI.

Per connettere 2 operatori, clicca su un Output e trascina sopra un Input.

Per rimuovere una connessione tieni premuto SHIFT e clicca sull'input oppure l'output.

Ogni Input rappresenta un tipo di dati, perciò può essere collegato solo a particolari output corrispondenti.
Ad esempio non è possibile connettere un output di tipo Rotation in un input di tipo Position.

Il tipo di dati è indicato andando sopra il parametro di output o input del blocco. Apparirà un tag con indicato tra parentesi il tipo di dati.

Quando si trascina un output su un input di un altro blocco, tutti gli input che possono accoglierlo si accendono.

Lasciando il pulsante si crea la connessione.

Le connessioni non consentite.....semplicemente non possono essere realizzate.

Alcuni tipi di dati vegono automaticamente convertiti per rendere comunque valida una connessione.


VALIDAZIONE DEI DYNAMICSET.

Quando si crea un nuovo DynamicSet, questo è impostato come Invalid. E' segnalato in alto a sinistra nella Main Wire Setup View.

Per renderlo valido occorre fornire fin dall'inizio tutti i dati necessari per gli operatori e le condizioni stabilendo i collegamenti tra i vari blocchi. Alcuni operatori presentano degli Input che richiedono necessariamente dei dati in ingresso. In questo caso appaiono evidenziati in giallo. Se questi non sono collegati, il DynamicSet resta non valido.


DynamicSet non valido....


....e valido.


CREAZIONE DEGLI ELEMENTI.

Quando si crea un DynamicSet appare un pannello contenente diversi elementi che possono essere creati:

Seleziona la categoria, poi clicca sul pulsante di creazione dell'elemento e poi nella Main Wire Setup View.

Da sinistra a destra i pannelli contentono queste categorie di elementi:

- GROUPS.
Qui sono disponibili tutti i gruppi creati all'interno della Particle Group Tree View.

- CONDITIONS.
Condizioni del tipo "IF-THEN".

- OPERATORS.
Operatori utilizzati per definire le regole dell'animazione particellare.

- HELPERS.
Sevono a rifinire le animazioni.

- BLACK BOX.
Si tratta dei DynamicSet salvati che possono essere riutilizzati.

Quando si crea un elemento i suoi parametri vengono visualizzati a destra.

Questi parametri possono essere controllati dinamicamente a seconda dei flussi di dati che si collegano ad essi, e provenienti da altri blocchi.


SIMULAZIONE DINAMICA.

Thinking Particles possiede un sistema di simulazione dinamica per corpi rigidi. I metodi con cui sono calcolati gli urti sono 2:

- Particle Based (semplificato).
- Face-to-Face (più accurato).

Per ottenere simulazioni realistiche è necessario utilizzare dimensioni realistiche per gli oggetti e per le distanze fra di essi.

Con il metodo Particle-Based ogni particella viene considerata sferica e con raggio costante.

Con il metodo Face-to-Face gli urti sono calcolati in maniera più accurata perchè viene considerata effettivamente la geometria delle particelle.

In entrambi i casi, se degli oggetti coinvolti nella simulazione si intersecano al principio della simulazione dinamica vengono generati degli errori durante il calcolo della simulazione.

Per definire le collisioni il tempo viene campionato in Frame e Sub-Frame. Il Sampling Range è un intervallo di tempo considerato all'interno della durata di un Frame. Per ogni Sampling Range il sistema controlla se avviene una collisione all'interno del sistema dinamico. All'aumentare del sampling range la simulazione è meno accurata (all'interno di un singolo frame vengono infatti effettuati meno controlli di urto).

Il campionamento è controllato dal MasterDynamic, alla sezione Viewport e Render SubSampling.

In modalità Face-to-Face conviene impostare i Samples a un valore di 80-120 per ottenere una simulazione decente. In genere occorre aumentare questo valore se nella simulazione intervengono particelle o oggetti che si muovono velocemente.


Un particolare tipo di operatori sono gli INITIATOR.

La funzione degli Initiators è quella di semplificare il calcolo dell'animazione. Tutti gli operatori e le condizioni connessi a un Initiator vengono valutati solo dopo che lo è stato l'Initiator, anche se questi operatori e condizini appaiono nella DynamicSet View sopra all'Initiator.

Esempio:

Anche se nel DynamicSet Tree View (DSTV)è indicato che il Repulsion Bounce e il Fragment dovrebbero essere calcolati PRIMA deo PPassAB, invece non saranno calcolati secondo l'ordine in cui appaiono. Poichè sono connessi al PPassAB, soltanto quando questo viene calcolato lo saranno anche gli operatori connessi ad esso, seguendo l'ordine con cui appaiono nel DSTV (Repulsion Bounce, poi il Fragment).

Attenzione: questo comportamento si applica agli operatori connessi soltanto all' Initiator.