After effects выражения index

Обновлено: 06.07.2024

Собрал список выражений для АЕ, которые упрощают мне работу. Совсем простых в стиле loopOut() или wiggle (.4,6) здесь не будет, но и ничего экстрасложного тоже.

Своих экспрешнов здесь всего парочка. Большинство я брал откуда-то и переписывал по чуть-чуть под себя, так что, у чужих экспрешнов поставлю ссылку на авторов.

Плашка за текстом

Создать шейповый квадратик, а сверху отдельным слоём добавить текст;
Применить к параметру size у шейпа:

Если текст в несколько строк, то к position у шейпа добавьте этот экспрешн. Без него тоже всё будет работать, но придётся вручную подгонять позицию плашки за текстом.


К остальным экспрешнам

Анимируемый wiggle

Простой способ заанимировать wiggle. Используем для этого два слайдера: первый отвечает за частоту, второй за амплитуду. Анимировать лучше только амплитуду.

Добавить эффект Slider Control на слой с экспрешном и продублировать его. Применить к любому параметру:

Цикличный wiggle

Благодаря этому экспрешну, wiggle начинается и заканчивается в одной и той же точке.

Если вдруг цикл не работает, то это скорей всего из-за того, что луп не успевает прийти в изначальное состояние за отведённое время. Просто сделайте loopTime побольше или freq почаще

Прикрепить шейп к одной стороне

Применить к position, изменять size у шейпа:

Риг для катящегося круга и квадрата

Катящийся круг

Применить к rotation, анимировать position:

Катящийся квадрат

Работает как с шейпами, так и со слоями и композициями. Если квадрат катится неправильно — изменить значение Slider Control.

Добавить на слой с экспрешном эффект Slider Control;
Применить к position, анимировать rotation:

На основе экспрешна от Mikey Borup

Ежесекундные ступенчатые повороты

Замена time*n. Только вместо плавного поворота — ступенчатый. Чаще всего пригождается, чтобы сделать анимацию секундной стрелки, шестерёнок или других похожих механизмов.

Применить к rotation:

Управляемые ступенчатые повороты

Практически то же самое, что и выше. Но с чуть большим количеством настроек.

Применить к rotation:

Постоянный масштаб при скейле

Если привязать один объект к другому и начать скейлить родительский, то оба слоя будут увеличиваться. Этот экспрешн не даёт дочернему слою изменять масштаб, он просто будет двигаться по позишну.

Применить к scale слоя, у которого должен быть постоянный масштаб:

Переключатель по чекбоксу

Меняет одно значение параметра на другое по нажатию на чекбокс.

Добавить эффект Checkbox Control на слой с экспрешном;
Применить к любому параметру:

Луп для шейпов

Обычный loopOut() не работает с шейпами, но зато работает этот экспрешн.

Применить к path у шейпа:

Range Mapper

Добавить эффект Slider Control на слой с экспрешном;
Применить к любому параметру:

Обводка независимая от скейла

Сохраняет постоянную обводку у шейпов при изменении масштаба.

Применить к «Stroke Width» у шейпа:

Счётчики

Почему-то часто использую счётчики в анимациях, поэтому здесь будет подборка сразу из шести. Сначала три самых простых.

1) Обычный счётчик

toFixed(1) — количество цифр после запятой;
Добавить эффект Slider Control на слой с экспрешном;
Применить к «Source Text» у текста:

2) Счётчик с запятыми вместо точек

Полезно в анимациях для неанглоязычных стран, где используется запятая в качестве десятичного разделителя вместо точки. Если нужен похожий сетап с большим количеством настроек, то он вот здесь.

3) Счётчик с дополнительными знаками

4) Счётчик с заменой 1 на 001


При zerosAmount = 3 счёт будет идти вот так: 000, 001 … 011 … 111.

5) Счётчик с разрядами

Заменяет 500000 на 500 000.

6) Счётчик для больших чисел

Счётчик, привязанный к Slider Control, не идёт дальше 1 000 000. Поэтому если нужны большие числа — приходится использовать эффект Angle Control.

Добавить эффект Angle Control на слой с экспрешном;
Применить к «Source Text» у текста:

Пара мелочей

И, под конец, 4 полезных мини-выражения, которые часто пригождаются.

1) Привязка к слою выше или ниже

Это не полноценный экспрешн, а только его часть. Вместо того, чтобы привязывать один слой к другому напрямую, иногда удобнее привязывать к слою, который стоит выше или ниже, слоя с экспрешном.


index+1 — если нужна привязка к слою ниже

2) Постоянно ускоряющиеся повороты

Попробуйте добавить к rotation:

3) Ключи для time*n

Добавляет постоянное движение, но оставляет возможность ставить ключи.

4) Привязка эффекта к слою

Чтобы Gradient Ramp не слетал при перемещении слоя, добавьте этот экспрешн на Start и End:

Похоже, это все выражения, которыми я пользуюсь на постоянной основе. Всего получилось 23.
На всякий случай, собрал их в проект и прикрепил к статье.

Изменение стилей текста и свойств текста с помощью элементов управления выражениями.

Используйте выражения для управления стилем текста в любом текстовом выражении или в шаблонах анимационного дизайна. Некоторые вещи, которые вы можете сделать с выражениями:

  • Связывайте несколько заголовков и обновляйте их стили одновременно (очень полезно для разработки заголовков).
  • Синхронизируйте шрифт, размер и стили в нескольких текстовых слоях.
  • Внесите глобальные изменения в свойства текста.

После их установки для текстового слоя можно ссылаться на свойства этого слоя, чтобы быстро применять изменения ко всей композиции.

After Effects использует функции "get" и "set" для чтения и записи значений свойств текста в механизм выражения. Выражения используются для управления и установки стилей шрифтов, таких как свойства текста в текстовых слоях.

Чтобы получить доступ к этим функциям для свойств текста:

  1. Добавление выражения в свойство Source Text текстового слоя. Дополнительные сведения см. в разделе Основы выражения.
  2. Во всплывающем меню Язык выражений выберите Свойства > текст > Свойства .

Выберите свойство исходного текста, в который добавлены выражения. Затем выберите Анимация > Сохранить шаблон настроек анимации , чтобы можно было использовать выражения в других проектах. Шаблоны настроек анимации сохраняются на панели Эффекты и шаблоны .

Дополнительные сведения см. в разделе Обзор эффектов и стилей анимации.

При обращении к шрифтам в выражениях они должны использовать специальное «системное имя» (или аналогичное). Рекомендуется вставить это специальное имя из диалогового окна «Текст > шрифт» > «Выбор шрифта» , чтобы избежать ошибок выражения.

  • Откройте всплывающее меню Язык выражений и выберите Текст > Шрифт . Откроется диалоговое окно с раскрываемыми меню для выбора шрифта и шрифта для вставки в выражение.

Шрифты, на которые ссылаются только в Редакторе выражений, не записываются как шрифты, используемые проектом. Чтобы убедиться, что все шрифты, упомянутые в Редакторе выражений, будут автоматически синхронизироваться или заполнять диалоговое окно «Разрешение шрифтов», используйте все эти шрифты в слое, даже если этот источник слоя скрыт.

Используемые шрифты

Все свойства стиля для текстового слоя существуют в объекте стиля, доступ к которому осуществляется в свойстве Source Text с помощью следующих действий:

Использование стиля само по себе аналогично использованию любого из двух приведенных выше примеров, но это может сбивать с толку, если атрибуты стиля из нескольких текстовых слоев объединяются.

Атрибуты стиля других текстовых слоев также можно прочитать. Используйте хлыст выбора, чтобы создать ссылку на другой текстовый слой в начале первого примера, показанного выше.

Следующие атрибуты стиля текста можно прочитать и задать с помощью объекта style:

  • Шрифт
  • Размер шрифта
  • Псевдополужирный
  • Искусственный курсив
  • Все прописные
  • Малые прописные
  • Трекинг
  • Интерлиньяж
  • Автоинтерлиньяж
  • Отклонение от базовой линии
  • Заполнить (включить/выключить)
  • Цвет заливки
  • Обводка (включить/выключить)
  • Цвет обводки
  • Ширина обводки

Свойство «Исходный текст» текстового слоя преобразуется выражениями в виде строки JavaScript. Сам текст можно прочитать с помощью sourceText, но он должен быть задан для объекта style с помощью метода setText, если атрибуты style изменяются. Смотрите примеры ниже.

Чтобы вернуть значения стиля и фактического исходного текста во времени, необходимо объединить функции getStyleAt и setText. Ниже приведены два примера того, как записать это выражение.

Связывание шрифтов или стилей с раскрывающимся меню

Раскрывающиеся меню можно использовать для управления стилями текста, например для блокировки текстовых слоев определенными шрифтами. Это полезно для рекомендаций по брендам, шаблонов, MoGRTS и многого другого:

Получение свойств текста из "Text Layer 1", но переопределение размера шрифта и цвета заливки

Свяжите несколько текстовых слоев с основным контроллером шрифтов, чтобы управлять стилем текста нескольких слоев одновременно. Создайте два текстовых слоя и вставьте это выражение в исходный текст одного из них:

Можно получить стиль из текстового слоя, но переопределить определенные свойства текста, добавив значения с помощью функций Set. Ниже приведены два примера использования цвета заливки и размера шрифта.

Ниже приведены примеры получения и использования значений свойств текста в выражениях.

Шрифт

Ниже приведены примеры доступа к шрифту текстового слоя, размеру шрифта, искусственному полужирному шрифту, искусственному курсиву, отслеживанию и ведущему:

Заливка

Ниже приведены примеры получения параметров «Заливка» и «Цвет заливки» текстового слоя.

Для возврата значений цвета заливки для R, G или B текстового слоя, добавьте в скобки 0, 1 или 2 соответственно.

Обводка

Ниже приведены примеры получения значений обводки, цвета обводки и ширины обводки текстового слоя.

Для возврата значений цвета обводки для R, G или B текстового слоя, добавьте в скобки 0, 1 или 2 соответственно.

Используйте функцию «get» для возврата значений стиля определенного символа в необходимое время. В качестве «index» нужно указывать число, являющееся индексом буквы или символа, значение стиля которого необходимо получить. «atTime» также должно быть числом, указывающим время в композиции, из которого можно получить стиль в случае, если стиль является ключевым кадром и меняется с течением времени.

Использование text.sourceText.style аналогично использованию text.sourceText.getStyleAt(0,0).

Дополнительные функции «set», которые могут использоваться по отдельности или в сочетании друг с другом для управления стилями в слоях. Каждая из этих функций вызывается для объекта стиля свойства исходного текста:

Все функции «Set» для текстовых стилей могут использоваться вместе, позволяя с легкостью задать несколько параметров без необходимости каждый раз определять новый стиль, как показано в следующем примере:

Точка с запятой ставится только после самого последнего атрибута. Написание каждого атрибута в отдельной строке помогает облегчить чтение всей цепочки.

Для указания начала новой строки текста в строковом выражении можно использовать комбинацию символов «\r». Например, чтобы скопировать исходный текст из одного слоя в тот же самый слой и повторить эту операцию для всех прописных символов в новой строке, используйте следующее выражение:

Добавление текстового слоя к композиции и добавление выражения к свойству «Исходный текст» помогает изучить значения свойств других слоев. Например, следующее выражение в свойстве «Исходный текст» сообщает имя и значение свойства «Непрозрачность» следующему слою в порядке размещения слоев:

В следующем примере сообщается имя элемента видеоряда, используемое в качестве источника самого верхнего слоя изображения в порядке размещения слоев в текущий момент времени с установленным переключателем «Видео».

Итак, вы изучили основные принципы выражений. На сайте сообщества вы найдете наглядные примеры и сможете показать свои работы.

Дополнительные сведения об использовании выражений для текстовых стилей и раскрывающихся списков см. эту запись в блоге Adobe: After Effects 2020: Express Yourself (and Your Text).

Кроме того, на веб-сайте MotionScript вы можете посмотреть руководства и интересную коллекцию Дэна Эббертса (Dan Ebberts) с примерами выражений.

На форуме AE Enhancers также можно найти множество примеров и сведения о выражениях, сценариях и шаблонах настроек анимации.

Эта статья, является большей частью вольным переводом новой статьи Дэна Эббертса, вперемешку с моими собственными идеями. К статье я приложил файл с примерами (примеры сделаны не ко всем пунктам статьи, а только к тем, которые, по-моему, мнению могут вызвать затруднения).

В шестой версии Adobe After Effects, аппарат выражений получил несколько полезных дополнений, в том числе касающихся самого языка выражений.

Но обо всем по порядку.

Новый синтаксис

На мой взгляд, синтаксис стал гораздо более удобным и логичным.

Все объекты, методы и свойства, состоящие из нескольких слов теперь не нужно разделять при помощи разделителя "_" (например, audio_levels). Теперь это все представлено в "interCaps" формате. Например, audio_levels, теперь выглядит так - audioLevels.

Вместо кавычек типа " теперь можно использовать и одинарные.

Старый синтаксис по заявлению разработчиков тоже будет работать, но предпочтительнее использовать новый.

Улучшеннный wiggle()

Теперь можно настроить колебания wiggle() при помощи seedRandom(). Дело в том, что seedRandom() меняет значения, получаемые с помощью wiggle(), даже при одинаковых настройках последнего. Изменяя seedRandom(), при неизменном wiggle(), мы каждый раз будем получать совершенно различные значения. Посмотрите на следующие выражения:

seedRandom(13);

wiggle(3,35)

wiggle(3,35)

Хотя, в обоих случаях wiggle() постоянный, но значения выражения будут совершенно разными, благодаря seedRandom().

Однако, учтите, что wiggle() игнорирует параметр timeless seedRandom(seed, timeless=false). Он равен false по умолчанию.

Если вы хотите удерживать постоянное значение wiggle() на определенное количество кадров, то вы можете воспользоваться новой полезной функцией posterizeTime().

posterizeTime()

Аппарат выражений в AE 6.0 получил новую функцию posterizeTime(). С ее помощью вы можете управлять скоростью анимации. Например, значение wiggle() будет меняться пять раз в секунду в следующем выражении:

posterizeTime(5);

wiggle(5,35)

Конвертирование аудио в ключевые кадры

Это довольно интересный новый ассистент ключевых кадров («Convert Audio to Keyframes»). Он создает нулевой объект, называемый по умолчанию Audio Amplitude. Этот слой содержит три анимированных эффекта slider. Первый из них отображает в ключевых кадрах изменения громкости в левом канале, второй в правом, а третий в обоих каналах сразу. Вы можете теперь извлечь значения из этих эффектов с помощью выражений и применить к какому-то свойству. То есть сделать то, что раньше делалось в motion math с помощью скрипта layeraud. И соответственно изменению уровней громкости будут меняться свойства, которые извлекают значения из sliderов.

