Siamo in ambiente 3D (motore di rendering Classic 3D).

E abbiamo necessità di controllare una o più luci. Per “controllare” intendiamo la possibilità di gestirne il dimmeraggio (intensità luminosa) ed eventualmente la frequenza di intermittenza.

Come esempio pratico prendiamo un’immagine che rappresenta un faro e inseriamo una luce punto (point light) centrata sul faro stesso. 

Innanzitutto impostiamo l’immagine  come livello 3D e posizioniamo la luce correttamente sulla sommità del faro (modificando i suoi parametri di posizione).

 

point light

Creiamo ora un oggetto nullo (controller) che ci servirà per gestire l’intensità e la frequenza di intermittenza della luce del faro.

All’interno del controller inseriamo due effetti “controllo cursore” che rinomineremo “frequenza” e “intensità.

 

point light

Accendiamo l’animazione sul parametro Intensità all’interno delle Opzioni nel livello Luce.

Per attivare l’animazione è sufficiente selezionare il livello, aprire il menu Animazione (nella barra dei menu in alto) e cliccare su Aggiungi espressione.

point light

Tramite espressione cercheremo di controllare il valore massimo dell’intensità e la velocità di animazione della stessa (frequenza). Il tutto legandola ai valori presenti nei cursori dell’oggetto nullo.

Cominciamo a scrivere l’espressione.

Innanzitutto fissiamo due variabili i e a che rappresentano rispettivamente i valori del cursore intensità e del cursore frequenza (in secondi).

i=thisComp.layer(“Controller”).effect(“Intensità”)(“Slider”);

a=thisComp.layer(“Controller”).effect(“Frequenza”)(“Slider”);

Siccome vogliamo realizzare un’animazione che prevede l’accensione graduale del faro e successivamente lo spegnimento graduale dello stesso, fissiamo altre due variabili.

La prima variabile t1 rappresenta la fase di accensione mentre la seconda t2 la fase di spegnimento.

Per fare questo facciamo uso della funzione:

ease (time,a,b,c,d)

Questa funzione genera un’animazione (con ingresso e uscita graduale) dal tempo a al tempo b e con valori che vanno da c a d.

Quindi nel nostro caso avremo:

t1=ease(time,0,a,100,i);

t1 rappresenta l’animazione da 0 al valore impostato sul cursore frequenza e con intensità che parte da 100 (quindi con un minimo di luniosità) al valore di intensità fissato sull’omonimo cursore.

Pertanto se la frequenza è pari a 1, il faro impiegherà 1 secondo ad accendersi al valore di intensità fissato.

Stessa cosa faremo per lo spegnimento:

t2=ease(time,a,2*a,i,100);

In questo caso l’animazione partirà al termine dell’accensione (e quindi al valore della frequenza) e terminerà dopo un tempo sempre pari al valore della frequenza (quindi 2 volte a). L’intensità quindi decrescerà dal valore del cursore intensità al valore 100.

Manca solo un ultimo passaggio. Dobbiamo dire all’espressione di abilitare l’animazione t1 solo se il tempo corrente (time) è inferiore ad a (quindi quando siamo in fase di accensione del faro) e di abilitare t2 in caso contrario (in fase di spegnimento del faro).

if (time<a) {
t=t1
}
else
{
t=t2
}
t

 

point light

Facciamo una prova: impostiamo ad esempio il cursore frequenza a 1 secondo e il cursore intensità al valore 400.

E osserviamo il risultato.

 

point light

Tutto ok. Ma abbiamo un altro problema da risolvere. Manca il loop sull’intermittenza. In pratica l’animazione si esaurisce in un solo ciclo mentre dovrebbe continuare per tutta la durata della composizione.

Come possiamo procedere?

Facciamo subito una premessa: non possiamo utilizzare le classiche funzioni di loopOut in quando queste lavorano su parametri che hanno un’animazione basata su keyframes. Mentre nel nostro caso l’animazione è data unicamente dall’espressione (senza alcun keyframe applicato).

Dobbiamo per forza seguire un’altra strada.

E una possibile è quella di modificare leggermente l’espressione in modo da rendere dinamica la definizione delle variabili t1 e t2 e non per forza legata solo al tempo 0.

Definiamo a tal proposito una nuova variabile che chiameremo p:

p=time%(2*a)

p rappresenta l’offset rispetto al valore 2*a (pari al tempo impiegato a compiere un ciclo di accensione e spegnimento della luce).

In pratica assumerà valori in loop compresi tra 0 e 2*a. Esattamente quello che volevamo ottenere. Non ci resta altro che sostituire la variabile time (valore di tempo corrente) con p all’interno della definizione delle variabili t1 e t2. Stessa cosa faremo con la condizione contenuta nell’if.

L’espressione finale sarà pertanto la seguente:

i=thisComp.layer(“Controller”).effect(“Intensità”)(“Slider”);
a=thisComp.layer(“Controller”).effect(“Frequenza”)(“Slider”);
p=time%(2*a);
t1=ease(p,0,a,100,i);
t2=ease(p,a,2*a,i,100);
if (p<a) {
t=t1
}
else
{
t=t2
}
t

Ed ecco il loop.

 

Per modificare frequenza e intensità sarà sufficiente agire sui valori dei cursori del controller.

Potremmo ad esempio creare velocemente un’animazione che prevede un incremento graduale sia della frequenza che dell’intensità. Otterremo l’effetto in maniera molto semplice inserendo due keyframes nei cursori frequenza e intensità del controller stesso.

 

point light
point light
%d blogger hanno fatto clic su Mi Piace per questo: