Обучение
Expressions
Выражения After Effects для процедурной анимации: wiggle, bounce, shake, loop и готовые коды для текста.
Expressions экономят часы: один раз написал — анимация живёт сама. Ниже — базовая теория и готовые коды, которые используются в AMV и motion ежедневно.
Зачем нужны expressions
- Автоматизация: wiggle, bounce, shake без сотен кейфреймов
- Связка свойств: rotation следует за position
- Инфографика и procedural motion
- Шаблоны — сохранил код, переиспользуешь в проектах
После добавления expression к свойству можно продолжать ставить кейфреймы. Например, value+90 к Rotation добавляет 90° поверх анимации.
Базовые
// Wiggle — дрожание
wiggle(2, 40);
// Loop — зацикливание
loopOut("cycle");
loopOut("pingpong");
// Linear time — движение по времени
time * 200;
// Inertial bounce (после ключевого кадра)
n = 0;
if (numKeys > 0) {
n = nearestKey(time).index;
if (key(n).time > time) n--;
}
if (n > 0) {
t = time - key(n).time;
v = velocityAtTime(key(n).time - 0.001);
amp = 0.05; freq = 4; decay = 8;
value + v * amp * Math.sin(freq*t*2*Math.PI) / Math.exp(decay*t);
} else value;Shake после ключевого кадра
n = 0;
if (numKeys > 0) {
n = nearestKey(time).index;
if (key(n).time > time) n--;
}
t = (n == 0) ? 0 : time - key(n).time;
if (n > 0) {
v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
amp = 0.1; freq = 3.1; decay = 7;
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
} else value;Text bounce
delay = 0.05;
myDelay = delay * textIndex;
t = (time - inPoint) - myDelay;
if (t >= 0) {
freq = 2; amplitude = 80; decay = 8;
s = amplitude*Math.cos(freq*t*2*Math.PI)/Math.exp(decay*t);
[s, s];
} else valueFade in / out
fadeDuration = 0.5; fadeIn = linear(time, inPoint, inPoint + fadeDuration, 0, 100); fadeOut = linear(time, outPoint - 0.5, outPoint, 0, 100); fadeIn - fadeOut
В MNTOOLS → Motion Tools → Expression Library — готовые выражения в один клик без копирования кода.
/wiki/expressions