Guida utente Annulla

Informazioni sul linguaggio delle espressioni

Scopri il linguaggio delle espressioni e utilizzalo per formulare diverse espressioni in After Effects.

Il linguaggio delle espressioni di After Effects si basa su JavaScript, con una gamma estesa di oggetti incorporati. After Effects utilizza il linguaggio standard di base JavaScript, non le estensioni specifiche del browser web, e contiene un proprio insieme di oggetti di estensione, come Livello, Composizione, Metraggio e Videocamera.

Anche se il linguaggio delle espressioni è basato su un linguaggio di script, esiste una leggera ma importante differenza tra uno script e un’espressione. A differenza di uno script, che dà un’istruzione all’applicazione, un’espressione dà un’istruzione a una proprietà.

Quando create le espressioni, tenete presente quanto segue:

  • Il valore di un’espressione è il valore dell’ultima istruzione valutata. Si tratta in genere dell’ultima riga dell’espressione. Nella sua forma più semplice, il valore di un’espressione viene prodotto dall’ultima variabile o dalla funzione chiamata nell’espressione in base all’ordine di valutazione. Tuttavia, può essere anche un valore a cui si fa riferimento esplicitamente come valore di ritorno. Ciò può includere valori usati molto prima nell’espressione per scopi di debugging o valori all’esterno delle funzioni e delle variabili dichiarate esplicitamente che non vengono processati nell’ordine in cui sono stati scritti.
  • JavaScript è un linguaggio sensibile alla distinzione tra maiuscole e minuscole.
  • Le funzioni non dovrebbero essere dichiarate nella parte inferiore di un’espressione.

Nozioni di base sul linguaggio

In JavaScript, un valore memorizzato in un oggetto è chiamato proprietà. Tuttavia, After Effects usa il termine proprietà in riferimento ai componenti del livello definiti nel pannello Timeline. Per questo motivo, After Effects fa riferimento alle proprietà JavaScript come metodi o attributi. Come regola generale, la differenza tra un metodo e un attributo è che di solito il metodo esegue una qualche operazione per creare (restituire) il proprio valore di output, mentre un attributo, per creare il proprio valore di output, fa riferimento semplicemente a un valore esistente. Per distinguere un metodo da un attributo, la cosa più semplice consiste nel cercare le parentesi che seguono il nome del metodo, le quali racchiudono qualsiasi argomento di input nel metodo.

Un oggetto è un elemento che può contenere altri oggetti, attributi e metodi. Le composizioni, i livelli e gli elementi di metraggio sono esempi di oggetti. In particolare, le composizioni, i livelli e gli elementi di metraggio sono oggetti globali, il che significa che è possibile farvi riferimento in qualsiasi contesto, senza fare riferimento a un oggetto di livello superiore.

Accedere ad attributi e metodi

Potete utilizzare il linguaggio delle espressioni per accedere ad attributi e metodi delle proprietà del livello. Per accedere a un valore, utilizzate una catena di riferimenti oggetto separati dall’operatore punto (.). Per concatenare i riferimenti oggetto oltre il livello (ad esempio per fare riferimento alle proprietà degli effetti, maschere o animatori di testo), potete anche utilizzare le parentesi. Ad esempio, per collegare la proprietà Opacità nel Livello A alla proprietà Sfocatura dell’effetto Controllo sfocatura nel Livello B, immettete la seguente espressione nel campo apposito per la proprietà Opacità del Livello A:

thisCompayer(“Layer B”)ffect(“Gaussian Blur”)(“Blurriness”)
thisCompayer(“Layer B”)ffect(“Gaussian Blur”)(“Blurriness”)
thisCompayer(“Layer B”)ffect(“Gaussian Blur”)(“Blurriness”)

