Tutto quello che riguarda l'arte del Cinema, nei suoi diversi aspetti.

 

Gli articoli riguardanti tutte le fasi dello sviluppo di un video: dalla sceneggiatura alla post-produzione.

 

Le anteprime hardware e software recensite per voi dai nostri esperti.

Login

Ciao Visitatore.






Password dimenticata?
Nessun account? Registrati

Chi è Online

Abbiamo 4 visitatori e 4 utenti online
Home arrow Tutorials arrow After Effects Expressions | part 2
After Effects Expressions | part 2 Translate in English Stampa E-mail
di VO5850   
lunedì 24 dicembre 2007


Arrays (matrici)

Fino ad ora abbiamo preso in esame proprietà mono-dimension, ovvero costituite da un solo valore. Sono mono-dimension Opacity e Rotation, o come abbiamo visto, le proprietà di molti effetti come, per esempio, il Blurriness dell’effetto Fast Blur. Molte proprietà di After Effects però sono rappresentate da due o più valori: Scale, Position, Anchor Point, Orientation e tantissime proprietà di effetti sono costituite da una serie di valori.

 

 

Prima di andare avanti con un nuovo esempio pratico è il caso di introdurre un altro elemento del linguaggio delle expression, il concetto di array. Un array non è altro che una serie ordinata di valori. Un array può contenere valori numerici o qualsiasi altro tipo di dati, un array può avere diverse dimension, la dimension di un array è il numero di valori che lo compongono. In After Effects proprietà diverse hanno dimension diverse in base al numero di valori che le costituiscono.
Per esempio la dimension di proprietà come Rotation e Opacity è 1 in quanto il loro valore è costituito da un unico numero, in questo caso si parla di proprietà mono-dimension. La dimension di proprietà come Scale e Position (in layer 2D) è 2 ovvero [x,y] - le stesse proprietà in un layer 3D sono rappresentate da un array con dimension 3 ovvero [x,y,z]. Infine proprietà come i colori sono rappresentate con array 4D - [r,g,b,a] (rosso, verde, blu, alpha).
Un array si rappresenta con dei valori separati da una virgola fra parentesi quadre, a questo modo:


[dimension[0],dimension[1]]


Abbiamo visto che un Array è una serie ordinata di valori, possiamo accedere ai singoli elementi di un Array usando le parentesi quadre e un indice che indica l’elemento desiderato. Gli elementi di un Array sono indicizzati a partire da 0: la prima dimension in un Array è contrassegnata come “ [0] ”, la seconda come “ [1] ” e così via.

Nel caso della Position di un layer 3D, l’Array è indicizzato in questo modo:


- position[0] è la coordinata x della posizione.

- position[1] è la coordinata y della posizione.

- position[2] è la coordinata z della posizione.


e l’expression relativa si scrive:


[position[0],position[1],position[2]]


In questo Array applicato alla position di un layer 3D il primo valore (position[0]) rappresenta la posizione nell’asse orizzontale, il secondo (position[1]) in quello verticale, il terzo (dimension[2]) la posizione in profondità nello spazio.


Il concetto di indexing è insito in AE e il linguaggio delle expression non fa eccezione. I layers in timeline sono indicizzati, gli effetti, le proprietà interne dei layer e degli effetti, tutto è indicizzato e può essere selezionato indicandone, appunto, l’indice.


Dopo questa necessaria digressione vediamo di applicare le expression a delle proprietà multi-dimension, iniziamo con la position. Il nostro obiettivo è creare uno stream di solidi facendo in modo che tutti i layer seguano il primo a una distanza prestabilita, ad esempio 10 pixel.


4. creiamo un nuovo solid layer della dimensione di 250x150 px e chiamiamolo “master”

5. animiamo la Position del solid “master” con due keyframes, facendo in modo che il movimento inizi e finisca fuori dalla composition procedendo da destra verso sinistra.

6. duplichiamo il solid “master” e chiamiamolo “frame_01”

7. aggiungiamo un’expression sulla position del layer “frame_01” (ALT+click o Option+click su Mac, sullo stopwatch) trasciniamo con il mouse il pickwhip sulla proprietà Position del layer “master”, il programma creerà automaticamente un’expression che farà si che la posizione dei due layer sia esattamente uguale in ogni momento:


thisComp.layer(“master”).transform.position


Ma non era questo l’obiettivo che ci eravamo prefissi, a noi serve che il layer master trascini gli altri, che dovranno seguirlo a una distanza prefissata.
Qualcuno potrebbe obiettare che in AE è possibile controllare un layer attraverso un altro con il parenting, ovvero possiamo stabilire una relazione gerarchica parent-child, cioè ogni modifica o trasformazione applicata al parent layer immediatamente viene trasmessa ai layer apparentati (child) mentre le trasformazioni dei children layers non influenzano il parent, ma se desideriamo creare delle relazioni solo fra specifici parametri è necessario usare le expressions. Con il parenting invece qualsiasi variazione di qualunque parametro o proprietà del parent layer influenza i child layers.

Nel nostro caso ad esempio potremmo disporre i layer uno dietro l’altro alla distanza voluta e apparentarli, ma in questo caso, se volessimo per esempio modificare l’Opacity del layer master questa influenzerebbe anche l’Opacity di tutti i layer child. allo stesso modo se decidessimo di eliminare o spostare un layer dovremmo nuovamente riarrangiare manualmente la posizione di tutti gli altri.


Prima di andare avanti è necessaria una piccola premessa: non esiste un solo modo per ottenere il risultato, né una maniera più esatta di un’altra, possiamo ottenere quello che ci serve, in questo caso creare una striscia di layers, in tantissimi modi diversi, in questo caso prenderò una direzione che ci consenta di introdurre altri concetti e diverse tecniche guidati più da fini didattici che da esigenze pratiche.


Alla luce di quanto visto prima nel paragrafo dedicato agli Array, l’expression applicata alla Position creata con il pickwhip può essere rappresentata anche in questo modo:


[thisComp.layer(“master”).position[0],thisComp.layer(“master”).position[1]]


Per scriverla più velocemente è possibile aiutarsi con il pickwip procedendo in questo modo:
cliccare sul campo di testo dell’expression e cancellare tutto il contenuto, ora digitare una parentesi quadra (ALT Gr + è) e trascinare il pickwip sul parametro position [0] del layer “master”, aggiungere una “,” e ripetere l’operazione trascinando il pickwip sul parametro position [2] del layer “master”, chiudere la parentesi quadra digitando “ALT Gr + +”.

 


8. adesso editiamo l’expression così ottenuta nel modo seguente:


[thisComp.layer(“master”).position[0]-260,thisComp.layer(“master”).position[1]]


Diamo il play alla composition e vedremo che il layer “frame_01” seguirà il layer “master” ad una distanza di 10 px in orizzontale.


Esaminiamo ora l’expression, in pratica abbiamo sottratto al valore position [1] una quantità di 260 px, che sarebbero la lunghezza del layer (250 px) più i 10 px di distanza fra i layers. Notare come potremmo scrivere questa expression in diverso modo senza influenzarne il funzionamento, per esempio così:


thisComp.layer(“master”).transform.position-[260,0]


infatti il valore thisComp.layer(“master”).transform.position rappresenta un array 2D, in pratica corrisponde a [360,288] e naturalmente è possibile applicare agli array gli stessi operatori matematici che possiamo applicare alle proprietà mono-dimension. La stessa expression, introducendo un altro concetto (o meglio due), possiamo scriverla anche a questo modo:


x=thisComp.layer(“master”).position[0]-260;

y=thisComp.layer(“master”).position[1];

[x,y]


ma di expression multi-linea e variabili parleremo più avanti. Adesso torniamo al nostro problema.
La soluzione trovata funziona ma è poco elegante e macchinosa, per esempio, aggiungendo dei layer, dovremmo calcolare per ogni layer la distanza da sottrarre alla position, una soluzione scomoda e nel caso decidessimo di modificare la posizione gerarchia dei layer nella composition o la loro dimensione dovremmo modificare manualmente ogni expression.