Выражения в After Effects: минимальный набор, который закрывает 80 % задач
Выражение — это инструкция свойству, а не скрипт для программы. Она говорит конкретному параметру, как считать своё значение.
Документация формулирует разницу так: скрипт приказывает приложению что-то сделать, выражение говорит свойству что-то сделать.
Как добавить
В панели Timeline зажмите Alt (Windows) или Option (macOS) и кликните по секундомеру рядом с нужным свойством.
Появится поле выражения. After Effects подставит значение по умолчанию — его можно заменить.
Убрать выражение: тот же Alt/Option + клик по секундомеру.
Pick whip
Спиральная иконка рядом с полем выражения — это pick whip.
Принцип: тянете её к другому свойству, отпускаете, и After Effects сам пишет синтаксис.
Пример из документации: если протянуть от Rotation слоя A к Scale слоя B, получится
thisComp.layer("Layer B").scale[0]
Индекс [0] означает первое значение массива — для масштаба это ширина.
wiggle
Самое частое выражение. Формат:
wiggle(freq, amp)
freq— число колебаний в секунду;amp— амплитуда в единицах свойства.
Пример из документации: wiggle(2,30) на Position даёт два колебания в секунду с отклонением до 30 пикселей.
Полная сигнатура включает ещё три параметра: octaves (по умолчанию 1), amp_mult (0.5) и t (текущее время). Они управляют детализацией и точкой отсчёта.
Важно: wiggle не затирает существующее значение, а колеблется вокруг него.
time
Выражение time возвращает текущее время композиции в секундах.
На свойстве Rotation выражение time даёт поворот на 1 градус в секунду. Умножение ускоряет: time*40 — 40 градусов в секунду.
Это удобно для бесконечного вращения без ключевых кадров.
value
value — значение свойства до применения выражения.
Классический пример из документации — запуск wiggle через две секунды:
var timeToStart = 2;
if (time > timeToStart) { wiggle(3,25); } else { value; }
Логика: пока время меньше двух секунд, свойство показывает своё обычное значение; после — начинает дрожать.
Обращение к другому слою
Синтаксис:
thisComp.layer("Layer A").rotation
Для свойства внутри массива указывается индекс: thisComp.layer("Layer A").position[0] — только X.
Документация подчёркивает: время внутри выражения всегда время композиции, а не слоя, и измеряется в секундах. Исключение — sourceRectAtTime().
Практика: дрожание камеры
- Создайте нулл
CTRL_camera. - Добавьте на него Slider Control и назовите
amp. - На Position нулла напишите
wiggle(1, effect("amp")("Slider")). - Привяжите к нуллу камеру или слои.
Теперь амплитуда регулируется одним ползунком.
Практика: пульсация масштаба
scale + Math.sin(time*3)*5 даёт мягкую пульсацию ±5 %.
Такой приём часто используют для «дыхания» логотипа или иконки.
Практика: задержка между слоями
Если нужно, чтобы второй слой повторял движение первого с задержкой, используется valueAtTime(time-0.2).
Документация приводит этот приём: значение свойства в другой момент времени.
Где искать готовые выражения
В меню выражения (иконка справа от поля) есть категории: Property, Keyframe, Random, Interpolation, Color и другие. Оттуда вставляются готовые методы без знания синтаксиса.
Плюс официальная страница примеров: там разобраны wiggle на определённом отрезке времени, зацикливание и другие типовые задачи.
Чего выражение не делает
Оно не «оптимизирует» анимацию само по себе: каждый кадр оно вычисляется заново.
Оно не заменяет ключевые кадры там, где нужен художественный контроль.
Оно не переносится между версиями без проверки: методы и поведение могут меняться.
Ошибки новичков
Самая частая — точка с запятой и кавычки. Второе — русские кавычки при копировании из чата.
Третья — выражение ссылается на слой по имени, а слой переименовали. Выражение ломается молча.
Производительность
Выражения пересчитываются на каждом кадре. Одно-два — незаметно; сотня — ощутимо.
На ноутбуке с 16 ГБ ОЗУ тяжёлая сцена с выражениями на каждом слое может перестать проигрываться в реальном времени. Помогает предварительный рендер в память.
Как отладить выражение
Ошибка в выражении показывается жёлтым треугольником рядом с полем, а текст ошибки — при наведении.
Три шага диагностики:
- Прочитайте сообщение: чаще всего это опечатка или лишняя скобка.
- Проверьте имена слоёв — они чувствительны к регистру и пробелам.
- Упростите выражение до одного метода и добавляйте части по одной.
Практика: держите под рукой value — если вернуть его, свойство снова ведёт себя обычно, и понятно, что дело в коде, а не в слое.
loopOut и Math
Два метода, которые закрывают много задач.
loopOut("cycle") повторяет анимацию ключевых кадров по кругу. Есть варианты pingpong, offset и continue.
Math.sin и Math.cos дают плавные колебания без случайности — полезно для «дыхания» и маятников.
Пример: Math.sin(time*2)*10 на Position даёт мягкое вертикальное покачивание с амплитудой 10 пикселей.
Оба метода описаны в справочнике языка выражений — там же указаны параметры и типы возвращаемых значений.
И ещё одна привычка, которая экономит время: подписывайте слои, к которым обращаются выражения. Через месяц thisComp.layer("Layer 42") не скажет вам ничего.
Плюс полезно проверять результат на двух-трёх кадрах вразброс: ошибка в выражении часто проявляется не в начале, а там, где свойство уходит в край диапазона.
Если выражение перестало работать после обновления проекта, первым делом откройте его текст и проверьте, не изменились ли имена слоёв и не появились ли новые пресеты.
Частые ошибки
Забыть Alt/Option. Секундомер просто включает анимацию.
Путать time и время слоя. В выражении это время композиции.
Ссылаться на переименованный слой. Ошибка в консоли.
Ставить wiggle на Opacity без ограничения. Значение уходит за 0–100.
Копировать выражения с русской раскладкой кавычек. Синтаксическая ошибка.
FAQ
Как добавить выражение?
Alt/Option + клик по секундомеру свойства.
Что делает wiggle(2,30)?
Два колебания в секунду с амплитудой 30 пикселей.
Что такое value?
Значение свойства до выражения.
Как обратиться к другому слою?
thisComp.layer("Имя").property.
В каком времени считается time?
В времени композиции, в секундах.