Leggendo quest’espressione da sinistra verso destra, passate dal livello superiore, contenente l’oggetto, alla proprietà specifica:

  • L’oggetto globale utilizzato fa riferimento alla composizione corrente: thisComp.

  • Un oggetto di un livello specifico all’interno della composizione viene indicato con il proprio nome: layer("Layer B").

  • Un oggetto di un effetto specifico all’interno del livello viene indicato con il proprio nome: effect("Gaussian Blur").

  • Una proprietà di un effetto specifico all’interno dell’effetto viene indicata con il proprio nome: ("Blurriness").

Per l’ennesimo componente di una proprietà multidimensionale, come il componente y di un punto di controllo dell’effetto, aggiungete [n] alla fine, nel modo seguente:

thisCompayer(“Layer B”)ffect(“Advanced Lightning”)(“Origin”1]
thisCompayer(“Layer B”)ffect(“Advanced Lightning”)(“Origin”1]
thisCompayer(“Layer B”)ffect(“Advanced Lightning”)(“Origin”1]

L’oggetto predefinito per un’espressione è la proprietà sulla quale è scritta l’espressione, seguita dal livello che la contiene; quindi, non è necessario specificare la proprietà. Ad esempio, un’espressione deformazioni scritta sulla proprietà Posizione di un livello può essere come segue:

wiggle(5, 10)
position.wiggle(5, 10)
thisProperty.wiggle(5, 10)
wiggle(5, 10) position.wiggle(5, 10) thisProperty.wiggle(5, 10)
wiggle(5, 10) 
position.wiggle(5, 10) 
thisProperty.wiggle(5, 10)

Includete il livello e la proprietà quando le recuperate dall’esterno del livello e della proprietà su cui è scritta l’espressione. Ad esempio, un’espressione scritta sulla proprietà Opacità del Livello B collegata alla proprietà Rotazione del Livello A si presenterebbe così:

thisCompayer(“Layer A”)otation
thisCompayer(“Layer A”)otation
thisCompayer(“Layer A”)otation
Nota:

Per altri esempi di come funzionano le espressioni, utilizzate il selettore per collegare una proprietà del livello all’altra e osservate le espressioni create.

Matrici e proprietà multidimensionali

Una matrice è un tipo di oggetto che memorizza una serie ordinata di numeri. Una matrice è rappresentata da un elenco di numeri separati da virgole e racchiusi tra parentesi quadre, come in questo esempio:

[10, 23]
[10, 23]
[10, 23]

Potete assegnare un oggetto Matrice a una variabile, cosicché sarà più semplice fare riferimento ai valori della matrice in altre aree dell’espressione. Ad esempio:

myArray = [10, 23]
myArray = [10, 23]
myArray = [10, 23]

La dimensione di un oggetto Matrice è il numero di elementi che essa contiene. La dimensione di myArray è 2. Proprietà diverse in After Effects hanno dimensioni diverse in base al relativo numero di argomenti valore. Nel linguaggio delle espressioni, i valori delle proprietà sono valori singoli (oggetti Numero) o matrici (oggetti Matrice).

La seguente tabella fornisce alcuni esempi di proprietà e relative dimensioni:

Dimensione

Proprietà

1

Rotazione °

Opacità %

2

Scala [x=larghezza, y=altezza]

Posizione [x, y]

Punto di ancoraggio [x, y]

Livelli audio [sinistra, destra]

3

Scala [larghezza, altezza, profondità]

Posizione 3D [x, y, z]

Punto di ancoraggio 3D [x, y, z]

Orientamento [x, y, z]

4

Colore [rosso, verde, blu, alfa]

Potete accedere ai singoli elementi di un oggetto Matrice usando le parentesi e un numero di indice per indicare l’elemento desiderato. Gli elementi in un oggetto Matrice sono indicizzati a partire da 0. Con l’esempio precedente, myArray[0] è 10 e myArray[1] è 23.

Le seguenti due espressioni sono equivalenti:

[myArray[0], 5] [10, 5]
[myArray[0], 5] [10, 5]
[myArray[0], 5] [10, 5]

