After Effects Tips

Тут собираются разные удобные типсы, в основном, expressions в After Effects. На полноценные статьи они не "тянут", так что поживут пока здесь.


Содержание:

Линковка параметров эффектов
Линковка параметров из разных композиций
Хаотичное движение, вращение, моргание.. короче, Wiggle
Ограничение Wiggle по отдельным параметрам
Target Camera
Смещение слоя, относительно предыдущего
Expressions во времени
Зацикливание композиции
Хроматические аберрации
Freeze Last Frame


Линковка параметров эффектов

Иногда, в комплексных композициях, для удобного управления анимацией, требуется собирать управление различными параметрами эффектов, в одном месте. Проще всего это сделать, создав нуль-слой и повесив на него элементы управления из effects/expression controls. например, есть несколько слоев, у которых есть эффект fast blur. Несколько, например, 100. И параметр bluriness анимируется. При том, у всех по-разному. Перелопачивать сотню слоев, каждый раз, неудобно. Поэтому можно собрать их все в одном месте.

Создаем слои с эффектом и называем их "layer-a", "layer-b", "layer-c" и так далее..
Поверх всего создаем Null и вешаем на него Slider Control. Переименовываем его в "Layer-a Control". Затем, дублируем слайдер необходимое количество раз и переименовываем копии, в соответствии с именами слоев.

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

Чтобы не таскать туда-сюда параметры сто раз, предлагаю просто скопировать код с одного параметра и вставлять его в другие, меняя имена слоев и слайдеров. В первом слое у меня получился такой код:

thisComp.layer("control").effect("Layer-a Control")("Slider")

Для второго - он будет, соответственно:

thisComp.layer("control").effect("Layer-b Control")("Slider")

и так далее..


Линковка параметров из разных композиций

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

Код будет, соответственно:

comp("Comp 2").layer("control").effect("Slider Control")("Slider")

Хаотичное движение, вращение, моргание.. короче, Wiggle

Вкратце, wiggle(a,b) - функция хаотичного воздействия на параметр, к которому она применяется. Имеет параметры: a - частота, b - амплитуда. То есть, если применить ее к параметру position слоя, то он будет хаотично перемещаться по обоим (всем трем) осям, с частотой a колебаний в секунду и на расстояние в b пикселов.


Ограничение Wiggle по отдельным параметрам

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

w = wiggle(5,30);
[w[0],w[0]]

Решение предложено Дэном Эббертсом, основателем сайта motionscript.com. В первой строке задается переменная и к ней применяется функция wiggle, во второй, эта переменная применяется к обоим параметрам.

Если нужно ограничить wiggle только по одной оси, используется такое выражение:

[scale.wiggle(5,400)[0], scale[1]]

В случае, когда параметра три, например, у трехмерного слоя, добавляется еще один параметр:

[scale.wiggle(5,400)[0], scale[1], scale[2]]

Target Camera

Для того, чтобы визуально управлять точкой фокуса камеры (Point of interest), нижно привязать его к нуль-слою.

Нуль-слой, в свою очередь, можно привязать к какому-либо объекту в сцене. Он тоже будет привязан к камере.


Смещение слоя, относительно предыдущего

Иногда нужно размножить слои по с определенным интервалом. Вручную это делать долго, для облегчения труда можно написать в параметре position:

[transform.position[0],transform.position[1], index-5]

Этот код написан для трехмерного слоя. Более подробно можно почитать у Артема Лукьянова


Expressions во времени

Это довольно серьезная проблема - анимировать слой, при помощи expressions, определенное количество кадров. Например, нужно, чтобы эффект wiggle начинал работать со 2-й секунды, а заканчивал на 4-й.

Я нашел два способа решения этой проблемы. Первый:

timeToStart = 2;
timeToStop = 4;
if ((time > timeToStart) && (time < timeToStop)){
wiggle(3,25);
}else{
value;
}

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

if (effect("Checkbox Control")("Checkbox") == 1){
wiggle(10,100);
}else{
100
}

Взято отсюда.

Оттуда-же взят еще один способ, который работает и вполне мне подошел, потому что управляется кейфреймами.
Для примера используем опять эффект wiggle, который, как известно, имеет два параметра: частоту и амплитуду.
Итак, создаем два контроллера "Slider Control". Я сразу их переименовал в "wiggle rate" и "wiggle amplitude" и написал следующий код в окне expression для параметра position:

c = effect("wiggle rate")("Slider");
d = effect("wiggle amplitude")("Slider");
wiggle(c,d);

Теперь можно использовать обычные ключи для плавной анимации двух параметров. Можно даже вынести слайдеры в отдельный управляющий слой, если управлять надо несколькими слоями сразу. Проблема только в том, что их может расплодиться слишком много. Их можно сократить в два раза, заменив "Slider Control" на "Point Control" или даже на "3D Point Control". В последнем случае, можно регулировать сразу три параметра в одном контроллере. Цепляются к коду они через индексные значения:

c = effect("Point Control")("Point")[0]
d = effect("Point Control")("Point")[1]

Зацикливание композиции

Это импортированную секвенцию зациклить легко, а короткую композицию - немного сложнее. Помещаем композицию на таймлайн и включаем Time remapping. (Меню Layer > Time > Enable Time Remapping)
На слое включается эффект и ставятся ключи в начало и вконец. Выделяем "Time Remap" на слое и опять в меню Animation > Add Expression. Создается выражение "timeRemap", но нам оно не нужно. Вместо него пишем:

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

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

Взято отсюда.

Еще можно запустить цикл "туда-сюда", то есть "pingpong", для этого код надо сделать следующим:

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

Хроматические аберрации

Эффект этот выглядит, как рассинхронизация цветовых каналов и выражается в виде цветного ореола на контрастных краях изображения. Воспроизвести этот эффект легко. Делаем три копии исходного слоя. По одной на каждый канал. Затем, любым доступным способом, оставляем в каждом слое по одному цветовому каналу и переводим слои в режим наложения ADD. Таким образом получается исходное изображение, только поделенное по каналам. К двум верхним слоям применяет эффект Optics Compensation, растащив View Center в разные стороны. Та месть еще настройки, их можно покрутить. Главное, не увлекаться. Эффект должен быть едва заметен.

Взято отсюда.


Freeze last frame

Иногда бывает нужно остановить композицию на последнем кадре и продлить ее на некоторое время. Есть простой способ, он работает как с композициями, так и с секвенциями. Алгоритм действий такой: устанавливаете нужную длительность родительской композиции, затем выделяете нужный слой и правой кнопкой на нем "Time" > "Enable Time Remapping". На слое создаются ключи, но вам они не нужны, просто растягиваете слой до нужной длины.

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

Если вам есть, что добавить, не стесняйтесь :)