В примере, изображенном на иллюстрации, мы используем Convert Audio to Keyframes для того, что бы слой medium cyan изменял размеры в зависимости от уровня в правом канале, а слой medium yellow в зависимости от уровня в левом канале. Выражения простейшие…

Да кстати, если вы не находите motion math там, где привыкли его видеть в АЕ5.5 (в Keyframe Assistant), то не пугайтесь. Где-то в help по скриптам в АЕ6.0, я прочитал, что по умолчанию motion math в шестой версии не устанавливается (учитесь, дескать, господа сами скрипты писать). Но, установка его в AE не представляет никаких проблем. Для этого просто перенесите файл MotionMath.AEX из папки After Effects 6.0'Support Files'Plug-ins'Professional'Keyframe Assistant'(MotionMath) на уровень выше, то есть в After Effects 6.0'Support Files'Plug-ins'Professional'Keyframe Assistant. Ну и заодно файлы языковой поддержки, если хотите использовать поддержку немецкого, французского или японского языков.

Текст

Все, кто попробовал новую версию AE, первым делом отмечали появление инструмента text. Наконец-то, говорили они, adobe пошевелился и внял многочисленным просьбам пользователей и создал хороший текстовый инструмент. Хотя, на днях я полазил по конференциям посвященным АЕ, и в общем то не все так гладко с этим инструментом, как выяснилось. Замечу, что лично, меня не одна из перечисленных там проблем не коснулась.

Инструмент text имеет достаточно большое количество настроек, и преимущества в удобстве работы по сравнению с text effect (который остался в наборе и бросать его окончательно, видимо, не стоит).

С помощью выражений и этого нового инструмента мы можем добиться весьма и весьма интересных эффектов.

Для начала создадим текстовый слой. Для этого мы можем пойти в меню layer>new>text (ctrl+alt+shift+t) или же просто щелкнуть инструментом «T» на нашей композиции. Обратите внимание, что вы можете создать как вертикальный, так и горизонтальный текст. Для этого кликните левой кнопкой мыши на «T» и подержите. Появиться выбор horizontal type tool или vertical type tool. Выберите horizontal type tool. Введите любое слово. Абсолютно все равно, какое. Я написал «hello world».

Теперь добавим выражение для свойства source text (текстовый слой > группа свойств text > свойство source text).

Начнем изучение возможностей выражений для управления свойствами текста. По умолчанию в поле выражений у нас появилось text.sourceText. Это значит, что текст, который мы ввели, остается без изменений и ничего с ним не происходит. А теперь давайте введем в поле выражений position[0]. Теперь у меня, вместо «hello world», появилась цифра 124 (значение координаты X текстового слоя). Если вы анимируете текстовый слой, то будет меняться сам текст, отображая значение X координаты в момент времени.

А сейчас давайте поговорим о том, что представляет, из себя в Java Script текстовая строка и буквы в ней. Текстовая строка в Java Script является массивом, включающем в себя последовательность букв. Каждая буква имеет свой индекс. Пробел игнорируется (то есть в слове он присутствует, но индекса не имеет). Индексирование начинается с 0.

Давайте разберем это на примере.

Имеется следующее выражение:

s="Hellow world";

s[1]

Первой строкой мы вводим переменную s, которая равна "Hellow world". Она является, по сути своей массивом, из которого мы во второй строке извлекаем букву, имеющую индекс 1. Это буква «е». Она то и будет выведена на экран.

Java Script поддерживает сложение строк. Например, итого выражения "Hellow"+"World" будет вывод на экран HellowWorld.

JavaScript поддерживает большое количество строковых свойств и методов. Большей частью они, к сожалению, в АЕ не поддерживаются.

Я приведу здесь все найденные мною поддерживаемые свойства и методы, что бы вам, не пришлось копаться в книгах. Но вообще-то, учебничек по Java, я бы порекомендовал под рукой иметь… По причине того, что Adobe все расширяет поддержку скриптов в AE. Так что неизвестно, что версии нам новые готовят.

Строковые свойства и методы

Свойства
Length - отражает длину строки

Методы

Для начала посмотрите на строковые методы, которые я нашел в справочнике по JavaScript.

anchor , big, blink, bold, charAt, fixed, fontcolor, fontsize, indexOf , italics, lastIndexOf, link, small, strike, sub, substring, sup, toLowerCase, toUpperCase, fromCharCode

Я попробовал их все, но реально в АЕ работают следующие:

fromCharCode() – извлекает символ по индексу из шрифтового набора

toUpperCase() – переход в верхний регистр

toLowerCase() – переход в нижний регистр

Это связано с тем, что большинство методов предназначены для web. А в АЕ имеется лишь ядро и встроенные объекты, но никак не вся мощь Java для броузеров. Ошибку АЕ правда при их использовании не выдает, но ничего кроме надписи «использован метод такой-то» получить не удается.

А теперь примеры на свойства и методы.

Данное выражение извлекает длину строки и выводит ее на экран вместо нашего текста:

s = 'hellow world';

s.length

Следующее выражение извлекает символы из набора заданного для вашего текста шрифта:

String.fromCharCode(90) + String.fromCharCode(49) + String.fromCharCode(50)

Если вы используете символ "'r" в строке, как здесь "abcd'refgh", то ваша строка будет в этом месте закончена и начата новая:

abcd

efgh

А сейчас давайте создадим, что-то более сложное. Например, сетку из шестнадцатиричных символов размером 8*4 символа. Символы будут меняться(что-то типа эффекта Numbers). Для этого в поле ввода выражений впишем следующее:

numRows = 4;

numChars = 8;

holdFrames = 5;

seed = Math.floor(time/(holdFrames*thisComp.frameDuration));

seedRandom(seed,true);

s = "";

j = 0;

while(j < numRows)

k = 0;

while (k < numChars)

c = Math.floor(random(48,64));

if (c > 57) c += 7;

s += String.fromCharCode(c);

k += 1;

s += "'r";

j += 1;

s

Давайте разберем его.

Первые три строки определяют размеры сетки, и то, через какое время будет происходить смена символов. Следующие две строки обеспечивают случайную смену символов через каждые 5 кадров. Переменная s содержит нулевое значение (пока нулевое). Это выражение включает два цикла. Внешний цикл формирует нашу сетку. А внутренний генерирует смену символов. А на выходе все это подставляется в нашу переменную s.

Время разделять

Еще один строковый параметр split(). Разберем его на примере.

s = "honesty,integrity,loyalty,compassion,empathy";

s.split(",")[2]

Задана переменная s, равная текстовой строке "honesty, integrity, loyalty, compassion, empathy". Нам нужно извлечь слово loyalty. Для этого используем split().

s.split(",")[2] обозначает, что будет извлечено слово после второй запятой.

А теперь давайте сделаем так, что бы слова из этой строки появлялись друг за другом. Для этого напишем следующее выражение:

holdTime = 1.0; // время задержки

s = "honesty,integrity,loyalty,compassion,empathy"; // переменная с текстом

j = Math.floor(time/holdTime); // переменная, возвращающая ближайшее целое число,

'' меньшее или равное аргументу time/holdTime

s.split(",")[j] // будет отображать слово после точки номер, которой будет равен j

Обратите внимание, слова будут меняться только первые 5 секунд. Поэкспериментируйте сами, что бы получить другой результат.

Давайте порисуем

Еще одно нововведение в АЕ6, сразу бросающееся в глаза – это более тесная интеграция инструмента рисования в программу.

Для рисования два раза щелкните левой кнопкой мыши на нужном вам слое и выберите инструмент рисования. Сделайте один завиток. Во теперь можно и выражение добавить.

Добавьте выражение на свойство stoke end.

freq = 0.5;

50*(1-Math.cos(freq*time*Math.PI*2))

Будет происходить достаточно интересная прорисовка.

Давайте усложним нашу сцену, добавим выражение для управления цветом кисти.

linear(index,1,4,[0,1,1,1],[1,0,1,1])

>else if (index <= 8)

linear(index,5,8,[1,0,1,1],[1,1,0,1])

linear(index,9,12,[1,1,0,1],[0,1,1,1])

А теперь добавьте на rotation свойства stroke:

(index-1)*30

Последним шагом дублируйте наш слой 11 раз и получите конечную анимацию.

Выражения и новый инструмент (эффект) Liquify

Этот новый эффект позволяет получать очень интересные и органичные имитации жидкости. Давайте, применим его на любом понравившемся вам изображении, и создадим какие-то искажения. Теперь применим на свойстве Distortion Persentage выражение

freq = 0,6; // переменная, определяющая частоту обновления свойство

(1-Math.cos(freq*time*Math.PI*2))*50 // определяет величину свойства по текущему времени

Работа с трэкером

В АЕ6.0 появились изменения в аппарате трэкинга, позволяющие с большим удобством манипулировать данными трэкинга с помощью выражений.

Приведу пример, когда нужно сделать «рой» цветных точек кружащихся вокруг головы дельтапланериста.

У нас имеются следующие слои: видео с дельтапланеристом и слои с цветными точками. Будем трэкать точки к видео. Далее я опишу методику для одного слоя. Для остальных слоев все будет идентично.

Перед тем, как начать трэкинг-анализ примените выражение к параметру Attach Point точки трэкинга:

L= thisComp.layer("Comp 1");

masterPos = L.motionTracker("Tracker 1")("Track Point 1").attachPoint;

masterPos + wiggle(4,45) – position

Теперь трэкайте и получите «рой» точек вокруг дэльтапланериста.

Ну, вот собственно и все. Пробуйте шестую версию сами, и вполне возможно вам удастся раскопать что-то еще. Желаю успехов.

Parenting в After Effects 5.0 -- это превосходный способ для группирования объектов, или для того, чтобы заставить один анимированный объект следовать за другим. Выражения (Expressions) предлагают другой подход и в результате мы можем получить еще большую свободу управления над одним объектом, заставляя его делать то же, что и другой.