Matrici della proprietà Posizione

Le matrici della proprietà Posizione sono indicizzate come segue:

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

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

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

Representazione dei colori in matrici

I colori sono rappresentati come matrici 4D:

  • Rosso
  • Verde
  • Blu
  • Alfa

In progetti con una profondità colore di 8 bpc o 16 bpc, ciascun valore in una matrice colore va da 0 (nero) a 1 (bianco). Ad esempio, il rosso può variare da 0 (nessun colore) a 1 (rosso). Pertanto, [0,0,0,0] è nero e trasparente e [1,1,1,1] è bianco e opaco. In progetti con una profondità colore di 32 bpc, sono consentiti valori inferiori a 0 e superiori a 1.

Se utilizzate un indice maggiore dell’indice del componente con le dimensioni massime in un oggetto Matrice, After Effects restituisce un errore. Ad esempio, myArray[2] causa un errore, ma position[2] restituisce la coordinata z della Posizione.

Molte proprietà e metodi nel linguaggio delle espressioni di After Effects accettano gli oggetti Matrice come argomenti o li restituiscono come valori. Ad esempio, thisLayer.position è un oggetto Matrice che può essere bidimensionale o tridimensionale in base al tipo di livello, 2D o 3D.

Esempi

Se desiderate scrivere un’espressione che mantenga il valore y di un’animazione di Posizione, ma che fissi il valore x su 9, dovete utilizzare:

y = position[1];
[9,y]
y = position[1]; [9,y]
  y = position[1]; 
  [9,y]

Oppure ancora più breve:

[9, position[1]]
[9, position[1]]
 [9, position[1]]

Si tratta di un punto importante, consideriamo quindi un altro esempio. Per combinare il valore della posizione x del livello A con il valore della posizione y del livello B, usate la seguente espressione:

x = thisCompayer(“Layer A”)osition[0
y = thisCompayer(“Layer B”)osition[1
[x]
x = thisCompayer(“Layer A”)osition[0 y = thisCompayer(“Layer B”)osition[1 [x]
  x = thisCompayer(“Layer A”)osition[0  
  y = thisCompayer(“Layer B”)osition[1  
  [x]

Potete creare un’espressione che si riferisca a un solo valore all’interno della matrice di una proprietà 2D o 3D. Per impostazione predefinita, viene usato il primo valore, salvo diversamente specificato. Ad esempio, se trascinate il selettore dalla proprietà Rotazione del Livello A alla proprietà Scala del Livello B, viene visualizzata l’espressione seguente:

thisCompayer(“Layer B”)cale[0]
thisCompayer(“Layer B”)cale[0]
  thisCompayer(“Layer B”)cale[0]

Per impostazione predefinita, quest’espressione utilizza il primo valore della proprietà Scala, ossia la larghezza. Se invece preferite usare il valore dell’altezza, trascinate il selettore direttamente sul secondo valore anziché sul nome della proprietà o modificate l’espressione come segue:

thisCompayer(“Layer B”)cale[1]
thisCompayer(“Layer B”)cale[1]
  thisCompayer(“Layer B”)cale[1]

Al contrario, se trascinate il selettore dalla proprietà Scala del livello B alla proprietà Rotazione del livello A, After Effects crea automaticamente una variabile, a cui assegna il valore monodimensionale della proprietà Rotazione, e la utilizza per entrambe le dimensioni della proprietà Scala:

temp = thisComp.layer(1).transform.rotation;
[temp, temp]
temp = thisComp.layer(1).transform.rotation; [temp, temp]
  temp = thisComp.layer(1).transform.rotation; 
  [temp, temp]

Vettori

In After Effects, molte proprietà e metodi accettano o restituiscono vettori. After Effects definisce una matrice come vettore se rappresenta un punto o una direzione nello spazio. Ad esempio, in After Effects position restituisce un vettore.

Tuttavia, sebbene una funzione come audioLevels restituisca un valore bidimensionale (i livelli di canale destro e sinistro), non è definita vettore perché non rappresenta un punto o una direzione. Alcune funzioni in After Effects accettano argomenti vettore, ma generalmente servono solo nel caso in cui i valori passati rappresentano una direzione. Ad esempio, cross(vec1, vec2) calcola un terzo vettore ad angolo retto rispetto ai vettori di input. Il prodotto incrociato è utile quando vec1 e vec2 sono due vettori che rappresentano direzioni nello spazio, ma non lo è se essi rappresentano semplicemente due raccolte arbitrarie di numeri.

Indici ed etichette

L’indicizzazione degli elementi Livello, Effetto e Maschera in After Effects inizia da 1. Ad esempio, il primo livello nel pannello Timeline è layer(1).

In genere è preferibile usare il nome di un livello, effetto o maschera anziché un numero per evitare confusione ed errori se vengono spostati o nel caso in cui gli argomenti vengano modificati in seguito agli aggiornamenti del prodotto. Quando utilizzate un nome, inseritelo sempre tra virgolette semplici. Ad esempio, la prima di queste espressioni è maggiormente comprensibile rispetto alla seconda e la prima continua a essere valida anche se si cambia l’ordine degli effetti:

effect(“Colorama”)aram(“Get Phase From”)
effect(1)aram(2)
effect(“Colorama”)aram(“Get Phase From”) effect(1)aram(2)
  effect(“Colorama”)aram(“Get Phase From”)  
  effect(1)aram(2)

Il tempo nelle espressioni

Il tempo all’interno di un’espressione è sempre nel tempo della composizione (non nel tempo del livello) e viene misurato in secondi - (questo non è il caso con l’espressione sourceRectAtTime()). Il tempo predefinito per un’espressione è il tempo corrente di composizione durante il quale ha luogo la valutazione dell’espressione. Le seguenti espressioni utilizzano entrambe il tempo di composizione predefinito e restituiscono gli stessi valori:

thisComp.layer(1).position
thisComp.layer(1).position.valueAtTime(time)
thisComp.layer(1).position thisComp.layer(1).position.valueAtTime(time)
  thisComp.layer(1).position 
  thisComp.layer(1).position.valueAtTime(time)

Per utilizzare un tempo relativo, aggiungete un valore tempo incrementale all’argomento time. Ad esempio, per ottenere il valore Posizione 5 secondi prima del tempo corrente, usate la seguente espressione:

thisComp.layer(1).position.valueAtTime(time-5)
thisComp.layer(1).position.valueAtTime(time-5)
thisComp.layer(1).position.valueAtTime(time-5)

I riferimenti temporali predefiniti alle proprietà nelle composizioni nidificate utilizzano il tempo di composizione predefinito originale e non il tempo modificato. Tuttavia, se si usa la funzione source per recuperare una proprietà, viene utilizzato il tempo modificato.

Ad esempio, se l’origine di un livello nella composizione che lo contiene è una composizione nidificata e la composizione che lo contiene ha un tempo modificato, accedendo ai valori posizione di un livello nella composizione nidificata con la seguente espressione, i valori della posizione utilizzeranno il tempo predefinito della composizione:

comp(“nested composition”)ayer(1)osition
comp(“nested composition”)ayer(1)osition
comp(“nested composition”)ayer(1)osition

Tuttavia, accedendo al livello 1 con la funzione source i valori della posizione utilizzeranno il tempo modificato:

thisCompayer(“nested composition”)ourceayer(1)osition
thisCompayer(“nested composition”)ourceayer(1)osition
thisCompayer(“nested composition”)ourceayer(1)osition
Nota:

Utilizzando un tempo specifico in un’espressione, After Effects ignora il tempo modificato.

Poiché le espressioni agiscono sul tempo usando come unità il secondo (non il fotogramma), talvolta potrebbe essere necessario utilizzare metodi di conversione tempo per poter eseguire le operazioni sui fotogrammi con i valori temporali.

Esempio: usare il riferimento per il linguaggio delle espressioni per scrivere un’espressione

Seguite questo esempio per imparare come utilizzare il riferimento per il linguaggio delle espressioni di After Effects per scrivere espressioni. L’espressione creata in questo esempio collega la proprietà Posizione di Tinta unita 2 alla proprietà Posizione di Tinta unita 1, con il movimento di Tinta unita 2 sfalsato di 2 secondi rispetto a quello di Tinta unita 1.

  1. Create due livelli in tinta unita: Tinta unita 1 e Tinta unita 2.

  2. Animate i valori della proprietà Posizione per Tinta unita 1 mediante i fotogrammi chiave. Consultate Animazioni, fotogrammi chiave ed espressioni.

  3. Selezionate la proprietà Posizione per Tinta unita 2 e scegliete Animazione > Aggiungi espressione oppure tenete premuto Alt (Windows) o Opzione (macOS) e fate clic sul pulsante cronometro  della proprietà. Per impostazione predefinita, viene visualizzata la seguente espressione:

    transform.position
    transform.position
      transform.position
  4. Su transform.position, digitate direttamente:

    thisComp
    thisComp
      thisComp
  5. L’elemento thisComp è un attributo globale il cui valore è un oggetto Composizione che rappresenta la composizione corrente. Per determinare cosa può seguire thisComp nell’espressione, cercate il valore restituito per thisComp in Oggetti, attributi e metodi globali.

    Tenete presente che thisComp restituisce un oggetto Composizione. Quindi, consultate la sezione Attributi e metodi di composizione per vedere quali attributi e metodi potete usare con un oggetto Composizione. Un’opzione è layer(index). L’indice o il numero tra parentesi specifica il livello da utilizzare. Per questo esempio, supponiamo che Tinta unita 1 sia il primo livello della composizione. Per recuperare i valori dal primo livello della composizione attiva, digitate:layer(1) alla fine dell’espressione per ottenere quanto segue:

    thisComp.layer(1)
    thisComp.layer(1)
      thisComp.layer(1)
  6. Consultate di nuovo il riferimento degli elementi dell’espressione per verificare che layer(index) restituisca un oggetto Livello. Consultate Attributi e metodi generali del livello e cercate l’elemento che intendete usare. Se ad esempio desiderate ottenere i valori della proprietà Posizione per il livello, digitate .position alla fine dell’espressione per ottenere quanto segue:

    thisComp.layer(1).position
    thisComp.layer(1).position
      thisComp.layer(1).position
  7. Da Attributi e metodi generali del livello, potete notare che l’attributo position restituisce una proprietà. Consultate Attributi e metodi di proprietà e osservate che è possibile aggiungere un fattore tempo all’espressione. Per aggiungere un tempo specifico, ad esempio il tempo corrente più 2 secondi, digitate .valueAtTime(time+2) alla fine dell’espressione per ottenere quanto segue:

    thisComp.layer(1).position.valueAtTime(time+2)
    thisComp.layer(1).position.valueAtTime(time+2)
      thisComp.layer(1).position.valueAtTime(time+2)
  8. Nella sezione Attributi e metodi di proprietà, osservate che il metodo valueAtTime restituisce un numero o una matrice. Quando un’espressione restituisce un numero, una matrice o un valore booleano (true o false), non è possibile aggiungere altri attributi o metodi all’espressione (se lo desiderate, tuttavia, potete aggiungere operatori aritmetici come +, -, * e /).

Ulteriori risorse sulle espressioni

Una volta compresi alcuni dei concetti base delle espressioni, visita la community, dove potrai trovare alcuni esempi reali e condividere il tuo lavoro.

Il forum AE Enhancers fornisce molti esempi e molte informazioni sulle espressioni, nonché script e predefiniti di animazione.

Ottieni supporto in modo più facile e veloce

Nuovo utente?