CAPITOLO 6 SISTEMA DI ANIMAZIONE In questo capitolo sarai edotto sulle caratteristiche di base del sistema di animazione di Real 3D. L'apprendimento è impostato su esempi e dopo poche pagine sarai in grado di creare animazioni di pesci che nuotano, robots che camminano, uccelli che volano etc. Questa sezione non è intesa a spiegare la modellazione delle forme libere o di altre tecniche di creazione degli oggetti, quindi quelli che useremo sono molto facili e veloci da creare. Gli esempi di animazione possono essere trovati nel pacchetto del programma. Può essere una buona idea dargli una occhiata prima di procedere, magari solo per sapere dove trovarli mentre segui gli esercizi. Tutti i files delle scene sono inclusi, così nel caso non riuscissi a creare qualcuno di questi esempi, puoi paragonare i tuoi oggetti con quelli degli esempi che si trovano nella directory 'Examples/Animation' per capire le ragioni dell'insuccesso. Bene, è tempo di cominciare il primo esempio. Avvia Real 3D con una finestra View ed una Select. Dato che renderemo la nostra animazione usando solo le gabbie, usa uno schermo a 4 colori (depth=2) per mantenere la velocità di aggiornamento delle finestre ad un alto livello. 6.1 PERCORSO Un modo comune di creare le animazioni è di spostare gli oggetti lungo dei percorsi. Un percorso può essere una linea retta, una curva levigata, un ellisse, un cerchio perfetto o qualsiasi altro percorso tridimensionale tu voglia creare. Il metodo chiamato PATH è pensato allo scopo e può essere usato per definire qualsiasi tipo di movimenti per gli oggetti. 6.1.1 MUOVI L'OGGETTO LUNGO UN PERCORSO Creiamo un semplice logotipo che si muove lungo un percorso. 1. Crea un oggetto-livello chiamandolo 'Logo' tramite il menù Create/Structure/Level e rinominandolo con la funzione Modify/Properties/Name. 2. Crea quattro caratteri 3D sotto al livello 'Logo' usando la funzione Create/Visibles/Polyhedron. 3. Crea un oggetto metodo allo stesso livello dell'oggetto 'Logo': seleziona il menù Create/Structure/Method, seleziona PATH e premi OK. Chiama il tuo oggetto 'Mover' così da poterlo facilmente riconoscere poi. 4. Crea una curva chiusa (p.e. Controls/B-Spline Closed) sotto all'oggetto metodo. Questa curva traccia il percorso per il logo. Ora la tua animazione è pronta, per quanto concerne Real 3D. Per avviarla seleziona il menù Animate/Control/Play_Forwards e vedrai come il tuo testo 3D segue il percorso. Figura T6-1: Il logo 3D che segue un percorso B-Spline. Esaminiamo la terminologia usata in questo esempio. Accertati di comprendere la seguente descrizione perchè useremo questi termini in tutta questa sezione. - Gli oggetti che devono essere animati sono chiamati oggetti 'bersaglio'. Possono essere qualsiasi tipo di oggetti come primitivi, sorgenti di luce, textures o persino altri oggetti gerarchici animati. - Un oggetto 'Metodo' modifica gli oggetti bersaglio creando una animazione. - La curva compresa nell'oggetto metodo è definita come oggetto 'Parametro' per decidere come animare i bersagli (in questo caso che tipo di percorso il testo dovrebbe seguire). Un oggetto parametro può essere qualsiasi oggetto 'calcolabile' come una linea poligonale, un cerchio, o persino una forma libera reticolare. In altre parole, gli oggetti 'metodo' modificano gli oggetti 'bersaglio' conformemente ai 'parametri' dei 'metodi'. 6.1.2 MUOVI DEGLI OGGETTI LUNGO UN PERCORSO COME UN SERPENTE Nell'esempio precedente, tutti i caratteri 3D sono stati creati dentro all'oggetto livello chiamato 'Logo' così che c'era un solo oggetto bersaglio per 'Mover'. Se avessimo creato tutti i caratteri allo stesso livello di 'Mover', il risultato sarebbe stato piuttosto differente. Proviamolo: 1. Cancella il progetto attuale con Project/Project/New e crea quattro caratteri sotto all'oggetto 'root'. 2. Crea l'oggetto metodo PATH allo stesso livello gerarchico dei caratteri. 3. Sotto all'oggetto metodo crea una curva B-Spline che attraversi tutti i caratteri. Figura T6-2: Animazione 'muoversi lungo un percorso come un serpente. Animate/Control/Play_Forward per avviare l'animazione e l'oggetto metodo PATH sposta individualmente gli oggetti bersaglio. 6.1.3 SFERA RIMBALZANTE Come forse avrai già notato il metodo PATH può produrre accellerazioni e rallentamenti conformemente alle distanze tra susseguenti punti nodali della curva parametro usata per definire il movimento. Più lunga è la distanza tra due nodi successivi, più alta sarà la velocità, e vice versa. Questo esempio mostra un vantaggio del sistema di animazione di Real 3D: tutte le informazioni necessarie per animare gli oggetti sono parte integrante degli stessi oggetti. Quando si duplica un oggetto (p.e. una sfera rimbalzante), anche tutti i dati di animazione saranno duplicati, ottenendo quindi due sfere rimbalzanti. Le sfere rimbalzanti, o qualsiasi altro oggetto animato, potrà essere salvato e ricaricato in un'altra scena, dove continuerà a rimbalzare. Per creare una sfera rimbalzante: 1. Crea una sfera nell'angolo superiore sinistro della finestra. 2. Ora definisci il moto della sfera, come nella figura T6-3. Seleziona la funzione Animate/Create/Path e traccia una curva di controllo poligonale B-Spline, che definisce il movomento per la sfera. Creando punti tripli è possibile portare la velocità a zero; quindi, clicca i primi tre punti di controllo al punto centrale della sfera in modo che la sua velocità iniziale sia nulla. Più la sfera scende, e maggiore la velocità, cioè la distanza tra i punti di controllo dovrà essere maggiore. Termina la curva cliccando PDM. 3. Real 3Dcrea un livello sotto cui pone la sfera con il metodo ed il suo percorso parametro. Rinomina il nuovo oggetto livello 'Boing'. Figura T6-3: Sfera rimbalzante. Maggiore la distanza tra i nodi e maggiore la velocità. 4. Ora hai creato una sfera rimbalzante costituita da un primitivo sfera e da un metodo PATH. Avviala e rimbalza. 5. Animate/Control/Play_Backwards per vedere l'animazione partendo dalla fine. 6. Ora duplica l'oggetto 'Boing', spostala un poco ed avvia l'animazione. Il risultato sarà di due sfere che rimbalzano. 7. Avviando l'animazione entrambe le sfere si sono mosse immediatamente raggiungendo il punto finale del loro percorso al termine dell'animazione. Questo può comunque essere cambiato definendo il punto iniziale e finale per i metodi. Seleziona il metodo muovendo la prima sfera, seleziona Modify/Properties/Animation ed attiva i pulsanti End e Start. cambia il tempo finale dal preimpostato (1) a 0.7. Questo significa che il metodo comincia ad operare immediatamente ma si ferma quando il tempo raggiunge 0.7. Fai lo stesso anche per il metodo della seconda sfera, ma ora usa i valori Start=0.4, End=0.1. Avvia l'animazione e le sfere rimbalzano. 6.1.4 ANIMAZIONI GERARCHICHE E SFERA RIMBALZANTE In questo esempio imparerai come creare animazioni gerarchiche. In altre parole come animare oggetti già animati. Consideriamo la seguente situazione: una sfera rimbalza su e giù seguendo un percorso circolare mentre un altro metodo muove l'intero sistema lungo un altro percorso. 1. Crea una sfera e seleziona il menù Animate/Create/Path. Definisci un bel tracciato che muova la sfera solo in su e giù. Usa il tasto di ritorno per chiudere la curva. Quindi rinomina l'oggetto livello 'ellipsoid' in 'UpDown'. 2. Seleziona l'oggetto metodo (lo trovi sotto 'UpDown') e ridefinisci Frequency a 10 usando il requester Modify/Properties/Animation. 3. Avvia l'animazione (Animate/Control/Play Forwards; la sfera rimbalzerà su e giù per dieci volte durante l'animazione. 4. Seleziona Animate/Control/Goto Beginning per riportare il tempo a zero. 5. Seleziona l'oggetto UpDown e definisci un nuovo movimento orizzontale per questo tramite Animate/Create/Path. Avvia l'animazione, e la sfera rimbalzerà su e giù seguendo un altro percorso. FiguraT6-4: Una animazione gerarchica. Un oggetto muove lungo un percorso mentre entrambi si spostano lungo un altro travcciato. 6.1.5 MUOVERE UN RETICOLO ELASTICO B-SPLINE LUNGO UN PERCORSO Questo esempio mostra come una B-Spline può essere suddivisa usando i gruppi, e come questi gruppi possono essere animati in modo che il reticolo si muova lungo un percorso; un po' come un tappeto volante. 1. Crea un reticolo usando la funzione Create/Freeform/Mesh. La dimensione predisposta 8x8 è ottimale. 2. Seleziona la funzione View/Drawing_Set, attiva il pulsante C.Polyg e disabilita Curve. Questo ti permetterà di controllare il reticolo B-Spline tramite il suo poligono di controllo. 3. Rendi il reticolo il livello attuale cliccando due volte sul suo nome nella finestra Select. Accertati che sia ancora selezionato. 4. Suddividi orizzontalmente il reticolo in sotto-gruppi (crea 'columns' e non 'rows') selezionando per trascinamento tenendo premuti contemporaneamente i tasti [Ctrl] e Maiuscole. 5. Seleziona il menù .Create/Structure/Method, scegli il metodo PATH e clicca OK, per creare un percorso metodo allo stesso livello dei gruppi. 6. Rendi l'oggetto metodo PATH il livello corrente e crea un percorso usando la funzione Create/Control/B-Spline_Ctrlp. Chiudi il percorso con il tasto di ritorno e terminalo con il PDM. Avvia l'animazione ed il tuo reticolo seguirà il percorso in modo molto realistico. Figura T6-5: Reticolo elastico che segue un percorso. 6.1.6 TESTA PARLANTE Questo esempio dimostra come un percorso ed i gruppi possono essere usati per creare oggetti di forma libera animati come p.e. teste parlanti. L'idea è molto semplice: un gruppo si riferisce ai punti desiderati della testa e segue un percorso. 1. Poichè una buona testa 3D richiederebbe qualche minuto per la realizzazione, usiamo semplicemente una curva B-Spline per rappresentare il profilo di un viso. Ciò può richiedere solo pochi secondi. Rendi la curva il livello corrente. 2. Seleziona i punti desiderati per trascinamento tenendo premuto il tasto Maiuscole, o usando la funzione Extras/Vectors/Lasso. 3. Crea un oggetto gruppo conil menù Create/Structure/Group. 4. Scegli il menù Animate/Create/Path e definisci un percorso di movimento per la bocca. Avvia l'animazione, e la testa parlerà. Figura T6-6: Metamorfosi di una forma libera migliorata muovendo un gruppo lungo un percorso. 6.1.7 MUOVERE DEGLI OGGETTI LUNGO UN RETICOLO B-SPLINE L'idea di usare dei reticoli B-Spline per definire movimenti di oggetti è semplice ed ovvia: non devi definire un movimento separato per un oggetto che deve salire una montagna. Invece la montagna stessa può essere usata per quello scopo. 1. Crea tre sfere da muovere lungo un reticolo. 2. Crea un oggetto metodo PATH allo stesso livello delle sfere tramite il menù Create/Structure/Method. 3. Crea un reticolo B-Spline interno all'oggetto metodo usando il menù Create/Freeform/Mesh. 4. Avvia l'animazione e le tue sfere si sposteranno lungo il reticolo. Nota che può richiedere qualche attimo prima che le sfere comincino a muoversi. Sii paziente, l'animazione inizierà immediatamente dopo che tutti i dati necessari saranno stati definiti. Puoi modificare il reticolo liberamente e le sfere continueranno a muoversi su di esso. Fallo sembrare una montagna e le sfere lo scaleranno. Figura T6-7: Muovere oggetti lungo un reticolo. 6.1.8 PERCORSI OTTIMIZZATI Il metodo PATH richiede un parametro che è usato semplicemente per definire come gli oggetti bersaglio dovrebbero muoversi. il tipo di parametro può essere un primitivo 'calcolabile' qualsiasi come un cerchio, una linea poligonale, una curva B-Spline o persino un reticolo. Quasi tutti i tipi di movimenti possono essere creati usando questi percorsi. Inoltre, i movimenti possono essere sommati creando animazioni gerarchiche come illustrato dall'esempio 6.1.4. Prima di arrivare al punto, ricorda che la seguente descrizione ti illustra come puoi creare nuovi primitivi 'calcolabili'. In altre parole li potrai usare con tutti i metodi, non solo con PATH. Per questo esempio, devi creare una sfera ed animarla usando la funzione Animate/Create/Path. Useremo la curva B-Spline per definire un percorso per la sfera, ed una formula rifinire il percorso così che la sfera vibri mentre si muove lungo il percorso. 1. Seleziona la curva B-Spline ed usa il menù Modify/Properties/Tags. Aggiungi il seguente TAG alla curva: SFORx+=0.2*sin(t*20*PI), y+=0.2*cos(t*20*PI) 2. Avvia l'animazione e la sfera vibrerà muovendosi lungo la curva. La variabile 't' è un tempo, mentre x, y e z definiscono i punti sulla curva corrispondenti al tempo. vedi la sezione di riferimento per una completa descrizione delle variabili per i parametri calcolabili. Ora puoi salvare questa curva definita ed in qualunque momento avrai bisogno di un movimento vibrato simile, la potrai caricare. Se le formule non possono essere usate per risolvrere i tuoi problemi, puoi scrivere una funzione RPL dove potrai utilizzare espressioni condizionali quali IF ELSE ENDIF, cicli come DO LOOP, variabili, etc. per definire i movimenti desiderati dei tuoi oggetti. Consideriamo la seguente situazione: una sfera segue un percorso B-Spline e quando l'animazione raggiunge il suo punto centrale, la sfera comincia a vibrare. Per poterlo realizzare, devi creare un programma RPL che usi la struttura IF ENDIF: 1. Avvia il tuo editore di testo favorito, scrivi il seguente programma RPL e salvalo come 'vibrapath.rpl': :VibratePath tF@0.5F>(if t>0.5) IF "x+=0.2*sin(t*20*PI) y+=0.2*cos(t*20*PI)" EVAL DROP ENDIF ; 2. Crea un'altra sfera seguendo un altro percorso ed includi il seguente TAG alla curva B-Spline: SRLP VibratePath 3. Esegui il tuo programma RPL selezionando il menù Project/Macros/Execute_Named e selezionando il file 'vibrapath.rpl'. Avvia l'animazione e la sfera comincerà a vibrare quando il tempo raggiungerà il valore 0.5. Ora è giunto il momento di abbandonare il metodo PATH (ci sono ancora altri 23 metodi da esaminare). Gli esempi che abbiamo sin'ora esaminato dovrebbero darti un'idea su come puoi risolvere tutti i possibili ed impossibili problemi di 'movimento guidato'. 6.2 ROTAZIONE Mentre il motodo PATH può essere usato per muovere gli oggetti lungo gli oggetti parametro, il metodo ROTATION ti permette la rotazione degli oggetti attorno agli oggetti parametri. Come preimpostato, gli oggetti bersaglio compiono una rivoluzione a velocità costante. Usa la proiezione prospettica (Perspective) nei prossimi esempi, così che sia più facile vedere come gli oggetti sono ruotati. 6.2.1 RUOTARE GLI OGGETTI ATTORNO AD UN ASSE 1.Crea un cubo 2. Crea un metodo ROTATION: seleziona il menù Create/Structure/Method, scegli ROTATION dalla lista dei metodi e premi OK. 3. Crea un asse all'interno dell'oggetto metodo tramite il menù Create/Control/Axis. Avvia l'animeazione ed il tuo cubo ruoterà attorno all'asse. Figura T6-8: Un cubo ruota attorno all'asse con velocità costante. La cosa ovvia qui è la direzione della rotazione. E' definita usando la così detta Right Hand Rule: se il pollice della tua mano destra punta verso l'asse, le tue dita mostrano la direzione della rotazione. In altre parole, se cambi la direzione dell'asse ribaltandolo anche la direzione della rotazione sarà invertita. 6.2.2 ROTAZIONI CON VELOCITÀ E DIREZIONI DIVERSE In questo esempio creeremo alcuni oggetti rotanti con velocità e direzioni differenti. 1. Crea un cubo, un poliedro ed una piramide. 2. Seleziona il cubo ed il menù Animate/Create/Rotation. Questa funzione ti permette di creare rotazioni definendo un primitivo 'coordsys'. Avvia l'animazione ed il tuo cubo sarà ruotato attorno all'asse 'x' del primitivo 'coordsys'. Poi seleziona Animate/Control/Goto Beginning. Figura T6-9: Modificare gli attributi di rotazione. 3. Seleziona l'oggetto metodo che fa ruotare il tuo cubo e seleziona il menù Modify/Properties/Animation. Attiva i pulsanti Start, End e Frequency e definisci i seguenti valori: Start=0.0 End=0.3 Frequency=0.33 Questo farà ruotare il cubo solo per un terzo del ciclo completo durante l'intervallo 0...0.3. Poi si fermerà. 4. Ora seleziona il poliedro ed applica ad esso Animate/Create/Rotation. Quindi seleziona il nuovo metodo e definisci i seguenti parametri: Start=0.3 End=0.6 Frequency=0.5 Questo fisserà il poliedro sino a che il tempo raggiunge il valore 0.3. Quindi il poliedro ruota di 180 gradi e si ferma quando il tempo raggiunge il valore 0.6. 5. Seleziona la piramide, applica la funzione Animate/Create/Rotation ad essa e definisci i seguenti valori per il metodo ROTATION: Start=0.6 End=1.0 Frequency=-1 Questo farà ruotare la piramide -360 gradi quando il tempo raggiunge il valore 0.6. Avvia l'animazione e vedi come gli oggetti compiono le loro rotazioni uno dopo l'altro. 6.2.3 ROTAZIONI GERARCHICHE Anche le rotazioni, come i percorsi, possono essere raggruppate gerarchicamente. 1. Crea un rettangolo 2. Fallo ruotare lungo il suo lato sinistro selezionando il menù Animate/Create/Rotation. 3. Seleziona la funzione Modify/Structure/Copy: questo crea una copia del rettangolo ruotante nel buffer di memoria. Quindi rendi il livello che contiene il rettangolo originale ed il metodo di rotazione il livello corrente. 4. Incolla il rettangolo ruotante dal buffer di memoria con Modify/Structure/Paste. Muovi la copia leggermente verso sinistra e rendila il livello corrente. 5. Incolla e sposta un'altra copia ed avvia l'animazione. Avrà un andamento molto carino. Figura T6-10: Rettangoli animati Gerarchicamente. 6.2.4 TORNADO Prima di provare l'esempio successivo, seleziona il menù View/Drawing Set e disabilita il pulsante Curve ed attiva quello C.Polyg. Questo ti permette di manipolare il reticolo B-Spline tramite il poligono di controllo ed abbrevia la rigenerazione dello schermo. 1. Crea un Tornado B-Spline (realizzallo facendo ruotare una curva profilo attorno ad un asse usando Create/Freeform/Rotate). 2. Rendi il reticolo tornado il livello corrente e suddividilo verticalmente in sotto-gruppi usando le funzioni Vector/Lasso e Create/Structure/Group. Crea un gruppo per ogni curva isometrica orizzontale del reticolo. Figura T6-11: Il reticolo tornado diviso in sotto-gruppi. 3. Gira l'orientamento della vista sino a che potrai vedere il tornado dall'alto ed applica Animate/Create/Rotate a tutti i gruppi in mdo che tutti ruotino attorno ai loro punti centrali. 4. Ora definisci differenti velocità per i diversi livelli del tornado (il primo cerchio superiore dovrà ruotare una volta sola, il secondo due, etc.). come ti ricorderai ciò può essere compiuto semplicemente cambiando la frequenza dei metodi. 5. Cambia l'orientamento della finestra View in modo da osservare il tornado lateralmente. Apri il requester View/Drawing Set, attiva Curve, e disabilita Ctrl.polyg, impostando Surface Subdivision a 5. Quindi avvia la tua animazione. Wow, proprio come un tornado! 6.3 MOVIMENTO CIRCOLARE Il metodo di movimento circolatorio (Sweep) è progettato allo scopo di ruotare gli oggetti con accelerazioni e decelerazioni arbitrarie. Veramente è uno degli strumenti più potenti per creare animazioni di 'personaggi', come umani o robot che camminano. Il metodo richiede due parametri: il primo definisce un punto centrale per la rotazione ed il secondo per stabilire come l'oggetto è ruotato. La rotazione è eseguita esattamente allo stesso modo usato per ruotare gli oggetti usando il mouse e la funzione Modify/Linear/Rotate. Quindi il primo parametro è solitamente solo un primitivo offset, ed il secondo qualchhe tipo di curva che definisce un sentiero per alcuni punti dell'oggetto. Il metodo cerca di muovere quei punti seguendo il percorso definito mantenendo fissi i punti definiti dal primo parametro, facendo così ruotare l'oggetto. 6.3.1 GAMBE CHE CAMMINANO 1. Disegna un profilo di una coscia usando una curva B-Spline. 2. Seleziona la funzione Animate/Create/Sweep definendo poi il punto centrale della ruotazione. Poichè la coscia normalmente si articola dal fianco, clicca con PSM sull'estremità superiore. 3. Disegna un percorso chiuso per il ginocchio (parte inferiore della coscia); usa il tasto di ritorno e PDM per chiudere e terminare la definizione del percorso. 4. Rendi il livello creato dalla funzione Sweep il livello corrente e disegna il polpaccio allo stesso livello gerarchico della coscia. 5. Applica la funzione Animate/Create/Sweep al polpaccio in modo che ruoti all'altezza del ginocchio. Figura T6-12: Struttura della gamba. La parte superiore della coscia è fissata all'anca mentre il ginocchio segue una curva B-Spline. La parte superiore del polpaccio è fissata al ginocchio mentre un percorso per la caviglia è definito da una B-Spline: A causa della costruzione gerarchica, i parametri usati per la rotazione del polpaccio ruotano insieme alla coscia. Avvia l'animazione, e la gamba si comporterà come una gamba vera. Comunque, per farla agire perfettamente, dobbiamo analizzare come agisce una gamba reale. La prima osservazione è che il polpaccio e la coscia formano una linea retta sinchè la gamba inizia il suo movimento dalla posizione arretrata. In altre parole, il nostro polpaccio non dovrà essere ruotato sinchè il tempo raggiunge il valore 0.5. Quindi, definisci il tempo d'inizio (Start) del metodo Sweep coscia a quel valore, imposta il valore finale (End) a 1.0 ed avvia l'animazione. Ora il polpaccio non dovrebbe essere ruotato sinchè la gamba inizia a ruotare indietro alla sua posizione iniziale. Come creare un'altra gamba? 1. Duplica la gamba. Ora hai due gambe che funzionano ugualmente. 2. Seleziona il metodo che ruota la coscia della gamba duplicata e definisci Phase=0.5 tramite la funzione Modify/Properties/Animation. Avvia l'animazione e... avrai due gambe che camminano. 6.3.2 PUNTARE IL FUCILE In questo esempio ti illustreremo come usare 'Links' affinchè gli stessi oggetti definiscano i movimenti per metodi differenti. Qualaunque oggetto parametro di un metodo può essere sostituito da un oggetto vincolo (Link) che si riferisce al parametro attuale. Il parametro può trovarsi ovunque nella gerarchia dell'oggetto, e più di un vincolo può puntare ad esso. Considera la seguente situazione: una sfera segue un percorso ed indipendentemente da dove andrà, il fucile punterà sempre ad essa. Per realizzarlo: 1. Crea una sfera e definisci un percorso per questa usando Animate/Create/Path. 2. crea un oggetto livello e chiamalo 'Gun', allo stesso livello dell'oggetto della sfera in movimento. Rendilo il livello corrente. 3. Crea un oggetto fucile sotto a quel livello, che miri alla sfera. 4. Seleziona Create/Structure/Method e crea un metodo SWEEP. Crealo allo stesso livello dove si trova il fucile: lo scopo è di animarlo. Rendi il livello del metodo il livello corrente. 5. Definisci un centro di rotazione per il fucile creando un primitivo offset sotto al livello metodo; questo è il primo parametro di movimento circolare. 6. Seleziona la curva B-Spline usata per definire un movimento per la sfera e seleziona la funzione Create/Structure/Link. Seleziona 'link' e Modify/Structure/Cut. Quindi rendi il metodo del movimento circolare il livello corrente ed incolla 'link' con Modify/Structure/Paste sotto al metodo. Il vincolo agirà come secondo parametro del movimento circolare. Avvia l'animazione, ed il tuo fucile sarà sempre ruotato verso la sfera. Crea un altro fucile duplicando l'originale (il completo fucile ruotante), muovilo in un'altra posizione e ruotalo in modo che punti ancora verso la sfera, e quando avvierai l'animazione, entrambi i fucili seguiranno la sfera. Figura T6-13: Quattro fucili che prendono di mira una sfera. Le ruotazioni di tutti i fucili così come il movimento della sfera sono rurri definiti dalla stessa curva. Ora modifica il percorso della sfera usando Modify/Freeform/Move Knotpoint ed avvia l'animazione. Tutti i fucili avranno automaticamente cambiato il loro comportamento così che continueranno a prendere di mira la sfera! 6.4 DIMENSIONE Il metodo Size può essere usato per ridimensionare un oggetto durante l'animazione. Richiede due parametri: il primo (solitamente un primitivo offset) è usato per definire il punto centrale del ridimensionamento, ed il secondo (solitamente qualche tipo di curva) definisce come gli oggetti bersaglio sono dimensionati partendo dal punto centrale. Quando dovrai cambiare la dimensione di un oggetto nelle tue animazioni, questo metodo può essere usato allo scopo. 6.4.1 SFERE PULSANTI 1. Crea una sfera 2. Seleziona il menù Animate/Create/Size e clicca una volta sul punto centrale della sfera. Quindi definisci una lunga ed arbitraria curva che inizia dalla superficie della sfera. Per creare una animazione ciclica, chiudi il percorso con il tasto [Ritorno]. Avvia l'animazione e la tua sfera 'pulserà'. Figura T6-14: Una sfera pulsante. Solo per sollevare un po' l'entusiasmo, creiamo qualche altra sfera pulsante: 1. Crea 10 sfere pulsanti duplicando e spostando le copie così che le sfere formino un percorso circolare (usa il Macro duplicate + rotate, se hai imparato ad usare i Macro). 2. Cambia Phase (Modify/Properties/Animation) per ogni metodo size in modo che la fase del primo metodo sia 0, la seconda 0.1, etc. Avvia l'animazione ed otterrai 10 sfere pulsanti, che producono una specie di effetto onda. 6.4.2 BOLLICINE Creiamo una animazione, dove una bolla si ingrandisce sempre più sinchè viene liberata e comincia a salire, come una bolla di vapore nell'acqua bollente. 1. Crea una sfera rappresentante la bolla e vicina al bordo inferiore della finestra View. 2. Usa la funzione Animate/Create/Size mentre la sfera è selezionata e clicca il mouse nel punto in cui la sfera dev'essere vincolata (ad una ipotetica pentola). 3. Disegna un percorso aperto che definisce la dimensione crescente per la bolla; ricorda di iniziare il percorso dalla superficie della sfera. Come al solito, Real 3D crea un livello e pone la sfera ed il nuovo metodo sotto questo. 4. Trova il metodo size sotto il nuovo livello, seleziona il metodo ed imposta il tempo Start a 0 ed il tempo End a 0.5 tramite la funzione Modify/Properties/Animation. Questo impedirà alla bolla di crescere prima che l'animazione abbia raggiunto il suo punto intermedio. 5. Seleziona l'intero livello della bolla in espansione e definisci un percorso sinuoso verso l'alto (vedi figura T6-15). 6. Seleziona l'oggetto metodo percorso creato nel passo precedente, attiva la funzione Modify/Properties/Animation e cambia il tempo Start a 0.5 così che il metodo comincerà a muovere la bolla quando la bolla sarà sufficientemente grande. Figura T6-15: La bolla cresce sempre più sinchè si muoverà verso l'alto. 6.5 ALLUNGAMENTO Questo metodo è usato per allungare gli oggetti nelle tre direzioni separatamente. Il metodo Stretch richiede due parametri: un primitivo coordsys che definisce le tre direzioni per l'allungamento, ed una curva che definisce come l'oggetto viene deformato. 6.5.1 CUBO ELASTICO Questo esempio è il più semplice possibile. Un cubo è allungato nelle tre dimensioni usando una curva B-Spline. 1. Crea un cubo 2. Scegli il menù Create/Structure/Method e crea un metodo Stretch. 3. Crea un primitivo coordsys sotto al livello method in modo che la sua origine corrisponda ad un angolo e l'asse ai tre lati del cubo. 4. Crea una curva B-Spline sotto al metodo così che cominci dall'angolo del cubo opposto all'angolo da cui origina il primitivo coordsys. Nota: Che puoi disegnare una curva tridimensionale cambiando l'orientamento della finestra View mentre tracci la curva. Figura T6-16: Cubo elastico Avvia l'animazione. Un angolo del cubo segue la curva, mentre l'altro angolo è fissato all'origine del coordsys. 6.5.2 SFERA ELASTICA RIMBALZANTE Abbiamo già creato una sfera rimbalzante. Comunque, non reagiva come una sfera elastica. Possiamo usare il metodo Stretch per aggiungere l'effetto di elasticità alla sfera rimbalzante: 1. Crea una sfera vicina all'angolo superiore sinistro della vista. 2. Seleziona Animate/Create/Stretch e disegna una curva chiusa che allunghi bene la sfera. 3. Seleziona il metodo stretch e modifica i suoi tempi start/end in modo che la deformazione cominci quando il valore del tempo raggiunga 0.4 e termini al valore 0.6. 4. Seleziona il livello che contiene sia la sfera che il metodo ed usa Animate/Create/Path. Definisci un percorso simile a quello che avevamo creato per l'esempio della sfera rimbalzante. FiguraT6-17: La sfera elastica rimbalzante. Avvia l'animazione e la sfera comincerà a cadere sinchè non raggiunge il suolo al tempo 0.4 e rimbalza indietro appropriatamente. 6.6 DIREZIONE Benvenuti nel mondo dei pesci nuotanti e delle bisce serpeggianti! Il metodo Direction opera come il metodo Path, ad eccezione del fatto che inoltre ruota gli oggetti bersaglio di modo che l'orientamento cambi conformemente alla curva del percorso parametro. 6.6.1 MUOVERE UN TESTO LOGOTIPO LUNGO UN PERCORSO DIREZIONALE Per rendere più chiara la differenza con il metodo Path, creeremo esattamente lo stesso oggetto dell'esempio 6.1.2, ma ora useremo il metodo Direction. 1. Crea alcuni caratteri 3D. 2. Crea un metodo Direction allo stesso livello gerarchico dei caratteri. 3. Crea una curva chiusa B-Spline sotto al livello del metodo Direction (vedi fig.T6-18). E' questa funzione di rotazione che rende molto prezioso questo metodo quando si animano oggetti di forme libere. 6.6.2 PESCI NUOTANTI Creiamo un pesce: 1. Crea un pesce forma libera (oppure un serpente o qualunque creatura la cui lunghezza sia maggiore del suo spessore). 2. Rendi il pesce il livello corrente e suddividilo in gruppi dalla testa alla coda. 3. Crea un metodo Direction allo stesso livello dei gruppi. 4. Crea una curva percorso B-Spline che rappresenti il nuoto del pesce, allostesso livello del primitivo pesce (un livello sopra ai gruppi). 5. Seleziona la curva B-Spline che rappresenta il movimento del pesce, usa il menù Create/Structure/Link e Cut/Paste incollandolo sotto all'oggetto metodo. Avvia l'animazione per far nuotare il pesce lungo il percorso. Figura T6-19: Il pesce nuotante B-Spline. Nota: Che un percorso curvo simula il nuoto di un pesce. Se la curva non contiene piccole pieghe, la tua creatura agisce come una lumaca. Può richiedere un po' di tempo per capire pienamente la natura di questo metodo, ma i risultati saranno degni dello sforzo! 6.7 MOVIMENTO & DIREZIONE Come avrai già realizzato, il metodo Direction è uno strumento molto potente per creare delle graziose animazioni. Comunque ci sono delle situazioni in cui devi controllare la direzione di un oggetto indipendentemente dal suo movimento: ciò è impossibile con il metodo Direction, perchè questo usa la stessa curva per definire sia la direzione che il moto. Il metodo Move & Dir è progettato per queste situazioni. Il metodo usa due parametri: il primo definisce il movimento per gli oggetti bersaglio allo stesso modo del metodo parametro Path, mentre il secondo parametro definisce la direzione degli oggetti bersaglio proprio come avviene per il metodo parametro Direction. Ciò significa che se entrambe le curve parametro sono uguali, il metodo opererà nello stesso modo del metodo Direction, e se il parametro che definisce la direzione è una linea dritta, il metodo agisce in modo simile al metodo Path (perchè la direzione dell'oggetto rimane costante). 6.7.1 UN LOGO OSCILLANTE SI MUOVE LUNGO UNA LINEA RETTA In questo esempio creeremo un logo che è composto da caratteri. ogni carattere segue una linea perfettamente dritta (un asse). Una curva B-Spline è usata per definire l'informazione della direzione di modo che il logo si muoverà bene. 1. Crea 4 piccoli caratteri 3D come nella figura T6-20. 2. Crea un metodo Move & Dir allo stesso livello dei caratteri. 3. Usa Create/Controls/Axis per creare una linea retta sotto al livello method, di modo che passi sotto ai caratteri. 4. Crea una curva B-Spline sotto al livello method. All'inizio, la curva dovrà seguire accuratamente l'asse, ma poi comincerà ad oscillare. Figura T6-20: Un logo oscillante che segue una linea retta. Avvia l'animazione, e se non ti piace come i caratteri sono ruotati mentre seguono la linea retta, modifica semplicemente la seconda curva. Se non ti piace la linea retta, usa un altro tipo di curva o di reticolo (come abbiamo fatto nell'esempio di movimento lungo un reticolo). Nota che puoi usare la seconda curva per definire la rotazione nelle tre dimensioni! La direzione della curva non dev'essere planare com'era in questo esempio. Naturalmente può definire ruotazioni perpendicolari alla direzione del moto (una barca che rolla...). 6.7.2 IL PILOTA RALLY In questo esempio ti mostreremo come il metodo Move & Dir può essere usto per creare un effetto di 'guida folle' di una macchina. 1. Crea un automobile 2. Crea un oggetto metodo Move & Dir allo stesso livello gerarchico. 3. Crea una curva B-Spline che rappresenti la strada (road) sotto al livello method. 4. Duplica la curva 'road'. Se avvii ora l'animazione, il risultato sarà solo 'una macchina guidata ragionevolmente. 5. Modifica la seconda curva così che l'automobile agirà più aggressivamente. Figura T6-21: Guidare come pazzi. La prima curva rappresenta la strada ed un'altra curva la direzione dell'automobile nelle posizioni corrispondenti della strada. Nota che senza mostrare i punti nodali è difficile stabilire quali punti del movimento e quali curve direzionali corrispondono, dato che la velocità dell'oggetto è definita dalla distanza dei nodi. 6.8 CURVE DI CONTROLLO Questo metodo può essere usato per definire percorsi per gli oggetti tramite due curve. Gli oggetti bersaglio vengono spostati, ruotati, e deformati conformemente alle curve. Questo metodo è molto adatto per la definizione dei movimenti di telecamere, aeroplani, etc. dove un controllo accurato dell'assetto è necessario. Come per i precedenti metodi, la distanza tra i punti nodali determina la velocità degli oggetti bersaglio. Naturalmente, le curve di controllo possono essere qualsiasi oggetto calcolabile, come cerchi, ellissi o semplici linee rette. La capacità di definire se la seconda curva di controllo debba essere usata anche per ridimensionare gli oggetti bersaglio, rende il numero delle possibili applicazioni di questo metodo quasi illimitato. 6.8.1 MUOVERE E FAR PULSARE SFERE DI FANGO In questo esempio creeremo il più semplice degli esempi che utilizzano le curve di controllo: un oggetto che si muove tra le curve di controllo. La distanza tra le curve di controllo variando genera una pulsazione dell'oggetto come se fosse di fango.. 1. Crea una sfera che rappresenti la palla di fango. 2. Crea un oggetto metodo Control Curve allo stesso livello. 3. Crea due curve B-Spline chiuse disegnandone una, duplicandola, e modificando la copia in modo che la distanza tra le due abbia delle variazioni. Quindi usa Animate/Control/Play Forwards, e quindi Animate/Control/Goto Beginning. Figura T6-22: Una sfera di fango deformata e mossa dalle curve di controllo. Ora creiamo altre sfere di fango. Questo è esattamente ciò che dovrai fare: 1. Crea due nuove sfere in differenti posizioni ed assicurati che siano perfettamente posizionate tra le due curve di controllo. 2. Seleziona l'oggetto metodo. Usa il menù Modify/Properties/Tag, clicca sulla stringa 'ISKE' (si dovrebbe uscire dopo l'animazione) e clicca il pulsante DEL per cancellare il tag; poi seleziona OK. Quesyto richiede a Real di definire i tags 'VPHS' automaticamente quando avvierai l'animazione la prossima volta. Avvia l'animazione ed avrai tre palle di fango elastiche. 6.8.2 UN TAPPETO VOLANTE ELASTICO In questo esempio ti mostreremo come creare un reticolo di forma libera, che si muove lungo curve di controllo come un tappeto elastico di gomma (se non hai mai visto prima un tappeto di gomma, non ti preoccupare. Sono sicuro che deve esistere!) Illustreremo l'uso delle giunzioni solo per assicurarci che ti siano familiari. 1. Crea un reticolo usando la funzione Create/Freeform/Mesh. 2. Rendi il reticolo il livello corrente cliccando due volte su questo nella finestra di selezione; come al solito, metteremo dei sotto-gruppi sotto al livello del reticolo. 3. Suddividi orizzontalmente il reticolo in gruppi, in modo che ogni gruppo sia costituito da una colonna di punti centrali. Nota che devi attivare la rappresentazione Drawing Set/C.Polyg. (disabilitando contemporaneamente 'Curve') per poter accedere ai punti di controllo del reticolo. 4. Crea un oggetto metodo Control Curves. 5. Crea due curve di controllo allo stesso livello del reticolo. 6. crea due collegamenti che puntino alle curve di controllo (fai la selezione multipla delle curve di controllo ed usa il menù Create/Structure/Link). 7. Modify/Structure/Link le giunture, rendi il livello del metodo Control Curves il livello attuale ed incolla nuovamente le giunzioni con Modify/Structure/Paste. FiguraT6-23: Tappeto elastico volante. Ora usa la funzione View/Drawing_Set per attivare la rappresentazione Curve e disabilitare C.Polyg., e quindi avvia l'animazione. Il tappeto volerà... 6.8.3 PUNTO DI VISTA VOLANTE In questo esempio ti illustreremo come definire i movimenti degli oggetti senza deformarli. P.e. quando si creano punti di vista, aeroplani, etc. la possibilità di controllare l'assetto è una caratteristica preziosa. Questo esempio dimostra anche come usare i primitivi del punto di vista e del punto di mira per definire l'orientamento della telecamera. 1. Crea un cubo in mezzo alla finestra View per avere qualcosa da osservare durante l'animazione. 2. Seleziona la proiezione prospettica (View/Type/Perspective) e trova un buon angolo di visualizzazione tramite i tasti direzionali. 3. Crea i primitivi del punto di vidsta e della mira selezionando il menù View/Create Camera. Real 3D crea una telecamera che rappresenta l'attuale orientamento della finestra vista. L'oggetto telecamera è composto da due parti: una mira ed un punto di vista.. Animeremo solo il punto di vista, quindi cancella il punto di mira. Questo farà si che la telecamera sia sempre orientata al punto di origine dello spazio. 4. Crea un metodo Control Curves allo stesso livello del punto di vista, sotto l'oggetto 'camera'. 5. Crea due curve di controllo sotto al metodo in modo che mostrino i due percorsi di entrambi gli 'occhi' del punto di vista. 6. Seleziona l'oggetto metodo ed aggiungi ad esso il seguente tag: FOR l=1 che dice al metodo di non operare deformazioni. 7. Attiva la funzione View/Observer/Camera View. Puoi anche usare Modify/Properties/Attributes/WF-Invisible per remdere la gabbia della telecamera invisibile durante l'animazione. Avvia l'animazione e gli occhi del punto di vista seguiranno le curve di controllo. Comunque, poichè il punto di mira non esiste, la telecamerà sarà puntata sempre all'origine: il cubo. Figura T6-24: Movimento del punto di vista definito da due curve di controllo. Nota: Che ci sono modi più semplici di creare animazioni con riprese volanti (p.e. la creazione di inquadrature chiave), ma la capacità di controllare l'assetto accuratamente può a volte rendere questo metodo più adatto. Entriamo ora nella seguente sezione, che ci introdurrà all'animazione dei personaggi. 6.9 SEMPLICE SCHELETRO L'idea dietro allo scheletro è molto diretta: uno scheletro è un semplice oggetto che è collegato in qualche modo ad un oggetto più complesso. Quando loscheletro viene alterato, l'oggetto bersaglio è modificato concordemente. Il fatto che sia più facile modificare lo scheletro che l'oggetto bersaglio, che può essere piuttosto complesso, rende gli scheletri un potente strumento di animazione. Real 3D contiene due tipi di scheletro che differiscono tra loro per il modo in cui manipolano l'oggetto bersaglio affinchè si conformi all'oggetto scheletro. Così creiamo prima un esempio usando un semplice scheletro per poi osservare come opera. 6.9.1 UN SEMPLICE SCHELETRO ED UN TESTO LOGOTIPO In questo esempio creeremo un logo ed uno scheletro che opera come linea di base elastica per il testo. 1. Crea dei caratteri 3D. 2. Crea un metodo Simple Skeleton allo stesso livello dei caratteri. 3. Crea una curva B-Spline (la curva scheletro) sotto al livello metodo. La curva dovrebbe corrispondere approssimativamente alla base del testo. 4. Seleziona il menù Animate/Control/Refresh. Il nostro primo esempio di oggetto scheletro è ora completo. Quando selezioni il menù Animate/Control/Refresh, Real 3D calcola tutta l'informazione necessaria per mantenere l'oggetto bersaglio sullo scheletro da ora in poi. Quindi, modifichiamo lo scheletro per verificare come opera lo scheletro. 5. Seleziona la curva scheletro e spostala. Ora lo scheletro è spostato rispetto ai suoi bersagli. Usa Animate/Control/Refresh ed il tuo logo sarà riportato allo scheletro. 6. Applica alla curva scheletro Modify/Linear/Stretch e Animate/Control/Refresh. Anche la distanza tra i caratteri è allungata. 7. Piega la curva scheletro, ridisegna il sistema di animazione ed anche il tuo logo sarà piegato. Figura T6-25: Un oggetto dopo la piegatura dello scheletro. Come avrai notato, il metodo Simple Skeleton non ruota nè allunga gli oggetti bersaglio in alcun modo. Essi sono riportati alla loro posizione originale sullo scheletro. In altre parole il metodo usa solo la trasformazione 'move' per manipolare i suoi oggetti. Questo lo rende adatto all'uso nella animazione di oggetti la cui direzione non dev'essere cambiata durante lo spostamento. Un'altra osservazione è che il Simple Skeleton richiede un parametro che descrive la forma dello scheletro. Questo può essere qualsiasi oggetto calcolabile come una linea poligonale, una curva B-Spline, un cerchio, un punto o anche un reticolo forma libera. Inoltre è anche possibile creare scheletri preimpostati usando un nuovo oggetto calcolabile, come abbiamo fatto nell'esempio 6.1.8. Il metodo Simple Skeleton spinge tutti gli oggetti bersaglio verso lo scheletro, così che il COG dell'oggetto bersaglio interessato è spinto allo scheletro, e la posizione dello scheletro è definito dal tag VPHS associato al bersaglio. P.e. se il valore VPHS ,per un oggetto bersaglio è 0, allora l'oggetto è spinto al punto iniziale della curva scheletro. Il valore 0.5 spinge il bersaglio al punto centrale dello scheletro. Essi sono chiamati 'valori parametri' dell'oggetto parametro. L'oggetto scheletro ridefinisce inoltre il COG per gli oggetti bersaglio così che giacerà esattamente sulla curva scheletro. Quando hai usato per la prima volta Animate/Control/Refresh, il metodo definì automaticamente questi tag per ogni oggetto bersaglio trovando il valore parametro della curva scheletro dove la distanza tra la curva e l'oggetto bersaglio era la più breve. Questo è stato fatto una volta sola. Il metodo ha creato ed associato a sè il tag 'ISKE' per indicare che tutti i necessari tag sono ora aggiornati e non devono più essere rigenerati. Questa è l'intera teoria sottostante al semplice scheletro. Come hai già notato, non devi sapere nulla di questi tag a meno che tu non debba definire le posizioni per gli oggetti bersaglio manualmente. Crea solo tutti i necessarioggetti e lascia che Real 3D faccia il resto. Continuiamo ancora con l'esempio. Seleziona uno qualunque degli oggetti bersaglio e spostalo dallo scheletro. Rigenera il sistema di animazione e l'oggetto sarà spinto nuovamente allo scheletro! Ora supponi che il primo oggetto bersaglio era stato posizionato erroneamente e lo vuoi spostare sullo scheletro. Come muovere i bersagli senza che essi ritornino alla loro posizione iniziale sullo scheletro? La risposta è: cancella semplicemente il tag ISKE associato all'oggetto metodo (o setta il suo valore a 0), sposta il bersaglio alla posizione voluta e rigenera il sistema di animazione. Sin'ora abbiamo solo provato come gli oggetti controllati scheletricamente siano manipolati interattivamente. Ora è tempo di creare la nostra prima animazione scheletro. 6.9.2 RUOTARE UN SEMPLICE SCHELETRO ATTORNO AD UN ASSE Poichè gli oggetti scheletro sono solo oggetti ordinari, possono essere animati; quindi facciamo questa animazione: 1. Crea un semplice logo costituito da alcuni caratteri. 2. Crea un metodo Simple Skeleton allo stesso livello gerarchico. 3. Crea una curva B-Spline, che attraversi i caratteri del logo, sotto al metodo. 4. Crea una metodo Rotation allo stesso livello dello scheletro così che questo sia il bersaglio. 5. Crea un primitivo asse sotto al metodo Path per definire l'asse di rotazione. Figura T6-26: Una curva B-Spline che ruota attorno ad un asse mentre il controllo scheletro mentiene i caratteri attaccati alla curva. Avvia l'animazione. Il metodo Rotation muove lo scheletro, mentre il metodo scheletro mantiene gli oggetti bersaglio sulla loro curva parametro. 6.9.3 SCHELETRO ELASTICO E LOGOTIPO In questo esempio aggiungeremo un po' di elasticità agli scheletri spostando i punti usando gruppi. 1. Crea un logo composto di 4 caratteri. 2. Crea un metodo Simple Skeleton allo stesso livello dei caratteri. 3. Crea una curva B-Spline scheletro sotto al metodo. 4. Rendi la curva scheletro il livello corrente e crea un oggetto gruppo, composto di alcuni punti dello scheletro. 5. Crea un oggetto metodo Path allo stesso livello del gruppo. 6. Definisci un movimento per il gruppo creando una curva B-Spline sotto al metodo Path. Figura T6-27: Uno scheletro modificato da un gruppo. 6.9.4 MUOVERE GLI OGGETTI LUNGO UNO SCHELETRO Come già sai il tag VPHS associato all'oggetto bersaglio definisce dove è collocato sullo scheletro. E' comunque possibile definire una posizione dinamica tramite il tag SFOR. Questo significa che puoi cambiare la posizione del bersaglio durante l'animazione digitando soltanto la formula che si riferisce al tempo! Quindi proviamolo creando una animazione 'Spostamento lungo un percorso' basata sul metodo scheletro. 1. Crea una sfera (un oggetto bersaglio). 2. Crea un oggetto metodo Simple Skeleton allo stesso livello. 3. Crea una curva B-Spline sotto all'oggetto metodo. 4. Seleziona la sfera, quindi il menù Modify/Properties/Tags. Clicca sul pulsante ADD e quindi immetti la seguente stringa tag: SFOR x=t Premi l'invio e seleziona OK. Avvia l'animazione ed il tuo oggetto bersaglio si muoverà lungo lo scheletro, poichè la sua posizione su questo è determinata direttamente dal tempo. Figura T6-28: Una sfera che si sposta lungo uno scheletro. Ebbene possiamo far questo anche usando solo il metodo Path. Comunque c'è una grande differenza tra i due. Path definisce un movimento relativo per i bersagli, mentre Skeleton una posizione assoluta. Questo vuol dire che puoi spostare la curva usata con il metodo Path senza cambiare il movimento dei bersagli (dato che definisce ancora un movimento relativo uguale), ma se muovi la curva Skeleton, i bersagli seguiranno un altro percorso perchè sono sempre riportati allo scheletro. Analizziamo cosa obbliga la sfera a muoversi lungo lo scheletro. La formula x=t assegna il tempo corrente alla variabile x. Il metodo Skeleton usa questa variabile per ridefinire il valore del tag VPHS. Il parametro spazio è tridimensionale ed anche le variabili y e z sono definite, ma dato che abbiamo usato una curva B-Spline, solo la prima dimensione è determinante. Più avanti ti mostreremo come usare reticoli forma libera come scheletri, ed allora avremo bisogno di due dimensioni (variabili x ed y) per definire una posizione per il bersaglio. Bene, facciamo un po' di pratica creando una formula che è un po' più complessa e che produce un movimento più interessante. 6.9.5 SFERE OSCILLANTI Il seguente esempio illustra come creare accellerazioni usando la funzione 'cos()' in una formula. 1. Crea una sfera, una bianca ed una nera. 2. Aggiungi i seguenti tag alle sfere: sfera bianca: SFOR x=t*0.5+(t)*(0.5+0.5*cos(8*PI*t)) sfera nera: SFOR x=t*0.5+(1-t)*(0.50.5*cos(6*PI*t)) 3. Crea un metodo Simple Skeleton allo stesso livello delle sfere. 4. Crea una curva B-Spline sotto al livello metodo. Figura T6-29: Sfere oscillanti lungo una curva scheletro. Avvia l'animazione e le sfere si comporteranno in un modo molto naturale. Analizziamo la formula che abbiamo assegnato agli oggetti bersaglio. Il tempo (t) va da 0 a 1 nel nostro esempio, quando l'animazione è attivata. Quindi, all'inizio, la prima parte della formula t*0.5 non ha nessun effetto. Procedendo l'animazione, il termine t*0.5 si avvicina a 0.5. D'altra parte, il resto della formula (1-t)*(0.5+0.5*cos(8*PI*t)) diventa sempre più debole perchè (1-t) si avvicina a 0. Così all'inizio, la funzione cos() fa oscillare la sfera su e giù con pieno potere ma solo al termine, senza influenzare affatto la posizione della sfera. Se la matematica non è il tuo forte, non preoccuparti, saranno presto disponibili formule già definite! 6.9.6 UN ATOMO DI IDROGENO E LA SUA ORBITA ELETTRONICA Crendo simulazioni dell'atomo, è necessario capire la teoria sottostante. Se non la conosci, non preoccuparti: questo esempio può darti qualche idea. Un atomo di idrogeno è composto da un protone e da un elettrone. Il modo in cui l'elettrone ruota attorno al protone è ben conosciuta dagli scienziati. Nessuno può stabilire dove si trovi l'atomo ad un certo valore del tempo, ma una formula può essere usata per calcolare le probabilità per quello. Ci sono solo pochi possibili stati che l'elettrone può rappresentare. Quindi, procediamo. 1. Prima abbiamo bisogno di un elettrone. Non so come appare un vero elettrone, ma presumo che sia come una sfera. Quindi crea una sfera. 2. Quindi dobbiamo scrivere la formula che descrive la probabile distribuzione per la sfera. La variabile 'rnd' può essere usata per quello scopo. Quindi seleziona la sfera, usa il menù Modify/Properties/Tags ed aggiungivi il seguente: SFOR x=rnd Questo genera valori casuali tra 0 ed 1. 3. Crea un metodo Simple Skeleton allo stesso livello dell'elettrone. 4. Poi abbiamo bisogno di un nuovo primitivo calcolabile che rappresenti i possibili stati dell'elettrone. Per l'idrogeno è una sfera il cui raggio rappresenta questi possibili stati dell'elettrone. Comunque, possiamo usare un cerchio, la cui formula matematica è molto simile a quella della sfera, ma è più corta e rapida da scrivere. la formula matematica che definisce un cerchio è: x=r*sin(2*PI*t) y=r*cos(2*PI*t) dove r è il raggio del cerchio e t è la sua parametrizzazione. Quando t va da 0 a 1, le coordinate x ed y definiscono un cerchio perfetto. Usa Create/Controls/Offset per creare un primitivo offset sotto al metodo, che rappresenta il punto centrale del cerchio. Assumendo che il raggio rimanga lo stesso durante l'animazione, diciamo 0.5, aggiungi il seguente tag all'offset: SFOR x+=0.5*sin(2*PI*t), y+=0.5*cos(2*PI*t) Così possiamo manipolare offset in modo che invece di un singolo punto, il risultato è un'orbita per l'elettrone (in questo caso, un cerchio). L'animazione è ora pronta. Quando l'avvii, il tempo va da 0 ad 1 e la formula assegnata all'oggetto elettrone esprime i valori parametro casuali. L'oggetto metodo Skeleton usa questi valori per calcolare un punto dal suo parametro, descrivendo possibili posizioni per l'elettrone, e quindi lo sposta concordemente. 6.10 SCHELETRO Il metodo Skeleton è in qualche modo simile a Simple Skeleton; trae gli oggetti bersagli al suo parametro Skeleton. Comunque, Skeleton può anche ruotare gli oggetti, in modo che le loro direzioni corrispondano alla curvatura dello scheletro, aprendo così nuove eccitanti possibilità per effetti di animazione. A causa di questa funzione di rotazione, il metodo Skeleton richiede due parametri invece di uno: essi sono chiamati scheletri primario e secondario. Lo scheletro primario definisce la direzione e posizione per i bersagli, mentre il secondo scheletro è usato per definire come gli oggetti bersaglio sono orientati attorno allo scheletro primario ('torsion'). P.e. se l'oggetto scheletro secondario è soltanto un oggetto statico che definisce una direzione fissa, i bersagli saranno solo piegati conformemente allo scheletro primario. Se lo scheletro secondario è animato in modo che la direzione che definisce cambia durante l'animazione, gli oggetti bersaglio sono ruotati attorno allo scheletro primario conformemente. 6.10.1 UN'ALTRA ANIMAZIONE DI UN LOGOTIPO Ricreiamo l'animazione del logo dell'esempio 6.8.3, ma usando ora lo scheletro generale. Questo esempio dimostra bene la differenza tra i due metodi. 1. Crea un logo di testo 2. Crea un metodo Skeleton allo stesso livello dei caratteri, usando Create/Structure/Method. 3. Crea una curva B-Spline sotto al metodo, p.e. usando Create/Controls/B-Spline Ctrlp in modo che la curva passi attraverso tutti i caratteri bersaglio. 4. Rendi la curva scheletro B-Spline il livello corrente e crea un gruppo che si riferisce ad alcuni punti della curva. 5. Applica Animate/Create/Path al gruppo. 6. Crea il secondo parametro per il metodo Skeleton, allo stesso livello della curva scheletro primaria. Nota che la direzione dello scheletro secondario dovrebbe essere quasi perpendicolare allo scheletro primario. puoi usare un primitivo asse (Create/Controls/Axis). Figura T6-30: Logo di testo controllato dal metodo scheletro generale. Avvia l'animazione e paragonala a quella generata dal metodo Simple Skeleton. il tuo logo è piegato lungo la curva scheletro primario ed i caratteri individuali che lo compongono sono ruotati per corrispondere alla curvatura dello scheletro. 6.10.2 RUOTARE LA PELLE ATTORNO ALLE OSSA Lo scopo di questo esempio è di illustrare e chiarificare lo scopo dello scheletro secondario richiesto dal metodo generale scheletro, e come è usato per ruotare oggetti bersaglio attorno allo scheletro primario. 1. Crea un tubo forma libera ruotando una curva attorno ad un asse orizzontale (Create/Freeform/Rotate). Deforma il tubo in modo che la sua sezione sia ellittica. Questo sarà d'aiuto nella visualizzazione dell'animazione. 2. Rendi il reticolo forma libera del tubo il livello corrente e suddividi il suo poligono di controllo in sotto-gruppi orizzontali (ognuno dovrebbe essere un ellisse attorno all'asse del tubo). 3. Crea un metodo Skeleton per controllare i sotto-gruppi (quindi ponilo al loro stesso livello gerarchico). 4. Crea la curva dello scheletro primario, seguendo l'asse del tubo, sotto al metodo. 5. Crea lo scheletro secondario usando la funzione Create/Controls/Axis; disegna un asse perpendicolare allo scheletro primario. 6. Seleziona il menù Animate/Control/Refresh così che Real 3D allinei gli oggetti bersaglio con gli scheletri. 7. Ora piega la curva dello scheletro primario e rigenera il sistema di animazione (Animate/Control/Refresh). La forma libera tubo è piegata conformemente. 8. Cambia l'angolo di visuale in modo da allinearti lungo lo scheletro primario, seleziona lo scheletro secondario ed applica la funzione Animate/Control/Rotate. Questo fa ruotare lo scheletro secondario attorno al primario, facendo anche ruotare 'la pelle' (la superficie del tubo) conformemente attorno alle 'ossa' (lo scheletro primario). Figura T6-31: Lo scheletro secondario ruota una forma libera tubo attorno allo scheletro primario. Avvia l'animazione; cerca di ruotare la finestra View in modo che tu possa vedere come la forma libera tubo ruota attorno al suo 'asse elastico'. Lasciamo ora il metodo Skeleton ed andiamo all'esempio successivo che illustra l'uso di Inverse Kinematics. 6.11 CINEMATICHE INVERSE In qualunque momento decidi di avviare il compiuter, devi premere semplicemente un interruttore. Analizziamo dal punto di vista dell'animatore, cosa accade quando avvii il tuo computer. Tutti i tipi di muscoli nella tua spalla ruotano il braccio. Anche i tuoi bicipiti ruotano il tuo avambraccio attorno al gomito. Infine i muscoli dell'avambraccio piegano le tue dita attorno alle articolazioni così che infine la punta del dito premerà l'interruttore. Questo significa che la posizione della punta del dito è determinata dalle posizioni delle ossa tra la punta del dito e la spalla. In altre parole, il modo in cui i muscoli modificano le ossa permette alla punta del dito di premere l'interruttore. Questo è il modo in cui opera Inverse Kinematics: usandolo, non devi definire come le ossa devono essere ruotate per produrre il percorso desiderato per la punta del dito: tu dovrai solo indicarene la posizione o il percorso ed Inverse Kinematics risolverà tutti i problemi, come le ossa devono essere posizionate. 6.11.1 FLETTERE UN DITO In questo esempio creeremo un semplice dito usando uno strumento tubo conico e lo controlleremo tramite i metodi Inverse Kinematic e Skeleton. Se sei già familiare all'uso dello strumento tubo conico, sai che crea i suoi oggetti combinando quadrici, come i coni, cilindri e sfere. dato che questo è uno strumento adatto per modellare robots, la domanda 'come possiamo tenere le articolazioni insieme' è interessante. L'idea dell'esempio successivo è questa: un oggetto creato da uno strumento tubo rappresenta un dito. Un metodo Skeleton è usato per controllare molti oggetti dito e la curva Skeleton è animata definendo il percorso del suo punto finale usando Inverse kinematics. Questo è un modo comune di usare le cinematiche inverse con gli scheletri. 1. Crea una linea poligonale usando Create/Controls/Open Line. Questa rappresenterà le ossa del tuo dito, quindi è composta da quattro punti. E' usata come curva scheletro primario. 2. Crea un tubo che rappresenta il dito selezionando il menù Create/Compound Tools/Conical. Poichè usi quadrici, lo scheletro dovrebbe corrispondere perfettamente al tubo. Così, usa il trascinamento quando definisci i punti centrali per articolare il tubo conico. Dato che Inverse Kinematic ti consente di definire la posizione del punto END, accertati che la direzione del tubo coincida con quella dello scheletro. Altrimenti definirai la direzione per la base del dito e non per la sua punta. 3. Rendi l'oggetto tubo il livello corrente e crea un metodo Skeleton allo stesso livello dei primitivi componenti il tubo. 4. Usa Cut e Paste per spostare la curva Skeleton sotto all'oggetto metodo nella gerarchia. 5. Crea uno scheletro secondario creando un primitivo asse perpendicolare allo scheletro primario. Ora lo scheletro è pronto, seleziona quindi Animate/Control/Refresh. Questo istruisce Real 3D a fissare gli oggetti bersaglio alle loro correnti posizioni sullo scheletro. 6. Ora seleziona la curva scheletro primario e la funzione Modify/Special/Inverse Kinematics e modifica il punto finale dello scheletro. Quindi rigenera il sistema di animazione e, come puoi vedere, il dito è spinto dallo scheletro e tutte le sue articolazioni rimangono unite. 7. Crea un metodo Inverse Kinematics allo stesso livello delle curve scheletro: esse saranno i bersagli per il metodo. 8. Il metodo Inverse Kinematics richiede solo un solo parametro, che definoisce il punto terminale della curva bersaglio. Quindi crea una curva B-Spline che definisce il percorso per il punto finale. Figura T6-32: Inverse kinematics muove il punto finale dello scheletro, mentre quest'ultimo definisce la posizione del dito. Avvia l'animazione, e la punta del dito segue la curva definita (a meno che la curva sia troppo distante così che il dito non possa seguirla; allora il dito si muoverà il più lontano possibile). Okay, miglioriamo un po' l'animazione. Vai al prossimo esempio senza cancellare questo. 6.11.2 PREMI UN INTERRUTTORE CON LA PUNTA DEL DITO Creiamo una animazione in cui la punta del dito preme l'interruttore. Questo si può realizzare usando lo stesso oggetto per definire i movimenti del pulsante e della punta del dito. Per farlo: 1. Crea un oggetto livello chiamato 'button' sotto al livello 'root' ed un cubo che rappresenta il pulsante sotto a 'button'. 2. Crea un oggetto metodo Path sotto al livello button. 3. Crea un movimento per il pulsante usando un cerchio deformato: crea un cerchio sotto al metodo Path ed usa Modify/Linear/Extend per deformarlo orizzontalmente in modo che appaia come una linea dritta. 4. Crea una giunzione al cerchio deformato (seleziona il cerchio ed usa il menù Create/Structure/Link). 5. Modify/Structure/Cut la giunzione: Modify/Structure/Delete il percorso originale sotto al metodo Inverse Kinematics e Modify/Structure/Paste la giunzione per sostituirla. il metodo ora usa il cerchio per definire il punto finale dello scheletro. Figura T6-33: Il pulsante ed il dito usano lo stesso percorso. Assicurati che il dito sia sufficientemente vicino al pulsante ed avvia l'animazione. Poichè lo stesso primitivo è usato per definire il movimento per entrambi gli oggetti, il risultato è che il dito sembra pigiare il pulsante. 6.11.3 SCHELETRI GERARCHICI CONTROLLATI INTERATTIVAMENTE Questo esempio illustra come creare uno scheletro gerarchico, e come controllarlo interattivamente usando le cinematiche inverse. Non è difficile trovare esempi di scheletri gerarchici. Osserva semplicemente la tua mano e puoi vederne uno. La possibilità di accavallare uno scheletro a diversi sotto-scheletri è spesso necessaria, specialmente creando animazioni di personaggi. Molto del potere fornito dagli scheletri si basa su questa caratteristica. Quindi, come creare degli scheletri gerarchici come per una mano? La risposta è semplice: gli scheletri possono essere bersagli di altri scheletri. Quindi esaminiamo come creare un tale oggetto scheletro gerarchico e come può essere controllato e modificato. 1. crea una linea poligonale (Create/Controls/Open Line) costituita da tre punti che rappresentano il tuo braccio: spalla, gomito, polso. 2. Crea un braccio usando lo strumento Conical Tube. Unisci le giunzioni del tubo ai punti del poligono usando il trascinamento, per ottenere un perfetto allineamento. 3. Crea un metodo Skeleton sotto all'oggetto tubo così che tutti i primitivi del tubo siano i bersagli per il metodo. Usa Cut e Paste per spostare la linea scheletro sotto al metodo. Crea inoltre lo scheletro secondario (Controls/Axis). Più avanti ruoteremo lo scheletro secondario affinchè il robot ruoti il suo polso. 4. Seleziona Animate/Control/Refresh ed ora il braccio è fissato allo scheletro. Seleziona la curva scheletro ed usa Modify/Special/Inverse Kinematics per modificarla. Rigenera ancora il sistema di animazione, solo per accertarti che lo scheletro operi. Nota che se hai installato i tasti corrispondenti predisposti, puoi usare i tasti chiave per farlo. Questo rende l'operatore interattivo degli scheletri molto più conveniente comparandolo alle corrispondenti selezioni di menù. 5. Usa Modify/Structure/Copy mentre l'oggetto braccio è selezionato nella sua completezza. Creeremo tutte le dita duplicando e ridimensionando il braccio. 6. Crea un nuovo oggetto livello allo stesso livello del metodo Skeleton e rinominalo 'fingers'. Rendilo il livello corrente. 7. Seleziona il menù Modify/Structure/Paste. Ridimensiona il braccio incollato alle dimensioni di un dito. 8. Crea un secondo ed un terzo dito duplicando e ruotando il primo. 9. Ora setta il valore del tag ISKE associato al metodo Skeleton che controlla il braccio a 0. Questo dirà a Real 3D che la situazione è cambiata, e l'informazione della relazione tra i bersagli e lo scheletro dovrebbe essere ridefinita. Seleziona il menù Animate/Control/Refresh ed il tuo 'braccio robotizzato' è pronto. Figura T6-34: un semplice braccio robotico: le dita controllate scheletricamente sono sotto-oggetti del braccio controllato scheletricamente. Dopo averla praticato un paio di volte, non dovrebbe richiedere più di un paio di minuti la costruzione di questo tipo di braccio robotico gerarchico. Esaminiamo quindi come questo braccio può essere controllato usando le cinematiche inverse (naturalmente puoi usare anche tutte le normali funzioni modify/animation per manipolarlo). Per poter spostare il suo polso in un'altra posizione, seleziona semplicemente la linea scheletro usata per controllare il braccio e l'avambraccio e sposta il suo punto finale con la modificazione Modify/Special/Inverse Kinematic, e quindi Animate/Control/Refresh ed il braccio, incluse tutte le dita, è spinto di nuovo verso lo scheletro. Se vuoi definire una nuova posizione per la punta del dito, seleziona solo la linea scheletro usata per controllare il dito in questione, usa Modify/Special/Inverse Kinematics e rigenera il sistema di animazione. Per poter definire la stessa posizione di tutte le punte delle dita, seleziona l'oggetto 'fingers' (in altre parole l'oggetto che contiene tutte le dita), ed usa Modify/Inverse kinematics etc. Mo come ruotare il polso del braccio? Seleziona la curva scheletro secondario del metodo Skeleton che controlla il braccio e ruotala usando una funzione appropriata. Rigenera il sistema di animazione e le dita saranno ruotate concordemente. Come avrai già notato, le cinematiche inverse modificano sempre il punto finale dello scheletro. Così come definire la posizione dell'altra estremità? Inverti semplicemente la direzione dello scheletro con la funzione Modify/Freeform/Swap Direction, usa le cinematiche inverse e inverti ancora la direzione. Avremo bisogno di questo braccio anche nel prossimo esempio, quindi non cancellarlo ancora. 6.11.4 UN BRACCIO MECCANICO ANIMATO In questo esempio definiremo posizioni fissate per tutte le estremità delle dita ed un movimento per il polso. 1. Crea tre primitivi offset sotto al livello root: li useremo per definire le posizioni fisse per le estremità delle dita. La ragione per cui creiamo i punti offset sopra al livello del braccio è che quando animeremo il braccio, non dovrà animare questi offset (dato che li vogliamo immobili). 2. Crea un metodo Inverse Kinematics sotto al metodo Skeleton per ogni dito. 3. Crea una giunzione (link) per ogni offset e Cut/Paste sotto ad ogni corrispondente metodo Inverse Kinematic. 4. Crea un metodo Inverse Kinematic sotto al metodo Skeleton usato per controllare l'intero braccio, e crea una curva B-Spline che definisce un movimento del polso, sotto al nuovo metodo. Figura T6-35: Un braccio controllato scheletricamente. Il polso si muove, mentre le estremità delle dita e la spalla rimangono fisse. Prima di abbandonare questi esempi delle cinematiche inverse, dovrebbe essere notato che gli esempi che abbiamo sin'ora esaminato non scalfiscono che la superficie delle possibilità che i controlli Inverse Kinematics e Skeleton offrono. P.e. essi sono strumenti molto importanti quando si animano apparecchiature meccaniche, come motori di macchine e specialmente quando si costruiscono connessioni meccaniche. 6.12 MORPHING Abbiamo già creato alcuni esempi di metamorfosi. comunque è venuto il momento di erudirti sui due metodi che sono specialmente dedicati al morphing. Essi ti permettono di trasformare sia oggetti che materiali. I metodi di metamorfosi sono basati su inquadrature chiave. Questo vuol dire che puoi determinare la forma di un oggetto definendo due o più inquadrature chiave per essa. Quando l'animazione è avviata, la forma dell'oggetto sarà modificata partendo dal primo fotogramma chiave verso l'ultimo. Real 3D interpola automaticamente le inquadrature intermedie per te, usando una interpolazione B-Spline estremamente 'morbida'. Questo vale a dire che i punti e gli oggetti non si spostano lungo linee rette tra le corrispondenti posizioni nei fotogrammi chiave, ma si muovono lungo curve B-Spline. Questa caratteristica ha molto valore, specialmente operando una metamorfosi tra due posizioni della telecamera. I metodi di metamorfosi possono essere usati anche su mappe texture e materiali. 6.12.1 SECONDA TESTA PARLANTE Ricreiamo l'esempio 6.1.6, una testa parlante, usando ora il morphing. 1. Crea una testa; solo una curva profilo sarà sufficiente, per semplificare la modellazione. 2. Crea un metodo Morphing Open allo stesso livello della curva profilo di modo che questa sarà il bersaglio per il metodo. 3. Copia la curva profilo usando Modify/Structure/Copy ed incollalo sotto all'oggetto metodo quattro volte, modificando le copie (cioè la bocca: lo scopo è di far parlare la testa) in modo che sembrino tutte diverse. Questi saranno gli oggetti chiave. Figura T6-36: La metamorfosi applicata ad una forma libera. Avvia l'animazione e vedi la testa parlare. Come hai già immaginato, il metodo Morphing definisce la forma del bersaglio tramite i suoi parametri, in altre parole, gli oggetti chiave. Proprio come ogni altro metodo, esso può avere più di un bersaglio. In altre parole, puoi usare un metodo per trasformare più di un oggetto. 6.12.2 TESTA CANTANTE Creiamo due teste che cantano la stessa vcanzone. Questo significa che la sola differenza tra le teste è che sono in differenti posizioni, ma la canzone è la stessa per entrambe. 1. Crea una testa parlante come descritto nella sezione precedente. 2. Duplica l'oggetto bersaglio in modo che il metodo Morphing abbia due bersagli invece di uno. Nota: Che l'ordine tra i bersagli ed il metodo è irrilevante. 3. Aggiungi il seguente tag alla seconda testa: VOFF 1.5 0 0 Questo sposta la seconda testa dalla posizione definita dalle inquadrature chiave. Figura T6-37: Due teste sono trasformate dalla stessa informazione. Avvia l'animazione ed il risultato sarà due teste cantanti. 6.12.3 CANTA DIECI VOLTE LA STESSA CANZONE Poichè abbiamo usato il metodo Morphing Open in tutti i precedenti esempi di metamorfosi, la testa ha iniziato dalla prima forma chiave ed ha terminato all'ultima forma. Comunque, per poter creare una testa che canta la stessa canzone più di una volta, dovrebbe essere usato il metodo Morphing Closed, così che tutti i movimenti si ripetano fluidamente e continuamente. Così creiamo una testa che canta dieci volte la stessa canzone. 1. Crea una testa cantante come nel precedente esempio, ma usa il metodo Morphing Closed invece di Morphing. 2. Modifica il metodo usando Modify/Properties/Animation: imposta la frequenza a 10. Avvia l'animazione e la testa canterà dieci volte la canzone. Figura T6-38: Morphing chiuso. 6.12.4 OGGETTI CHE SI TRASFORMANO GERARCHICAMENTE Ora ti illustreremo come trasformare oggetti gerarchici, ed oggetti che contengono altro che oggetti forme libere. Quando si applica la trasformazione a oggetti gerarchici, la gerarchia è usata per controllare quali parti dei bersagli e degli oggetti chiave corrispondono le une alle altre. Ciò significa che la struttura gerarchica dovrebbe essere al stessa (altrimenti il risultato sarebbe indefinibile). Come esempio, creiamo un candeliere gerarchico e trasformato usando lo strumento Lathe. 1. Usa Create/Compound Tools/Lathe per creare un bel candeliere. Questo strumento usa cilindri, coni, ellissoidi, sfere ed iperboli per costruire la forma definita e generare automaticamente un nuovo livello gerarchico, ponendo tutti i primitivi sotto di esso. 2. Crea un metodo Morphing Closed allo stesso livello del candeliere. 3. Copia il candeliere ed incollalo dentro all'oggetto metodo quante volte vuoi. Modifica i candelieri chiave per farli apparire diversi. Nota: Non ci sono limiti al numero degli oggetti chiave o alla loro profondità gerarchica. 4. Dato che probabilmente non è desiderabile vedere gli oggetti chiave, seleziona l'oggetto metodo, usa poi la funzione Modify/Properties/Attributes ed attiva le opzioni WF-Invisible ed RT-Invisibles in modo che solo l'oggetto risultante sarà visibile. Naturalmente è possibile creare una animazione dove gli oggetti chiave sono visualizzabili quanto quelli risultanti. Figura T6-39: Trasformare un candeliere gerarchico. 5. Avvia l'animazione. 6.12.5 TRASFORMARE MAPPE TEXTURE E MATERIALI Se hai già familiarità con la mappatura di texture di Real 3D, sai che le texture sono mappate sugli oggetti usando mappanti primitivi come rettangoli e cilindri. Poichè i mappanti sono solo ordinari primitivi nella gerarchia degli oggetti, essi possono essere animati come qualsiasi altro oggetto. Puoi definire tutti i tipi di trasformazione per le mappature usando tutti i metodi disponibili, Morphing compreso: questo non trasforma solo le forme dei primitivi mappanti, ma anche le caratteristiche dei materiali a cui si riferiscono le mappature! In altri termini, se un oggetto bersaglio per il metodo Morphing è una mappatura, anche il materiale associato al bersaglio mappante è trasformato, usando i materiali associati alle corrispondenti mappature chiave come 'materiali chiave' Facciamo un po' di questa pratica creando una animazione dove alcune caratteristiche metriali sono trasformate. 1. Crea tre materiali chiamati 'result', 'color' e 'bump', ognuna che ha p.e. una mappa texture legno. Useremo le ultime due come chiavi per definire le proprietà materiali risultanti ('result'). Imposta l'altezza Bump a zero per 'color' ed al massimo per 'bump' così puoi vedere la differenza quando il materiale risultante viene interpolato tra i materiali chiave. Imposta i pulsanti Color e Bump per 'result'. 2. Crea una sfera. 3. Crea un livello allo stesso livello della sfera e rinominalo 'mappings'. Usa la funzione Modify/Properties/Attributes ed attiva il pulsante 'Mapping'. L'oggetto ora è composto di una sfera e di un livello che sarà usato per la definizione dei materiali per la sfera. (Ricorda la filosofia: una macchina che si sposta è composta da una forma automobile e dal movimento; una sfera di legno da una sfera e dal legno). Attivando il pulsante Mapping per il livello, ordini a Real 3D di cercare dentro al livello per trovare i riferimenti al materiale possibile. 4. Rendi l'oggetto livello il livello corrente e crea un primitivo mappante in esso tramite la funzione Create/Mapping/Parallel; usa il materiale 'result'. Questo significa che la texture associata al materiale risultante sarà proiettato sulla sfera usando la mappatura parallela. 5. Crea un metodo Morphing allo stesso livello della mappatura precedente. 6. Crea due mappature parallele sotto al metodo Morphing. Usa il materiale 'color' con la prima mappatura e 'bump' con la seconda. Figura T6-40: Morphing applicato ai materiali La tua animazione di trasformazione del materiale è ora completa e pronta per essere avviata; prima di farlo apri una finestra dei materiali e carica il materiale 'result' in modo che potrai vedere come cambiano le caratteristiche durante l'animazione. 6.12.6 ANIMAZIONE VOLANTE DELLA TELECAMERA Spieghiamo come una telecamera volante può essere facilmente simulata con il metodo Morphing. 1. Crea un cubo, solo per avere qualcosa da osservare durante l'animazione. 2. Crea un oggetto livello chiamato 'camera_here'. 3. Scegli la proiezione prospettica (View/Type/Perspective) ed usa il menù View/Observer/Create_Camera. Questo crea un oggetto livello composto da un primitivo di mira ed uno punto di vista. 4. Crea un metodo Morphing Open allo stesso livello della telecamera e rendilo il livello corrente. 5. Trova un angolo di visuale adatto usando i tasti direzionali. Quando lo trovi, crea il primo oggetto chiave usando il menù View/Observer/Create_Camera. 6. Modifica l'angolo di visuale e crea un nuovo oggetto chiave, usando il menù View/Observer/Create_Camera. Ripeti questo procedimento sinchè le posizioni chiave saranno incluse. 7. Attiva il menù View/Observer/Create_View. Questo indica alla finestra View in questione di usare l'orientamento definito dagli oggetti telecamera. Avvia l'animazione; l'orientamento della finestra View è impostato dal primo punto di vista e dal punto di mira, che a loro volta sono modificati dal metodo Morphing. Il risultato è un'animazione volante della telecamera. 6.13 TRASFORMAZIONE Il metodo Transform è diverso dagli altri metodi: è usato per modificare il tempo. In altre parole, è una specie di macchina del tempo capace di modificarlo in modo che non sia più lineare; può anche far andare indietro il tempo. Tutti gli oggetti che nella gerarchia sono dopo il metodo vedranno modificato il tempo. 6.13.1 PISTONE 1. Crea un livello chiamato 'up&down'. 2. Crea un cilindro rappresentante un pistone sotto al livello 'up&down'. 3. Crea un metodo Path allo stesso livello del pistone. 4. Crea un asse verticale sotto al livello metodo. Avvia l'animazione ed il pistone si sposterà lungo l'asse con velocità costante... Non bene. 5. Crea un metodo Transform allo stesso livello dell'oggetto 'up&down'. Fai la selezione multipla del metodo Transform e di 'up&down' e seleziona Modify/Structure/Swap per cambiare il loro ordine gerarchico; il metodo dovrebbe trovarsi sopra a 'up&down'. 6. Crea un asse ed un cerchio dentro al metodo Transform. Figura T6-41: Il metodo Transform modifica il tempo. Avvia l'animazione ed il pistone agirà come un vero pistone. 7. Usa Modify/Properties/Animation per cambiare la frequenza del metodo Transform a 4 ed il pistone andrà su e giù quattro volte. Cerchiamo di capire perchè il pistone ha iniziato ad andare su e giù come un vero pistone. L'oggetto Transform richiede due parametri; in questo esempio un asse ed un cerchio. Il metodo calcola un punto del cerchio corrispondente al tempo corrente. Allora proietta il punto all'asse ed il valore parametro corrispondente che proietta il punto sull'asse è il nuovo tempo. P.e. se la proiezione del punto calcolato intercetta il punto iniziale dell'asse, il nuovo tempo sarà 0.0. Se il punto intercetta il punto finale dell'asse, il nuovo tempo sarà 1.0. In questo esempio abbiamo usato un cerchio, ma è possibile usare qualunque altro oggetto calcolabile allo stesso modo. 6.13.2 PISTONE ESITANTE Lo scopo di questo esempio è di mostrare in modo intuitivo come veramente opera il metodo Transform. Useremo una piccola sfera ed un asse orizzontale per mostrare come il punto è calcolato dalla curva di trasformazione eproiettato sull'asse. Questo è fatto semplicemente usando la curva di trasformazione per definire anche il moto della sfera. 1. Crea un oggetto chimato 'piston' e ripeti l'esempio precedente per quel livello; usa una curva B-Spline invece del cerchio per definire la trasformazione del tempo. 2. Crea un nuovo livello allo stesso livello di 'piston'. 3. Crea una sfera, un asse orizzontale ed un metodo Path sotto al nuovo livello. Poni la sfera e l'asse orizzontale all'inizio della curva B-Spline. 4. Crea una giunzione che punti alla curva B-Spline del metodo Transform e muovila (Cut/Paste) sotto al metodo Path: Questo fa che il metodo Path muova la piccola sfera e l'asse orizzontale lungo la stessa curva che è usata per la trasformazione del tempo. Figura T6-42: Una trasformazione del tempo. Quando avvii l'animazione, seguendo la sfera puoi dedurre come opera la trasformazione del tempo: la posizione corrente della sfera indica il punto attualmente calcolato dalla curva di trasformazione. Il punto è proiettato all'asse verticale della trasformazione del tempo -puoi 'leggere' il vaalore proiettato verificando dove la linea orizzontale interseca l'asse. La distanza tra il punto d'intersezione e l'origine dell'asse del tempo, in proporzione all'intera lunghezza di quest'ultimo definisce il tempo locale per gli oggetti influenzati dal metodo transform. Quando la curva B-Spline si volge in basso, anche i punti d'intersezione scendono: ciò significa che il tempo inizia a scorrere all'inverso. 6.13.3 TEMPO TRIDIMENSIONALE Tempo multi-dimensionale... suona terrificante, ma vero. E' possibile biforcare un tempo dimensionale in tre tempi dimensionali. Questo esempio dimostra come farlo e quali sono i suoi possibili usi. Per comprendere il tempo tridimensionale, dobbiamo capire come funziona il sistema di animazione di Real 3D. Curve come le B-Spline ed i cerchi possono essere definite usando delle rappresentazioni parametriche: ogni punto sulla curva è rappresentato da un valore parametro compreso tra 0 e 1. Il valore 0 corrisponde all'inizio della curva, mentre il valore 1 indica il suo punto finale. In altre parole, quando il valore parametro scorre tra 0 ed 1, il punto corrispondente si sposta dall'inizio alla fine della curva. Quando viene avviata un'animazione, anche il tempo scorre da 0 ad 1. I metodi usano questo tempo per calcolare i punti dei loro parametri. Se viene fornito un nuovo valore di tempo, il metodo riconosce che deve compiere qualcosa per far corrispondere gli oggetti bersaglio alla nuova situazione. P.e. il metodo Path dovrà spostare i suoi oggetti bersaglio tanto quanto il punto calcolato si è mosso dall'inquadratura precedente. Sinchè l'oggetto parametro può essere pienamente parametrizzato usando un solo valore, abbiamo bisogno di un solo tempo dimensionale. Ma vi sono molti oggetti che non possono essere rappresentati da un solo parametro. p.e. un reticolo B-Spline è uno di questi. Per spiegare meglio, paragoneremo un reticolo ed una curva B-Spline ed illustreremo come la parametrizzazione agisce per questi oggetti. Una curva B-Spline può essere parametrizzata usando un solo valore. Possiamo usare il termine 'lenght' (lunghezza) per esso. La ragione per cui un solo valore è sufficiente è che qualsiasi posizione sulla curva può semplicemente essere specificata menzionando la sua distanza dal punto iniziale. Questo non è possibile per un reticolo B-Spline. invece abbiamo bisogno di due valori per descrivere tutti i possibili punti sulla superficie. Questi valori possono anche essere chiamati 'width' (larghezza) e 'height' (altezza). P.e. 0,0 corrisponderebbe all'angolo superiore sinistro della superficie, mentre il valore 1,1 all'angolo ingferiore destro; 0.5,0.5 al punto centrale della superficie e così via. Il tempo può essere biforcato alle tre dimensioni usando un primitivo coordsys come parametro per l'oggetto Transform invece di un asse. Un Coordsys include 3 assi per proiettare il punto calcolato, invece di uno solo. E' possibile muovere oggetti lungo un reticolo B-Spline definendo il moto usando il tempo dimensionale ed il reticolo come un metodo parametro. Terminiamo la discussione teorica e dimostriamolo in pratica. 1. Crea un metodo Transform. 2. Crea sotto questo un primitivo coordsys. 3. Crea sotto al metodo una curva B-Spline in modo che inizi dall'origine del coordsys e che si contorca tra gli assi x ed y del coordsys. 4. Crea un oggetto livello, allo stesso livello dell'oggetto Transform, e rendilo il livello corrente. 5. Crea una piccola sfera. 6. Crea un metodo Path che animi la sfera. 7. Crea un reticolo B-Spline sotto al livello metodo Path. Figura T6-43: Sfera in movimento lungo un reticolo B-Spline. Il percorso della sfera è definito dal parametro spazio del reticolo usando il metodo Tranform. Avvia l'animazione e la sfera si muove lngo il reticolo. Il percorso della sfera è simile alla forma della curva B-Spline, che è usata come parametro per il metodo transform. 8. Piega il reticolo in modo che non sia planare. La conseguenza è che il percorso della sfera è piegato conformemente: la sfera si muoverà lungo il reticolo, indipendentemente da quanto piegato o deformato esso sia. Se hai letto attentamente la presentazione dell'esempio di Transform, avrai già inventato nuovi usi di questo metodo. Comunque, se sei familiare con altri sistemi evoluti di animazione, potresti fare questa domanda: perchè questa 'cosa trasformante' è un oggetto e non una finestra separata? Ecco la risposta: perchè è un oggetto, può essere animato usando tutti i possibili metodi di animazione. Questo ti permette di creare persino animazioni con 'feed-back'. Bene, è tempo di procedere al prossimo paragrafo. Ti prometto che gli esempi seguenti sono degni di essere letti. 6.14 FORZA RADIALE Benvenuto nei campi di forza e delle particelle. Potremmo scrivere un libro separato di tutte le possibilità e delle possibili applicazioni per questo soggetto. ma mentre aspettiamo quel libro, e prima di spiegare la teoria sottostante le particelle e quel tipo di cose, iniziamo creando la prima animazione dedicata al sistema particellare. 6.14.1 GRAVITÀ Il metodo Radial Force genera un campo di forze che influisce sugli oggetti bersaglio, in modo che la direzione del campo di forza è definito dalla linea tra il punto centrale del metodo e la particella. Se il campo di forza è positivo, attrae tutti i bersagli, se è negativo li respinge. Questo rende il metodo molto adatto alla rappresentazione di fenomeni elettrici, magnetici e gravitazionali. Creiamo un sistema particellare che usa il metodo Radial Force per generare un campo gravitazionale. Il nostro esempio è composto da lcune particelle, e dai metodi Radial Force e Processor. 1. Crea un cerchio, attiva la memorizzazione Macro, duplica il cerchio, spostalo un poco, termina la memorizzazione Macro, e ripeti il Macro per dieci volte. I cerchi sono le particelle. 2. Crea un metodo Radial Force allo stesso livello dei cerchi. 3. il metodo Radial Force richiede un parametro, che è la posizione sorgente della forza 'source'. Usa Create/Controls/Offset per creare il parametro sotto al metodo. 4. Crea un metodo Processor allo stesso livello del metodo precedente. Figura T6-44: Un semplice sistema particellare. Il campo gravitazionale attrae a sè le particelle. Avvia l'animazione e tutte le particelle cominceranno a cadere verso il punto di gravità. Primo: cos'è un 'sistema particellare'? I sistemi particellari tradizionali consistono di un ampio numero di particelle (solitamente punti rappresentati dalla loro velocità, colore, etc.) che agiscono sotto l'influenza dei campi di forza, quali la gravità o il vento. Comunque il sistema particellare di Real 3D non è quello che si potrebbe descrivere come un sistema particellare tradizionale. La maggiore differenza è che i campi di forza in Real 3D sono gli oggetti stessi, e qualsiasi oggetto può essere usato come particella. Si può quasi affermare che in Real 3D non esiste affatto un sistema particellare. Vi sono solo oggetti che interagiscono tra loro e l'animazione è il risultato di questo processo interattivo. ma questa è anche la situazione del mondo reale! Poichè il sistema particellare è utilizzato tramite dei metodi, è pienamente integrato al sistema di animazione: Questo ti permette di mescolare metodi dedicati al sistema particellare con altri metodi. P.e. se hai un robot che cammina, lo puoi spostare usando un metodo forza. Per ragioni storiche usiamo il termine particella nei seguenti esempi invece di oggetto bersaglio. Comunque il termine indica solo un bersaglio di un metodo dedicato al sistema particellare. Così, come operano i metodi 'particellari' di Real 3D? I metodi dedicati a questo sistema, come Radial Force, generano un campo di forza. Questo influenza l'attributo 'velocità' dell'oggetto. Più a lungo l'influenza del campo di forza agisce sull'oggetto, e più evidente sarà il cambiamento della sua velocità. Tutto ciò accade secondo la legge del moto di Newton. Se ricordi la formula F=m*a tutto questo ti sarà chiaro. Il termine F definisce quanto fortemente il campo di forza agisce sulla particella; m è la massa della particella mentre a è la risultnte accelerazione. In altre parole, se la forza F influenza la massa m della particella, la sua accelerazione sarà a. Cos'è esattamente l'accelerazione? Essa indica l'entità del cambiamento di velocità (dv) durante un secondo e può essere calcolata dalla formula a=dv/dt Combinando queste due formule, possiamo calcolare quanto varia la velocità di una particella durante un tempo dt. F*dt=m*dv=>dvF*dt/m Quindi, se l'intensità del campo di forza generato dal metodo è 1000 N, se la massa della particella è 100 kg e se il tempo tra le inquadrature successive è 0.1, la velocità dell'oggetto è cambiata dv=1000 kgm/s*0.1s / 100 kg =1.0m/s Così lo scopo del metodo Radial Force è solo di variare la velocitàdegli oggetti bersaglio in modo molto naturale. Come predisposto, il metodo genera un campo di forza simile a quello gravitazionale. La sua formula è: F=g*(m1*m2 / s) dove m1 è la massa della particella, m2 la massa del punto gravitazionale ed s la distanza che li separa; g è il fattore gravitazionale il cui valore è 1.0. Comunque puoi definire la forza del campo associando formule diverse all'oggetto metodo, come vedremo poi. Attributi come la massa, accelerazione e velocità propria, non muovono gli oggetti. Per produrre un vero movimento è necessario il metodo Processor: esso interpreta tutti gli attributi rilevanti degli oggetti bersaglio e li muove o ruota conformemente. Per creare un'animazione particellare, abbiamo bisogno di alcune particelle, forse un altro metodo dedicato al sistema particellare che modifica la velocità ed altre proprietà delle particelle, simulando la legge del moto di Newton, ed infine abbiamo bisogno di un metodo che trasformi gli attributi ddegli oggetti bersaglio in movimenti reali. Se hai letto tutto il testo precedente, ricordi il termine dt e sai che significa il tempo in seconfi. Quindi quanti secondi è l'intera animazione? Apri la finestra di animazione. Il riquadro Seconds indica la lunghezza in secondi dell'animazione. Se Resolution (numero dei fotogrammi) è 40 e seconds è 1.0, ciò significa che il dt tra due inquadrature successive è 1.0s/40=0.025s. Dimostriamo lo scopo del riquadro Second con un esempio. 6.14.2 LA PIÙ SEMPLICE ANIMAZIONE PARTICELLARE Creiamo una animazione senza alcun campo di forza. La domanda è come generare movimenti se nessun metodo per il campo di forza è presente? Definendo manualmente l'attributo velocità per le particelle. 1. Crea una sfera (la particella) 2 Seleziona la sfera e la funzione Modify/Properties/Velocity. Questa funzione ti permette di tracciare una linea che rappresenta il vettore della velocità della particella. In altri termini, la particella percorrerà quella distanza in un secondo. 3 Crea un metodo Processor. 4. Avvia l'animazione, e la particella si muove. Ora raddoppia l'attributo velocità selezionando la particella e Modify/Properties/Tags. Ci dovrebbe essere un tag VVEL associato alla particella che ne descrive la velocità. Se non esiste, la velocità della particella è zero (essa è statica). Ora seleziona la sfera e Modify/Properties/Spin. Questa ti permette di definire tre valori in radianti, che rappresentano le tre componenti di rotazione. il valore 3.14 fa ruotare la particella di 180 gradi attorno all'asse corrispondente in un secondo. Nota che la rotazione è definita nello spazio 'oggetto'. Ciò significa che se ruoti un oggetto usando p.e. la funzione Modify/Linear/Rotate, anche gli assi di rotazione sono rotati concordemente. Definisci qualche valore di Spin ed avvia l'animazione. Ora la sfera si sposta e ruota. 6.14.3 FORZA RADIALE DEFINIBILE Come abbiamo già menzionato, è possibile definire una formula per misurare i campi di forza prodotti dai metodi particellari. Creeremo una particella 'flock' (fiocco) che agisce sotto l'influenza di un tale campo di forza. 1. Crea una particella fiocco composta di cerchi. 2. Crea un metodo Radial Force allo stesso livello dei cerchi ed aggiungi il seguente tag ad esso: SFORf=100000*(s-2) 3. Crea un offset sotto al metodo Radial Force in modo che la distanza tra le particelle e lo offset sia maggiore di 2m. 4. Crea un metodo Processor allo stesso livello del metodo Radial Force. 5. Apri la finestra di animazione ed imposta Resolution a 200 (ciò ti darà maggior tempo per vedere cosa accadrà). Avvia l'animazione. Dato che inizialmente la distanza tra le particelle e la sorgente della forza è maggiore di 2.0, s-2 è positivo ed il metodo attrae a sè le particelle; quando la distanza si accorcia sotto a questo valore, il metodo le respinge. Per ulteriori informazioni sul metodo Radial Force vedi la sezione Referenze. 6.15 FORZE DIREZIONALI Il metodo Directed Force può essere usato per generare campi di forza con direzioni variabili ed arbitrarie. Quindi può essere usato per simulare il vento, la turbolenza, etc. Il metodo Directed Force richiede solo un parametro, che descricve la direzione del campo di forza durante l'animazione. Quando l'animazione è avviata, il metodo calcola un punto e la corrispondente direzione dalla curva parametro. La distanza tra il punto calcolato e la particella determina l'intensità della forza. più la particella è vicina all'oggetto parametro, e maggiore sarà la forza. 6.15.1 TURBOLENZA Lo scopo di questo esempio è dimostrare come la direzione e l'intensità della forza sono definite. 1. Crea una particella fiocco. Un modo molto facile di farlo è usando lo strumento Create/Compound Tools/Object-Pixel Tool. 2. Crea un metodo Directed Force. 3. Crea una curva B-Spline sotto al metodo. La direzione della forza è la direzione della curva corrispondente al tempo corrente. Quando è avviata l'animazione, il tempo scorre da 0 a 1 e la direzione della forza varia secondo la curvatura del metodo parametro. Se il parametro è solo una linea retta, genera un campo di forza a direzione costante, dato che la direzione della curva è la stessa ovunque. Un cerchio fa ruotare il campo di forza, etc. 4. Crea un metodo Processor allo stesso livello del metodo della forza. Figura T6-45: Un campo di forza direzionale definito da una curva B-Spline. 5. Imposta il riquadro Seconds della finestra di animazione a 2.0 Avvia l'animazione. Più breve è la distanza tra la particella e l'oggetto parametro, più intenso il campo di forza. 6.15.2 NEVE NEL VENTO Questa è la dimostrazione dell'uso di metodi multipli allo stesso livello gerarchico. Questo significa che più di un campo di forza influenza le particelle e la forza risultante è la somma di forze diverse. Abbiamo bisogno di un campo di forza che spinge in basso i fiocchi (la gravità). Questo può essere ottenuto usando una linea retta come parametro per il metodo Directed Force. Poi avremo bisogno di un campo di forza che rappresenta il vento. Un modo di creare il vento è di usare diversi metodi forze allo stesso livello in modo che le differenti parti della massa particellare siano influenzati da metodi differenti; più una particella è vicina a un metodo e maggiore sarà l'influenza di questo. Ciò provoca naturalmente una certa turbolenza alla massa particellare. Comunque in questo esempio creeremo un campo di forza. La direzione del vento dipende dalla posizione della particella che costringe la massa particellare a comportarsi come un fiocco di neve nella bufera. 1. Crea particelle che rappresentino i fiocchi di neve. Più grande è la quantità di memoria disponibile e maggiore sarà il numero dei fiocchi che puoi usare. 2. Crea un metodo Directed Force e rinominalo 'gravity'. 3. Aggiungi il seguente tag al metodo: SFOR f=9.81 Questo significa che la forza di gravità è sempre 9.81. In altre parole, la distanza tra l'oggetto parametro e le particelle determina l'intensità della forza. Il valore 9.81 è molto simile al campo di forza generato dalla terra. 4. Crea una linea retta sotto all'oggetto metodo, rappresentante la direzione della gravità (dovrebbe puntare verso il basso). 5. Crea un altro metodo Directed Force allo stesso livello gerarchico del primo ed aggiungi ad esso il seguente tag: SFOR f=10, fx=sin((y+t)*10), fy=cos((x+t)*10), fz=0 Le variabili fx, fy e fz sono usate per definire la direzione della forza e sono inizializzate per riflettere la direzione definita dal parametro del metodo. Qui riscriviamo i valori originali usando le funzioni sin() e cos(). 6. Crea un primitivo offset sotto al metodo. Useremo qualsiasi oggetto calcolabile qui, dato che la formula controlla comunque la direzione. 7. Crea un metodo Processor allo stesso livello gerarchico degli altri metodi. Figura T6-46: Le particelle di neve sono influenzate da due campi di forza separati, uno che simula il vento e l'altro la gravità. Apri la finestra di animazione, imposta Resolution a 100 e Seconds a 10, ed avvia l'animazione. Se il risultato non ti soddisfa, cancellalo ed usa Undo per tornare alla situazione iniziale. Nota che non puoi invertire la direzione dell'animazione per ripristinarla; i metodi particellari hanno una tale natura che invertendo il corso del tempo non produce gli stessi eventi in ordine inverso, ma risulta in una nuova situazione. Se le cose non accadono abbastanza rapidamente nell'animazione, accresci il valore Seconds. Se accade troppo, diminuisci i secondi e/o aumenta Resolution. Puoi anche salvare il progetto prima di avviare la risoluzione; è più sicuro che usare Undo, la cui profondità potrebbe essere insufficiente se compi troppi errori. Per maggiori informazioni circa le variabili Directed Force, vedi il manuale di riferimento. 6.16 FORZA TANGENZIALE Il terzo tipo di forza è Tangent Force. La direzione del campo di forza è sempre perpendicolare all'oggetto parametro ed alla linea tra l'oggetto bersaglio ed il punto centrale della forza. La regola della mano destra può essere usata per visualizzare la direzione, così che se il pollice della tua mano destra rappresenta la direzione dell'oggetto parametro ed il tuo primo dito punta alla particella, il tuo secondo dito mostra la direzione della forza. Figura T6-47: Forza tangente. Questo metodo è usato per simulare la rotazione dei campi di forza come quelli che si trovano nelle apparecchiature elettriche, generatori, etc. Poichè il campo di forza generato ruota gli oggetti bersaglio attorno all'oggetto parametro, la forza centrifuga cerca di esplodere la massa particellare proprio come nella realtà. 6.16.1 FORZA CENTRIFUGA Lo scopo di questo esempio non è solo quello di dimostrare come creare un campo di forza tangenziale, ma anche di dimostrare come gli oggetti animati gerarchicamente possono essere usati come bersagli dei metodi particellari, e come questi metodi tradizionali e particellari possano essere mescolati. In questo esempio useremo un oggetto animato 'meccanicamente come particella e lasceremo che un campo di forza tangenziale ruoti queste particelle. A causa della forza centrifuga, le particelle scompariranno presto, ma che importa. 1. Crea un livello e rinominalo 'particle'. 2. Crea delle gambe animate (come in 6.3.1) sotto all'oggetto 'particle'. 3. Duplica 'particle' in modo da avere alcune gambe che camminano. 4. Crea un metodo Tangential Force allo stesso livello delle particelle. 5. Crea un asse primitivo sotto al metodo della forza. 6. Crea un metodo Processor allo stesso livello del metodo Tangential Force e delle particelle. Figura T6-48: Gambe che camminano come particelle che agiscono sotto l'influenza di un campo di forza ruotante. Imposta la Resolution=100, Seconds=10 ed avvia l'animazione. La forza tangenziale inizia a ruotare le gambe che camminano; a causa della forza tangenziale, tutte le gambe se ne vanno. Ora abbiamo esaminato tutte e tre i metodi delle forze illustrandoli con uno o due semplici esempi. Il motivo non è che abbiamo esaurito ciò che c'era da dire su queste forze, ma esse richiedono una approfondita conoscenza matematica e fisica, e richiederebbe un intero libro per approfondire tutte le possibili applicazioni e le diverse caratteristiche. Quindi procediamo al prossimo paragrafo. 6.17 VALUTAZIONE DELLA COLLISIONE INTETRATTIVA I metodi di valutazione della collisione ti permettono di creare animazioni veramente impressionanti. P.e. gettare un pallone giù dalle scale e vederlo rimbalzare proprio come nella realtà. Porre una sfera su un tavolo, piegare il tavolo e la sfera rotolerà, cadrà e rimbalzerà sul pavimento. La lista dei possibili esempi è infinita. La valutazione interattiva delle collisioni significa che queste saranno valutate per tutte le particelle (oggetti). 6.17.1 SFERE CHE COLLIDONO 1. Crea due sfere. 2. Seleziona la seconda sfera e definisci una velocità per questa: usa Modify/Properties/Velocity e traccia una linea che origina dalla sfera, passando attraverso la seconda sfera. Questo porterà alla collisione delle due sfere. 3. Crea un Int Collision allo stesso livello delle sfere. 4. Crea un metodo Processor (dovresti sapere già a quale livello...). Figura T6-49: La valutazione delle collisioni applicata alle due sfere. Avvia l'animazione (se continui dall'esempio precedente, prima imposta Seconds a 1.0). La seconda sfera si muoverà verso la prima sino alla collisione; dopo questa anche la prima sfera si muove. Tutto questo accade secondo la legge di Newton. 6.17.2 COLLISIONI MULTIPLE Questo esempio è molto simile al precedente ad eccezione del fatto che ora useremo una catena di sfere ed un cubo. La prima sfera urta la seconda, la seconda la terza e così via. Lo scopo del cubo è di mostrarti come l'urto modifica la velocità così come la rotazione degli oggetti. 1. Crea diverse sfere ed un cubo in modo che la prima sfera colpisca il cubo, dopo la collisione con le altre sfere. Se il punto di collisione tra la sfera ed il cubo non è allineato con i centri gravitazionali degli oggetti, l'urto farà ruotare anche il cubo. 2. Definisci una velocità per la prima sfera verso le altre sfere. Assicurati che sia sufficientemente elevata (che il vettore sia abbastanza lungo). 3. aggiungi il tag 'FMAS 500' alla prima sfera. Questo ridefinisce la massa della sfera in modo che sia più pesante delle altre sfere. Se non c'è un tag FMAS associato ad un oggetto, sarà usata la massa preimpostata di 100 Kg. 4. Crea i metodi Int. Collision e Processor. Figura T6-50: Una sfera pesante produce collisioni multiple. Salva l'intero oggetto collisione ed avvia l'animazione. Se la velocità non fosse sufficientemente elevata, usa Project/Project/New e ricarica l'oggetto collisione. Ricorda che se inverti il senso dell'animazione, non otterrai la situazione originale. Quindi il modo migliore di provare animazioni particellari e valutazione delle collisioni è quello di salvare la situazione originale e ricaricarla quando necessario (o usando Undo). 6.17.3 PISTA DI BOWLING Ora creeremo una pista completa di Bowling. Quando la animerai, la boccia si muoverà verso i birilli mentre la gravità la farà collidere alla pista. La boccia inizierà a ruotare a causa della frizione tra sè stessa e la pista; infine essa urterà i birilli, questi urteranno tra loro e quello che dovrai fare sarà scrivere i punti. Dopo un po' di pratica, ci vorranno solo un paio di minuti per costruire questo tipo di animazioni. 1. Crea la pista da bowling, usando p.e. un cubo, e ridefiniscine la massa affinchè risulti estremamente pesante aggiungendo ad essa il tag FMAS 100000000. Deve essere così perchè non vogliamo che la boccia o i birilli influenziono troppo la pista. 2. Imposta Modify/Properties/Attributes/Protected per la pista di bowling. Dobbiamo farlo perchè non vogliamo che la gravità che attrae i birilli e la boccia contro la pista, influenzi la pista stessa. In questo modo fissiamo la posizione della pista. 3. Crea i birilli usando le funzioni Create/Compound/Lathe e Duplicate. 4. Crea la boccia da bowling a circa mezzo metro dalla pista, come fosse stata appena lanciata verso i birilli. 5. Usa la funzione modify/Properties/velocity per definire la velocità orizzontale della boccia. Il vettore di velocità dovrebbe avere una lunghezza almeno doppia rispetto alla pista. 6. Crea un metodo Int Collision. 7. Crea un metodo Directed Force ed usa un primitivo asse per definire la direzione della gravità (in giù!). Aggiungi il seguente tag al metodo: SFOR f=10 Questo rende costante l'intensità della forza, proprio come nella realtà di una vera pista da bowling. In realtà la forza gravitazionale non è costante, ma varia p.e. conformemente alla distanza dal centro del pianeta. Ciò nonostante le variazioni di gravità su una pista da bowling possono essere trascurate nella simulazione. Ora il tuo bowling è pronto. Salvalo e poi giocaci, usando p.e. 100 fotogrammi, dato che questa animazione richiede una certa accuratezza della risoluzione temporale. Dopo averla vista, sostituisci la scena con quella originale (load o undo). Figura T6-51: Bowling. Come preimpostato, la frizione della boccia con la pista è molto bassa. Questo significa che quando la boccia entra in collisione con la pista non ruota un gran chè. Quindi ridefiniamo il valore di frizione per la boccia e la pista di moddo che quando avviene la collisione, la boccia cominci a ruotare. 7. Seleziona la boccia e la pista ed aggiungi loro il seguente tag FFRI 0.5 FFRI sta per FRIzione, che dipende dalla qualità e dal tipo di superficie dell'oggetto. Nota che puoi definire fattori di frizione differenti per oggetti diversi, nel qual caso la collisione è calcolata secondo la loro media. Per essere fisicamente corretti, il valore di questo tag dovrebbe essere compreso tra 0 ed 1. Comunque puoi usare valori più alti, o negativi, ma il risultato non corrisponderà più alla realtà empirica. Se la tua sfera urtasse impropriamente la pista, puoi accrescere l'accuratezza del metodo di valutazione. Vi sono diversi modi per farlo. Il primo è di aumentare il valore Smpl nella finestra di animazione. Questo fa in modo che il sistema di animazione usi una risoluzione interna più alta visualizzando l'animazione. Il valore di Smpl influenza la qualità della sfocatura del mosso e l'accuratezza con cui le animazioni particellari rappresentano le leggi fisiche. Il secondo modo è di aumentare il valore Resolution nella finestra di animazione: Più inquadrature sono specificate, più sarà breve il tempo tra due fotogrammi successivi, e migliore l'accuratezza. Il terzo modo è quello di aggiungere il tag ICSM a quegli oggetti tra cui la maggiore accuratezza è richiesta. Il valore può essere 0, 1 e 2: se il valore fosse diverso tra gli oggetti considerati, sarà usato il valore minimo. P.e. aggiungendo wquesto parametro alla pista ed alla boccia, la collisione tra i due è calcolata con accuratezza, ma le collisioni tra i birilli e la boccia sono calcolate usando l'accuratezza preimpostata (dato che non c'è un parametro ICSM assegnato ai birilli). Il terzo modo è di solito il più adatto perchè può essere usato selettivamente. 8. Quindi aggiungi il tag ICSM 2 alla boccia ed alla pista. Ora la tua animazione dovrebbe agire perfettamente. Salvala, avviala e goditela. 6.17.4 LASCIAR CADERE UNA BIGLIA IN UN TUBO In questo esempio, getteremo una sfera attraverso un lungo tubo ricurvo. 1. Crea un tubo ricurvo usando Create/Compound_Tools/Circular_Subdivided. 2. Fai una selezione multipla di tutti i cilindri, poi Modify/Properties/Attributes, ed attiva Hollow, No 1st BP e No 2nd BP per rendere vuoto il tubo. 3. Definisci una massa molto alta per esso aggiungendo il tag FMAS 100000000 all'oggetto tubolare. 4. Crea i metodi Int Collision e Processor allo stesso livello del tubo. Figura T6-52: Una sfera guidata dalla valutazione della collisione attraverso un tubo. 5. Crea una sfera e lanciala nel tubo definendo un'adeguata velocità verso l'inizio del tubo usando la funzione Modify/Properties/Velocity. 6. Aggiungi il tag ICSM 2 al tubo ed alla biglia. 7. Avvia l'animazione (1 Second, Resolution 100) Un importante fattore per l'animazione delle collisioni (ed anche delle altre animazioni particellari) dev'essere sottolineato: il risultato di tali animazioni dipende molto dagli aggiustamenti per l'accuratezza della valutazione, p.e. sulla quantità di fotogrammi specificate quando si anima. Quindi sarà saggio usare la risoluzione finale sempre. La ragione di ciò è che anche leggere modificazioni risultano in una sequenza accumulativa di cambiamenti. Infatti questa è anche la situazione del mondo reale: anche i più semplici dei sistemi di collisione sono caotici di natura. 6.17.5 UNA PALLA ROTOLANTE Creeremo un tavolo con alcune sfere sopra di esso. Quando il tavolo viene inclinato, le sfere iniziano a muoversi ed a cadere rimbalzando sul pavimento. Useremo il metodo Sweep per piegare il tavolo. I metodi Directed Force e Collision Detection avranno cura del resto. 1. Crea un oggetto composto da un pavimento e da un tavolo. Rendi l'oggetto molto pesante aggiungendo il tag FMAS 100000000 (un milione di Kg!) e fissalo all'universo settando Protection con Modify/Properties/Attributes. Rinomina l'oggetto costituito dal tavolo e dal pavimento 'table&floor'. 2. Crea un meccanismo di inclinazione del tavolo usando Animate/Create/Sweep. Imposta il tempo iniziale del metodo Sweep a 0.5 (Modify/Properties/Animation) così che cominci a inclinarsi quando il tempo raggiunge quel valore. Questo ti permette di osservare come la valutazione delle collisioni mantiene le sfere sul tavolo. Imposta il tempo End del metodo a 0.5. 3. Crea alcune sfere sopra al tavolo. Ponile allo stesso livello gerarchico dell'oggetto 'table&floor'. 4. Crea un campo gravitazionale usando un metodo Directed Force ed un parametro asse. 5. Crea i metodi Int Collision e Processor. Figura T6-53: Inclina il tavolo e le sfere cadranno. 6. Aggiungi il tag FFRI 1.0 al tavolo ed alle sfere. Questo farà che le sfere ruotino (non scivoleranno semplicemente lungo il tavolo). 7. Prima di animare l'esempio, esaminiamo un tag chiamato FREB. Ti permette di definire il così detto 'fattore di rimbalzo' che definisce quanta energia cinetica l'oggetto disperde nella collisione. Il valore preimpostato è 1.0 che significa che esso non perde alcuna energia cinetica. Il valore 0 causa la perdita totale di energia cinetica facendo in modo che le particelle si attaccheranno una all'altra. Quindi salva l'animazione ora ed avviala. Quindi reimposta il tempo a 0, sostituisci l'oggetto con l'originale, ed imposta FREB 0.5 per le sfere ed avvia nuovamente l'animazione. 6.18 VALUTAZIONE NON INTERATTIVA DELLE COLLISIONI Come è stato precedentemente menzionato, nalla collisione interattiva, le collisioni vengono valutate per ogni oggetto. Comunque a volte non è necessario, e neppure desiderabile, specialmente quando si animano fiocchi composti da migliaia di particelle. P.e. quando un uomo cammina nella neve, le collisioni tra l'uomo e le singole particelle di neve dovranno essere valutate e processate, mentre le particelle di neve non dovranno collidere tra loro. La collisione non interattiva è un metodo progettato per questo tipo di applicazioni. Processa le collisioni che accadono tra gli oggetti bersaglio e gli oggetti parametro di questo. Comunque le collisioni tra gli oggetti bersaglio o le collisioni tra gli oggetti parametro non vengono valutate. Facciamo un po' di pratica. 6.18.1 UN PIANETA E DELLE METEORITI Ora creeremo un pianeta ed alcune meteoriti. La gravità del pianeta provoca la collisione delle meteoriti. Comunque la collisione delle meteoriti tra loro non è valutata. 1. Modella delle meteoriti usando selle piccole sfere. 2. Crea un metodo Collision al loro stesso livello. 3. Crea un pianeta sotto al metodo Collision. Aggiungi il tag FMAS 100000000 alla sfera per renderla molto pesante. 4. Crea un metodo Radial Force allo stesso livello delle meteoriti. Crea un primitivo offset sotto di esso per definire la posizione della forza. Crealo al centro del pianeta. 5. Crea un metodo Processor. Figura T6-54: Collisioni solo tra il pianeta e le meteoriti. Avvia l'animazione. Conformemente alla dimensione degli oggetti, dovrai adattare il numero dei fotogrammi; se le meteoriti si spostano così rapidamente da attraversare la superficie del pianeta, aumenta il valore Resolution. 6.19 FRIZIONE Immaginiamo una situazione dove una forza influenzi un oggetto. La forza accellera l'oggetto conformemente alla legge del moto di Newton: F=ma. Ciò significa che più a lungo la forza influenza l'oggetto, e più velocemente questo si muoverà. Comunque questo non sembra accadere nel mondo reale. La ragione è che solitamente ci sono altre forze coinvolte, rendendo molto difficile la generazione di movimenti molto veloci. P.e. l'aria è uno di questi elementi che oppongono resistenza. Queste forze di resistenza sono chiamate forze di frizione. Il metodo Friction può essere usato per aggiungere queste forze di resistenza alla realtà virtuale di Real 3D. Se la velocità di un oggetto è 0, il metodo friction non agisce affatto su di esso. Più la velocità di un oggetto è elevata e maggiore la frizione che lo influenzerà, essendo la direzione della forza di frizione sempre opposta alla direzione della velocità dell'oggetto. L'intensità della forza di resistenza è proprzionale al quadrato della velocità. L'intensità della forza dipende anche dalla dimensione dell'oggetto. Più grande è l'oggetto, e più alta sarà la forza di frizione. La dimensione ha comunque un effetto meno accentuato della velocità; l'intensità della forza è accresciuta solo linearmente in proporzione alla dimensione. La massa dell'oggetto determina quanto la forza di frizione può influenzare la sua velocità. Più alta è la massa, e meno sensibile alla forza di frizione è l'oggetto. L'intensità della forza generata dal metodo friction è definita dalla seguente formula: f= Fmax* (d*(e)2 / d*(e)2+1) dove d è il diametro ed e è l'energia totale dell'oggetto (cinetica + rotatoria). Fmax è la forza necessaria per fermare l'oggetto nell'intervallo di tempo tra due fotogrammi successivi: la formula non può produrre una forza maggiore di questa. Il metodo Friction non richiede parametri. 6.19.1 FRIZIONE E SFERE CON DIVERSE DIMENSIONI 1. Crea tre sfere con dimensioni diverse e definisci la stessa velocità per ognuna con Modify/Properties/Velocity. 2. Crea due sfere di uguali dimensioni ed aggiungi il tag FMAS 10 alla seconda. 3. Crea un metodo Friction allo stesso livello delle sfere. 4. Crea un metodo Processor. Figura T6-55: l'effetto del metodo friction su oggetti diversi. Avvia l'animazione e la resistenza dell'aria rallenta le sfere. Più grande è la sfera, e maggiore è la frizione. Più la velocità è elevata, e maggiore la frizione. Più grande è la massa e minore è la variazione della velocità causata dalla frizione. 6.19.2 FRIZIONE CONFIGURABILE Il metodo Friction può essere configurato, come ogni altro metodo, aggiungendo una formula o procedura che definisce l'intensità della forza frizione per esso. In questo modo sarà facile creare dei begli effetti, come la frizione la cui forza è dipendente dalla posizione (campi non omogenei di frizione). Creiamo una semplice animazione particellare dove la forza radiale sposta un numero di particelle mentre un metodo Friction configurato resiste ai loro moti. 1. Crea un insieme di sfere. 2. Crea un metodo Radial Force. Crea un primitivo offset che definisce il centro del campo di forza, sotto al metodo. 3. Crea un metodo Friction ed aggiungi ad esso il tag: SFOR if(x<0, f=f*2, f=0) La variabile x riflette la posizione attuale della particella; quindi la formula usa un'espressione condizionale dove f è sia duplicata o impostata a zero, conformemente alla posizione della particella. 4. Crea un metodo Processor ed avvia l'animazione. Tutte le particelle sulla sinistra (dove la coordinata x è minore di zero) sono influenzate dalla frizione, mentre quelle sulla destra non lo sono. Figura T6-56: Un campo non omogeneo di frizione. 6.20 CREAZIONE Il metodo Creation è un oggetto strumento per la creazione procedurale. Questo vuol dire che può generare nuovi oggetti durante le animazioni. Di fatto può controllare l'intero processo di 'nascita e morte'. P.e. fenomeni come l'acqua bollente o i fuochi artificiali sono una perfetta applicazione per questo. Il metodo Creation accetta qualunque numero di oggetti parametro. Il metodo usa gli oggetti parametro come campioni per la creazione di nuove copie. Le copie vengono inserite allo stesso livello gerarchico dello stesso metodo così che saranno ulteriori bersagli per questo. Il metodo può anche cancellare gli oggetti bersaglio. Le regole che controllano questo processo sono definiti generalmente usando due tags associati ai parametri e/o agli oggetti bersaglio: SCRE e SDEL. Quando il tag SCRE è trovato da un oggetto parametro, è calcolato ed il valore della variabile I è usato per determinare se la copia dell'oggetto dev'essere creata. Se il valore è 0 (o non esiste il parametro SCRE associato all'oggetto parametro), la copia non è creata. Se il parametro SDEL è incluso nell'oggetto bersaglio e se il valore della variabile I è diverso da zero, l'oggetto bersaglio è cancellato. 6.20.1 UN TUBO SFERICO Questo è forse l'esempio più semplice dell'uso del metodo Creation: una sfera che segue un percorso lasciando dietro a sè delle copie. 1. Crea un metodo Creation. 2. Crea una sfera sotto questo. 3. Aggiungi il tag alla sfera: SCRE I=1 4. Crea un metodo Path allo stesso livello della sfera (sotto al metodo Creation) ed una curva B-Spline sotto al metodo Path. Figura T6-57: Una sfera in movimento come parametro per il metodo Creation. Avvia l'animazione ed il metodo Path muove l'oggetto campione lungo il percorso, mentre il metodo Creation crea una nuova sfera in ogni fotogramma dell'animazione. Gli oggetti bersaglio creati dal metodo hanno tutte le proprietà dell'oggetto campione. 6.20.2 ACQUA BOLLENTE Un altro buon esempio di creazione procedurale è l'acqua bollente. Quando la temperatura raggiunge un certo livello, le bolle iniziano ad apparire casualmente dentro all'acqua ed inizia a salire sinchè raggiungono la superficie dell'acqua e spariscono.. Bene, facciamolo. 1. Crea un metodo Creation. 2. Crea una bolla sotto al metodo ed aggiungi ad essa il seguente tag: SCRE I=1 SDEL I=y>0.0 Poichè il valore della variabile I in SCRE è sempre 1, una nuova bolla è creata in ogni fotogramma. Il parametro SDEL definisce che la bolla sarà cancellata quando la sua coordinata y raggiunge il valore 0. 3. Usa la funzione Modify/Properties/Velocity per definire la velocità della bolla. L'idea è che quando la bolla è creata, inizierà a salire. 4. Crea un metodo Path allo stesso livello della bolla. Imposta Frequency del metodo a 5, e disegna una curva fortemente oscillante sotto al metodo Path. Il modo in cui definiamo la posizione iniziale delle bolle è molto 'deterministico', ma se il percorso è molto curvo e complesso, sembrerà che le bolle siano create casualmente in tutta l'acqua (Ti spiegheremo più tardi come usare una vera funzione casuale per definire la posizione delle bolle usando RPL). 5. Crea il metodo Processor allo stesso livello del metodo Creation. Come menzionato prima, il solo attributo (massa, velocità) non muove l'oggetto. È necessario il metodo Processor per convertire gli attributi in movimenti reali. Poichè non abbiamo creato un metodo Processor allo stesso livello della bolla campione, il campione non salirà (la velocità è là, ma non è convertita in un movimento). 6. Crea una pentola ed un cerchio dentro ad essa che rappresenta la superficie dell'acqua dentro alla pentola. Nota che abbiamo usato l'espressione condizionale y>0 per definire quando le bolle svaniscono, quindi il cerchio dovrà essere posizionato a quell'altezza. 7. Rendi invisibile l'oggetto metodo Creation, per fare apparire dal nulla le bolle. Figura T6-58: acqua bollente. Ora il nostro esempio di acqua bollente è pronto; ti raccomando di salvare ora il progetto e di spendere un po' di tempo per renderlo con qualità fotografica. Usa una bumpmap animata sulla superficie dell'acqua e con queste bolle, l'acqua bollente dovrebbe sembrare ottima. 6.20.3 IL SERPENTE CHE SI CONTORCE Ora ti mostreremo come l'età di un oggetto può essere usata per determinare il momento in cui l'oggetto dovrebbe 'morire'. Quando l'oggetto diventa sufficientemente vecchio, scompare. l'oggetto campione si sposta lungo una curva B-Spline proprio come avevamo fatto nel nostro primo esempio di Creation, ma ora cancelleremo gli oggetti bersaglio in modo che prima un oggetto è creato e prima muore. 1. Crea gli oggetti descritti nel paragrafo 6.19.3 ma ora aggiungi il tag SDEL alla sfera campione: SDEL I=t-fx>0.1 La variabile fx definisce il momento quando l'oggetto è stato creato, mentre t il tempo corrente. Così l'età dell'oggetto è t-fx e quando diventa maggiore di 0.1 l'oggetto è sufficientemente vecchio per essere dissolto. Salva ed avvia l'animazione ed all'inizio assomiglia alla nostra primo esempio di Creation. Comunque presto le vecchie sfere cominciano a sparire ed il numero delle sfere che compongono il tubo non cresce più. Figura T6-59: Animazione con il metodo Creation. Sperimentiamo ancora un po' con questa animazione. Ricaricala e prova la seguente formula con il tag SDEL: SDEL I=t-fx>0.2*sin(12*t)*0.1 Avvia l'animazione e la lunghezza del 'serpente' varia mentre si muove lungo il percorso. 6.21 PROCESSORE Se hai seguito sin'ora tutti gli esempi di animazione, già conosci questo metodo. È usato per convertire gli attributi dell'oggetto orientato al sistema particellare, come la velocità, ai movimenti veri. Consideriamo un sistema particellare composto da una sfera, una forza radiale ed un metodo processore e osserva ciò che accade quando l'animazione è avviata. 1. Il tempo globale è accresciuto di un valore dipendente dalla risoluzione dei fotogrammi e tutti i metodi devono essere informati circa il nuovo tempo. 2. Il metodo Radial Force manipola l'attributo velocità della sfera. Dato che la forza radiale conosce quanto fortemente (F) influenza la sfera e quanto a lungo il tempo (dt) ha influenzato la sfera dall'ultimo fotogramma, può calcolare quanto la velocità (dv) della sfera con una certa massa (m) dovrebbe variare. Tutto questo accade secondo la legge del moto di Newton: F=m*a=>F=m*(dv/dt)=>dv=(F*dt)/m Se la formula F=m*a non ti dice nulla non hai compreso ciò che è stato presentato sopra. Comunque la formula può essere spiegata in modo più comprensibile: se sappiamo quanto a lungo una certa forza influenza un oggetto con una data massa, possiamo calcolare quanto varia la velocità dell'oggetto. 3. Allora il metodo Processor legge la velocità corrente della sfera e calcola quanto lontano (ds) la sfera ha viaggiato dall'ultimo fotogramma (dt) con la sua corrente velocità: v=ds/dt=> ds=v*dt In unaforma umanamente leggibile, potrebbe essere qualcosa come: se guidi la tua macchina e sai quanto a lungo e quanto velocemente guidi, potrai calcolare quanto lontano puoi andare. 6.22 RPL Il metodo RPL ti permette di creare le tue proprie procedure RPL per associarle agli oggetti. Quando è avviata l'animazione, la tua procedura è eseguita in ogni fotogramma e dipende completamente da questa procedura di decidere cosa fare quando capita. Poichè RPL è un linguaggio di programmazione completo, non c'è molto che tu NON possa fare. in un certo modo, questo metodo è uno dei più potenti che si trovano nel programma, ma naturalmente, per poter trarne il massimo vantaggio, devi sapere come scrivere programmi RPL. Tutti i metodi inclusi, come Path, Size, Radial_Force etc. possono essere migliorati usando il metodo RPL. Dato che questo soggetto è molto esteso, faremo solo un esempio basilare qui. per ulteriori informazioni sul linguaggio RPL consulta il manuale di riferimento. 6.22.1 UN FACILE MODO DI SCRIVERE UNA PROCEDURA RPL Il modo più facile di scrivere una tale procedura è di usare la funzione Macro. Proviamo. 1. Crea una sfera. 2. Memorizza un Macro in cui sposti un poco l'oggetto. 3. Crea un metodo RPL allo stesso livello della sfera. 4. Aggiungi il seguente tag al metodo: SRPL "t:macro.rpl" LOAD Avvia l'animazione e la sfera si muove. La funzione RPL LOAD carica il macro corrente "t:macro.rpl" e lo esegue. Quando usi questo metodo il tag SRPL dev'essere associato ad esso. Il contenuto di questo parametro è eseguito in ogni inquadratura e dev'essere un programma RPL. Normalmente il tag contiene una funzione per tutte le presenti procedure, che è un modo di velocizzare efficientemente. 6.23 ONDA Il metodo Wave può essere creato per creare onde. Se il suo primo parametro è un primitivo asse, allora il metodo crea delle onde radiali. Se il primo parametro è un coordsys, allora le onde possono essere definite separatamente in ogni direzione. Il secondo primitivo può essere qualunque oggetto calcolabile che definisce la forma delle onde. P.e. un circolo crea onde sinuose. 6.23.1 MARE ONDOSO Questo esempio dimostra l'effetto quando il metodo Wave è applicato agli oggetti di forma libera. 1. Crea un reticolo che rappresenta la superficie dell'acqua. 2. Crea un metodo Wave allo stesso livello del reticolo. 3. Crea un asse sotto al metodo in modo che sia perpendicolare al reticolo. 4. Crea un cerchio sotto al metodo in modo che l'asse lo sezioni in due semicerchi. Figura T6-60: Mare ondoso. Avvia l'animazione e onde sono create sull'intero reticolo. Dato che il primo parametro è un asse, l'altezza delle onde è determinata dalla distanza tra il punto dell'onda e l'asse. 6.23.2 UNA GOCCIA D'ACQUA Anche questo esempio illustra onde radiali, ma ora usiamo la superficie che è costruita ruotando una curva attorno ad un asse. La natura radiale delle onde generate può essere meglio visualizzata su questo tipo di superficie. 1. Crea un reticolo disco usando la funzione Create/Freeform/Rotate: ruota semplicemente una linea retta di 10 punti attorno ad un asse. 2. Crea un oggetto metodo Wave con un asse ed un cerchio. Nota che puoi usare lo stesso asse che ti è servito per creare il reticolo. Figura T6-61: Onde radiali. Avvia l'animazione. Ora le onde radiali possono chiaramente essere viste. 6.23.3 ONDE PARALLELE Se il primo parametro è un coordsys, allora il profilo dell'onda rimane lo stesso mentre si muove lungo un asse y. La forma dell'onda dipende dalla distanza tra un punto e l'origine del coordsys nella direzione x. La lunghezza dell'asse x definisce la lunghezza d'onda e la lunghezza dell'asse z l'altezza dell'onda. 1. Crea un reticolo. 2. Crea un metodo con un coordsys ed un cerchio. Figura T6-62: Onde parallele. Avvia l'animazione ed il metodo genera onde nella direzione x. 6.23.4 ONDE E INCRESPATURE Naturalmente è possibile creare più di un metodo Wave allo stesso livello, nel qual caso le onde si incroceranno tra loro. In altre parole l'onda risultante è la somma delle onde componenti. Dato che la dimensione dei parametri per i metodi onda definiscono la lunghezza e l'altezza dell'onda, questa caratteristica può essere usata p.e. per generare increspature sulle onde. Creiamo due metodi onda che generano onde parallele perpendicolari una all'altra. 1. Crea onde parallele come descritte nell'esempio precedente. 2. Duplica il metodo oggetto, ruotalo e rendilo molto più piccolo. Figura T6-63: Onde incrocianti. Avvia l'animazione e ci saranno piccole onde nelle grandi onde. 6.23.5 PARTICELLE ONDULATE Questo esempio dimostra come il metodo Wave può essere usato per ondulare un insieme di primitivi, invece di un reticolo. Se l'oggetto bersaglio non è una forma libera, allora è trattato come un punto di un oggetto forma libera. Invece di usare un bersaglio forma libera per il metodo, possiamo usare centinaia di primitivi. Quindi creiamo un esempio dove il metodo Wave è applicato ad un numero di sfere: 1. Crea una linea composta di piccole sfere. 2. Crea un metodo Wave allo stesso livello delle sfere. 3. Crea un coordsys ed un cerchio sotto al metodo. 4. Avvia l'animazione. Figura T6-64: Particelle ondeggianti.