Рисунок 1. В этой анимации -- с часовой и минутной стрелками, ходящими по циферблату и радиальным шлейфом, идущим за часовой стрелкой -- использованы всего пара ключевых кадров (keyframes). Для привязки радиального шлейфа и минутной стрелки к часовой были использованы

Выражение значения

До After Effects 5.0, если вы хотели что-то анимировать -- будь то положение слоя или параметр эффекта -- вам приходилось пользоваться ключевыми кадрами. Ключевой кадр устанавливал: "Вот это является значением такого параметра в этот момент времени".

В версии 5.0, Выражения являются дополнением к -- и, во многих случаях, заменой для -- ключевых кадров. Вместо присвоения определенного значения параметру, Выражения являются инструкциями для определения этого значения откуда-то еще. В результате выяснится, что вам придется применять ключевые кадры к меньшему количеству объектов, а использовать Выражения для заимствования значений из ключевых кадров, чтоб помочь себе управлять и другими слоями. Это "откуда-то еще", где Выражения берут свои значения могут быть такими же простыми, как такой же параметр из другого слоя или эффекта -- или сложными как, например, результат хитрой программы, написанной на JavaScript.

Полезно сравнить Выражения с Parenting и Математикой Движения (Motion Math). Parenting накладывает трансформации, примененные к одному слою (Масштаб (Scale), Положение (Position), Вращение (Rotation)) к другому слою за один шаг. Однако же, Parenting не учитывает ни прозрачность (transparency), ни любой из эффектов. Motion Math это скрипт, который вы можете запустить в слое для автоматического вычисления ключевых кадров. Проблемой использования Motion Math (помимо его громоздкого интерфейса) является тот факт, что запустив скрипт, вы больше ничем не управляете: единственный законный способ "настройки" -- удалить все созданные им ключевые кадры и начать все с начала.

Первая ценная возможность, которой обладают Выражения, в том, что они всегда живые: если вы создали Выражение, которое заставляет один слой (ведомый) повторять вращение другого слоя (главного), а затем вы изменили вращение главного, ваш ведомый слой автоматически будет следовать произведенным изменениям (и вам не придется удалять и перестраивать какие-либо ключевые кадры). Вторая ценность в том, что вы можете применять Выражения к любому одиночному параметру по вашему выбору. Третье замечательное свойство: Выражения могут находить по ссылке фактически любой другой параметр во всем проекте: идентичное значение в другом слое, совершенно другое значение из другого слоя или эффекта или даже параметр слоя из совершенно другой композиции в пределах одного проекта.

Вырази себя

Выражения легко создавать и применять. Во многих случаях, After Effects запишет Выражения автоматически; от вас только требуется указать на то, что вы хотите, чтобы он сделал. Скажем, вы захотели, чтобы один слой вращался так же как и другой слой. На первом шаге выставим параметры Rotation для обоих слоев в окне Time Layout. Затем выберем параметр Rotation для слоя, который будет ведомым ("будет выражен через. "), и выберем в меню пункт Animation>Add Expression или выполним Option-click на его анимационном секундомере (Alt-click для Windows). Знак равенства ("=") появится между словом "вращение" ("rotation") и секундомером нормальной анимации, а значение вращения станет красным. Появится новая строка внизу, говорящая "Expression: Rotation," и следом за ней на timeline появится слово "rotation" (см. рисунок снизу). Это самое примитивное (и, возможно, самое наименее полезное) Выражение: "Моё вращение равно моему вращению."

Для того, чтобы изменить это Выражение на значение "Мое rotation равно rotation другого слоя," щелкните на инструменте pick whip, который появится в строке Выражения -- он выглядит как маленькая спираль. Протяните его к значению rotation главного слоя (см. картинку ниже).

Давайте пойдем дальше и запишем новый скрипт для Выражения: this_comp.layer("master").rotation

Нажмите Enter, чтобы приказать After Effects принять новое Выражение. Если вы сейчас хотите редактировать вращение главного слоя или задать ключевые кадры для него, то новопривязанный слой будет послушно следовать всем изменениям.

Даже непрограммисту доступно чтение Выражения -- просто взгляните на точки для того чтобы помочь себе разбить его на понятные куски. Иногда весьма полезно читать его в обратном порядке. Приведенный в примере скрипт говорит: "я равен параметру "rotation", слоя по имени 'master' (главного слоя), который располагается в композиции "this_comp".

Изменять Выражение почти также легко, как заставить After Effects записать его для вас -- все, что требуется -- это элементарная математика. Предположим, вы хотите вращать ведомый слой в два раза быстрее главного слоя. Все, что вам нужно сделать -- это выбрать Выражение, переместить курсор в конец, набрать " * 2", и нажать Enter. Если вы хотите вращать его в полтора раза быстрее, но в противоположном направлении, наберите " * -1.5".

И тут же в пытливом уме появляется множество потенциально полезных применений: в часах, где секундная стрелка будет вращаться в 60 раз быстрее минутной; минутная, вращающаяся в 12 раз быстрее часовой (как на Рисунке 1).

