Выражение — это фрагмент кода JavaScript, как правило, не очень большой, но могут быть и исключения. Его можно подключить к анимированным свойствам модификаторов в проектах AE. Не смотря на то, что язык выражений основан на стандартном языке программирования JavaScript, для начала работы с выражениями его доскональное знание вам не потребуется.
Для того, чтобы начать работу с выражениями, нужно просто выбрать модификатор и кликнуть с зажатым Alt/Option по часикам слева от него.
Код самого выражения нужно вводить вот сюда:
Индикатором того, что выражение активировано и работает, служит красный цвет на работающем модификаторе, а так же значок «=», включив/выключив который можно также включить/выключить выражение соответственно.
Ниже мы приведем примеры, чтобы вы могли разобраться насколько это мощный инструмент:
1. Wiggle - одно из самых распространенных выражений After Effects. Данное выражение позволяет создавать хаотичное изменение выбранного модификатора слоя.
Для того чтобы его применить, нужно выбрать модификатор (например position), перейти в режим для редактирования выражений и написать wiggle(2,40), где первое значение — это количество колебаний в секунду, а второе — величина покачивания.
Слой будет «плавать» 2 раза в секунду, не больше чем на 40 пикселей в любом направлении.
Пример использования выражения:
2. Затухание колебаний при движении - это выражение создано для того, чтобы сделать анимацию еще «живее», благодаря добавлению в движение элемента противохода. Опять же, оно применимо не только к модификатору position
amp = .02;
freq = 2.0;
decay = 6.0;
n = 0;
time_max = 4;
if (numKeys > 0){
n = nearestKey(time).index;
if (key(n).time > time){
n-;
}}
if (n == 0){ t = 0;
}else{
t = time - key(n).time;
}
if (n > 0 && t < time_max){
v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{value}
amp - амплитуда отскока, freq - частота, decay - затухание
Пример использования выражения:
3. Реалистичный отскок объекта. Это выражение стоит применять к модификатору position. Его основная роль – это создание более правдоподобного отскока от поверхности, с которой соприкоснулся объект после падения. Выглядит код вот так:
e = .7;
g = 5000;
nMax = 9;
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 - .001)*e;
vl = length(v);
if (value instanceof Array){
vu = (vl > 0) ? normalize(v) : [0,0,0];
}else{
vu = (v < 0) ? -1 : 1;
}
tCur = 0;
segDur = 2*vl/g;
tNext = segDur;
nb = 1; // number of bounces
while (tNext < t && nb <= nMax){
vl *= e;
segDur *= e;
tCur = tNext
tNext += segDur;
nb++
}
if(nb <= nMax){
delta = t - tCur;
value + vu*delta*(vl - g*delta/2);
}else{
value
}
}else
Value
Ключевыми строками являются:
e = эластичность или «пружинистость». Чем выше данный параметр, тем сильнее будет отскок
g = отвечает за гравитацию. Чем этот параметр ниже, тем медленнее идет сам отскок (здесь все так же, как с реальной гравитацией - чем она выше, тем сильнее притягивается объект к поверхности)
nMax = количество отскоков
Пример использования выражения:
4. Выражение Time в After Effects
time*10
Выражение Time идеально подходит для объектов с бесконечным движением. Например, если вы хотите, чтобы объект вращался бесконечно, вы можете просто добавить слово time в качестве параметра вращения, и ваш объект будет вращаться на 1 градус на длине всей композиции. Параметр времени также работает с основными математическими уравнениями. Поэтому если вы хотите, чтобы слой вращался в 30 раз быстрее, вы можете просто написать выражение time*30. Установка величины задержки в кадрах var delay = 5; // Смещение положения слоя во времени на основе задержки parent.fromComp( toComp( anchorPoint, time - framesToTime( delay ) ) );
5. Плашка, масштабируемая за текстом
Крайне полезное выражение, когда вам необходимо сделать большое количество титров на плашках, и нет никакого желания каждый раз рисовать их (плашки) руками.
Для начала создайте шейп и слоем над ним напишите текст, далее на параметр size у шейпа добавьте это выражение:
margin_width = 20;
margin_height = 20;
text_width = thisComp.layer(index-1).sourceRectAtTime().width;
text_height = thisComp.layer(index-1).sourceRectAtTime().height;
box_width = text_width + margin_width*2;
box_height = text_height + margin_height*2;
[box_width, box_height]
Если текст в несколько строк, то к position у шейпа добавьте это выражение. Без него тоже всё будет работать, но придётся вручную подгонять позицию плашки за текстом.
x = value[0]; y = content("Rectangle 1").content("Rectangle Path 1").size[1]/2; [x,y]
6. Постоянный масштаб у связанных объектов
Наверняка вы замечали, что если связать parental whip слои между собой, то при изменении масштаба у родительского слоя, масштабы всех слоев будут одинаково увеличиваться.
Что если вы не хотите давать привязанным слоям такую возможность? Применяйте это выражение к scale слоя/слоев, у которого должен быть постоянный масштаб (к слоям, которые вы связали parental whip)
s = [];
ps = parent.transform.scale.value;
for (i = 0; i < ps.length; i++){
s[i] = value[i]*100/ps[i];
}
s
Пример использования выражения:
На этом все, теперь в вашем багаже знаний на один полезный навык больше! :)
Подписывайтесь на наш основной канал в Телеграм или группу ВКонтакте и следите за нашими обновлениями!
Там вы можете:
- забрать бесплатные проекты для After Effects
- скачать наши статьи в формате PDF
- получить порцию вдохновения
- развиваться в сообществе сильных motion-дизайнеров
#motiondesign #birchplus #онлайн обучение #aftereffects #профессия дизайнер #моушндизайн #бесплатное обучение