Tipps #1 :: Globale Variablen in After Effects?!

Jo.. neue Sektion auf dieser sooo ständig aktuellen Seite ^^

Kaum spiele ich ein paar Tage mit After Effects und denke ich verstehe es kommt schon der Drang bei mir durch es anderen zu erklären. Und euch, also dem einen Leser der Konsequenterweise meinen Blog aktiv verfolgt, auch noch Tipps zu geben und kleine Tricks zu zeigen.

Naja, fast.. im endhinein bin ich grad mit ersten Render-Tests durch und merke erste Ermüdungsanzeichen und nachdem ich heute schon mal ein Paar Vids, ja, genau 2, also ein Paar und nicht ein paar, hochgeladen habe verspüre ich nun das dringende Bedürfnis hie rmal wieder etwas zu schreiben. Und immer wieder mal ein paar Tipps für alles mögliche schaden ja nich..

Und für die volle Wahrheit: Hier finde ich Sachen schneller als wenn ich irgendwo danach googlen müsste und grad meine Links nicht zur Hand hab. Lange Rede kurzer Sinn:

Heute fürÆ sprich AE sprich After Effekts (Ich liebe Ligaturen)

Globale Variablen in After Effects?!

Wer anfängt mit Expressions zu arbeiten wird vllt. früher oder später auf das gleiche Problem wie ich stoßen: Man bräuchte eine globale Variable, bzw eine möglichkeit Werte zu speichern und sie dann wieder aufzurufen, am besten aus der jeweiligen Expression selbst, z.B.:

position[0] = position[0] +1;

Es sollte nun die Position jeden Frame um eins nach X verschieben, funktioniert aber nicht. After Effects sieht sich jedes Mal den originalen Wert für Position an und zählt 1 dazu.

Nun kann man zwar Werte auslagern in zB einen Slider, sobald man aber diesen Wert abrufen will und ihn mit eben jener Expression beschreibt bekommt man nur seinen eigenen Wert ohne! die Expression, also als ob es keine Expression gäbe. Und man kann auch eben nur Werte zwischen verschiedenen Expressions austauschen, es gibt also keine Globalen Variablen.

Toller Tipp bisher, oder?

Haha! Es gibt eine Möglichkeit, die zwar das Rendern ganz schön verlangsamen kann, aber immerhin. Wir müssen eine Expression schreiben die bei Frame 0 beginnend Frame-für-Frame nachrechnet um den jetztigen SOLL-Wert zu errechnen. Und was baucht man für so etwas: ein Schleife natürlich.

j = 0;
temp = transform.position[0];

while (j < time){
  temp +=1;
  j += thisComp.frameDuration;
}

[temp,value[1]]

Die while-Schleife geht nun also die Anzahl an Frames solange durch bis sie beim aktuellen Frame ankommt und zählt so für jeden Frame +1 dazu. Man hätte für dieses leicte Beispiel zwar auch einfach die Framezahl ermitteln können, jedoch: man stelle sich die Möglichkeiten vor die sich mit so einer Konstruktion ergeben.

Beispielsweise die Bass gesteuerte Drehung des 6-Band-Equalizers in meinem Video erfolgt durch diese Exp:

cntrl_rot = thisComp.layer("Controller").effect("Rotation_cntrl")("Slider")
cntrl_wigl = thisComp.layer("Controller").effect("Wiggle_cntrl")("Slider")

j = 0;
accum = 0;

while (j < time) {

    accum +=cntrl_rot.valueAtTime(j) + cntrl_wigl.valueAtTime(j);

     j += thisComp.frameDuration;
}

rotation + accum

Durch den cntrl_wigl bekommt die Drehung ein bissche mehr “randomness” und sieht nicht ganz so “smoothed” aus ^^

Und um unter 500 Wörtern zu bleiben nun auch schon das Ende des heutigen Tipps, ich hoffe es hilft weiter. Dieser Tipp ist übrigens total und 100% “original” von mir und nur sehr zufällig eine 1-zu-0,89 Kopie von dieser genialtollen Seite: http://motionscript.com/

Nennen wir es Übersetzung mit Quellenangabe..