Немного усовершенствуемся

Вы можете применять Выражения для поддержки анимации координат. Однако, они также весьма полезны для координации эффектов или создания других типов отношений главный-ведомый.

Нам нравится пользоваться Выражениями для установления главных цветов при разработке. Трюк состоит в определении цвета слоя с использованием эффекта, имеющего образец цвета, который мы можем анимировать, например Fill, Path Text, Stroke, или Tint. Затем вы можете создать Выражения для связки одного образца цвета с другим, пользуясь в точности той же методикой, что и в предыдущем примере с вращением.

Главным параметром для Выражения может быть слой, который появляется в окончательной прорисовке, или пустой слой, например Null Object или Solid. Выражения даже могут преодолевать границы композиций. Например, вы можете создать одну композицию с "главным цветом" и связать слои во всех ваших рабочих сценах с ней.

Помните, что Выражения могут быть связаны между разнородными параметрами. Например, популярный текстовый трюк состоит в том, чтобы анимировать трекинг (tracking) строки символов для подгонки того, насколько далеко расположены символы друг от друга и сделать их более размытыми (blur) одновременно с увеличением межсимвольного пространства. Обычно это требует координации двух наборов ключевых кадров -- один для трекинга и другой для размытия. Однако же, Вы можете теперь связать Выражением количественный показатель размытия с показателем трекинга. Если вы хотите, чтобы значение показателя трекинга 10 соответствовало показателю размытия 1, просто присоедините "/10" в конце скрипта для деления на 10.

Если вы хотите погрузиться глубже в Выражения, читайте руководство, где великолепно это объясняется или возьмите книгу по JavaScript, например: автор David Flanagan, название: JavaScript Pocket Reference (O'Reilly & Associates, 1998). У After Effects также есть несколько инструментов для облегчения жизни, например всплывающие меню (расположены справа от pick whip), где уже разобраны наиболее часто применяющиеся компоненты Выражений.

Сами по себе Выражения представляют текстовые файлы, поэтому вы можете отправлять их по электронной почте другим или копировать и вставлять их в текстовый процессор или приложение-"склерозник". Поиск по списку адресов и After Effects или на Web форуме -- это замечательный способ получить помощь при написании скриптов (особенно по той причине, что Adobe не считает написание главы по устранению ошибок в Выражениях элементом нормальной технической поддержки).

Ну и, конечно же, есть несколько недостатков в Выражениях. Наиболее существенный -- это их чувствительность к точным именам слоев. Если вы будете переносить Выражения между слоями, или изменять название главного слоя, вам придется редактировать Выражения, чтобы они заработали. Другой недочет в том, что они применимы только к одному параметру одновременно; Если вы хотите, чтобы все параметры одного эффекта изменялись, как в другом, вам придется построить Выражение для каждого параметра, отличающегося от значения по умолчанию. Несмотря на это, время, потраченное на их создание окупится сторицей в ходе дальнейшей работы над проектом.


Рассмотрим метод из справочника "Атрибуты и методы Adobe After Effects.pdf":

loopOut(type="cycle", numKeyframes=0)

Тип возвращения: число или массив.

Повторяет сегмент времени, измеряемый от последнего ключевого кадра в слое до точки входа слоя. Цикл воспроизводится до точки выхода слоя. Заданное число ключевых кадров определяет циклически повторяющийся сегмент.

Значение numKeyframes используется для определения количества сегментов ключевых кадров для зацикливания. Указанный диапазон измеряется в обратном направлении от последнего ключевого кадра.

Например, значение loopOut ("cycle", 1) повторяет сегмент, ограниченный последним и предпоследним ключевыми кадрами. Значение по умолчанию 0 означает, что все ключевые кадры повторяются циклично. Дополнительную информацию см. в методе "loopIn()".

2. Метод. Math.sin()

Внимание — это не метод Adobe After Effects а встроенный метод JavaScript, тем не менее его можно использовать в выражениях в Adobe After Effects.

Функцию у=sin(x) мы помним из школьного курса математики. Напомню, что значение функции изменяется от -1 до +1.

  • Создадим новый проект Adobe After Effects 1280*720 30 сек.
  • Создадим слой Solid 300*300 Blue.
  • На Timeline в слое Solid раскроем свойство Opacity и введем выражение:

Math.abs(Math.sin(time))*100

Обратите внимание методы JavaScript надо вводит с большой буквы в противном случае отобразится ошибка!

Math.abs – абсолютное значение аргумента, компенсируем отрицательные значения функции y=sin(x).

Math.sin(time) – вычисление sin с аргументом время.

*100 масштабируем результат от 0 до 100.

Для параметра Scale выражение будет выглядеть уже сложнее:

temp=Math.sin(time)*200;

[temp, temp]

Здесь необходимо использовать переменные для двух аргументов параметра Scale.

На рисунке выражение для параметра Opacity отключено!

3. Метод Wiggle()

Для создания хаотичности применяется метод Adobe After Effects Wiggle(). Метод Wiggle имеет пять аргументов, обычно используются два первых. Первый это частота колебаний, второй амплитуда колебаний.

Рассмотрим метод из справочника Атрибуты и методы Adobe After Effects.pdf

wiggle (freq, amp, octaves=1, amp_mult=.5, t=time)

Тип возвращения: число или массив.

Тип аргумента: freq, amp, octaves, amp_mult и t – это числа.

Произвольно применяет эффект покачивания к значению свойства.

Значение freq – это частота в покачиваниях в секунду.

Значение amp – это амплитуда в единицах измерения свойства, к которому оно применяется.

Значение octaves – это количество октав шума, которые требуется сложить. Это значение управляет объемом детализации в покачивании. Сделайте это значение больше значения по умолчанию (1), чтобы добавить более высокие частоты, или меньше, чтобы добавить амплитудную гармонику в покачивание.

Значение amp_mult – это число, на которое умножается значение amp для каждой октавы. Это значение управляет скоростью спада гармоник. Значение по умолчанию равно 0,5 приблизите его к 1, чтобы добавить гармонику при той же амплитуде, что и базовая частота, или приблизите его к 0, чтобы уменьшить детализацию.

Значение t – это базовое начальное время. Этому значению по умолчанию присваивается текущее время. Используйте этот параметр, чтобы выходные данные являлись покачиванием значения свойства, полученного в разное время.

Как анимировать с помощью метода wiggle().

  • Создадим новый проект Adobe After Effects 1280*720 30 сек.
  • Импортируем рисунок (у меня лист клена, который будет падать).
  • Установим Ключевой кадр так, чтобы лист падал справа сверху влево вниз (ветер дует справа).
  • Делаем Alt+клик на значке с секундомером слева от параметра Position и вбиваем

случайные колебания с частотой 1 Гц и амплитудой 200 пикселей.

случайные колебания с частотой 1 Гц и амплитудой 50 пикселей.

4. Анимация эффектов с помощью выражений.

У нас есть сплошной слой, мы применяем к нему эффект Gell Pattern и, чтобы данный эффект не был статичным нам нужно анимировать параметрs Evolution и Disperce.

  • Делаем Alt+клик по значку с секундомером слева от параметра Evolution и вставляем метод time*100.
  • Делаем Alt+клик по значку с секундомером слева от параметра Disperce и вставляем метод time.

Смотрим анимацию.

Можно «поиграть» с другими параметрами и попробовать применить другие методы.

5. Примеры выражений в Adobe After Effects.

5-1. Пример выражения вращение по кругу.

  • Создайте Shape (Шейп) в виде звезды с помощью инструмента Star Tool:
  • Введите следующее выражение в свойство Position:

[(thisComp.width/2),(thisComp.height/2)]+[Math.sin(time)*200,-Math.cos(time)*200]

thisComp.width/2 – вычислили середину окна по горизонтали.

thisComp.height/2 – вычислили середину окна по вертикали.

Math.sin(time)*200,-Math.cos(time)*200 – создали движение по кругу.

5-2. Пример выражения Движение стрелок часов.

  • создайте два длинных узких сплошных слоя: часовую стрелку и минутную стрелку.
  • Разместите опорные точки на концах стрелок.
  • Переместите слои так, чтобы опорные точки находились в центре композиции.
  • В свойство Rotation для часовой стрелки добавьте выражение (R - радиус часовой стрелки):

R=300; T=time;

[R*(Math.sin(T/24)-Math.cos(T/24))]

  • В свойство Rotation для минутной стрелки перетащите инструментом «Лассо» к свойству Rotation для часовой стрелки. Появится следующее выражение:

thisComp.layer("Hour").transform.rotation

Чтобы минутная стрелка вращалась в 12 раз быстрее часовой стрелки добавьте значение *12 в конце выражения следующим образом:

thisComp.layer("Hour").transform.rotation*12

5-3. Пример использования конструкции If … then … else.

Реализация исполнения операций по условию.

Выражения вводим в свойство Position:

    Дрожание изображения при условии если время > t сек

t=4;

if (time > t) wiggle(3,25) else value;

t=4;

if (time > t) value; else wiggle(3,25);

t1=2; t2=4;

5-4. Затухающие колебания.

Выражения вводим в свойство Position:

Height=600; freq=3; decay=1,1; amp=500;

y=Height-Math.abs((Math.sin(time*freq))/Math.exp(time*decay)*amp); [Height, y]

5-5. Пульсация.

Выражения вводим в свойство Scale:

maxDev = 23; spd = 30; decay = 1.0;

t = time - inPoint;

x = scale[0] + maxDev*Math.sin(spd*t)/Math.exp(decay*t);

y = scale[0]*scale[1]/x;

[x,y]

6. Конвертирование выражений в ключевые кадры

В некоторых ситуациях может быть полезно конвертирование выражений в ключевые кадры. Для преобразования выражений в ключевые кадры необходимо в главном меню Animation/Keyframe Assistant/Convert Expression to Keyframes.

Читайте также: