Движение по кругу after effects

Обновлено: 07.07.2024

Почему помимо проекта я делаю этот урок? Ибо если вы хоть что-нибудь измените (количество фоток и проч.), вам придется все редактировать вручную. И я сейчас расскажу, как.
Простите, что нет скриншотов. Лень.
1. Создаем новую композицию.

2. Вставляем все наши фотографии, у меня их 8 – 1 большая, 7 маленьких. У меня все фотографии квадратные, что и вам рекомендую предварительно сделать со своими фотками в фотошопе. Работая в проекте, быстро поймете, зачем. Большую фотографию располагаем точно по центру.

3. Создаем Null Object, имя которого (это важно) у меня и остается Null 1. Если вы переименуете свой объект, везде, где у меня пишется Null 1, у вас должно быть имя вашего объекта. Подключаем у него функцию 3D Layer (кубик).

4. Применяем к Null 1 пресет 3D Orbit, и плавно переходим к основной части – скриптингу. Чтобы повернуть окружность по оси х перпендикулярно к зрителю (если, конечно, хотите. Если этого не сделать, эффект тоже будет классный), открываем выражение, прописанное для параметра Position у Null 1. Оно выглядит вот так:
Radius = effect("Radius")("Slider");
Speed = effect("Speed")("Slider");
RotationOffset = effect("Rotation Offset")("Angle");

center = [this_comp.width/2,this_comp.height/2,0];
radius = 200;
angle = time * Speed + RotationOffset;
x = Radius * Math.cos(degreesToRadians(angle));
z = Radius * Math.sin(degreesToRadians(angle));
add(center, [x, 0, z]);

В последней строчке меняем местами 0 и z:
add(center, [x, z, 0]);


5. Создаем выражение для параметра Position у первой маленькой фотки. И с помощью pick whip связываем его с Position Null 1.

6. В окне эффектов с помощью слайдера Speed регулируем скорость движения, а с помощью слайдера Radius регулируем радиус окружности. Чтобы видеть окружность, нужно включить кнопку Show Post-Expression Graph, которая находится между "знаком равно" (Enable Expression) и инструментом привязки (pick whip) в графе редактирования выражений. Смотрим, чтобы маленькая фотка не выходила за экран, и не касалась большой, ну и т.д.

7. А теперь самое интересное. Как расставить остальные фотки? Копируем выражение, прописанное у Position нашего Null 1, и вставляем его в Position второй фотографии. Если его закрыть, АЕ тут же начнет ругаться, что не может найти эффектов у этого слоя, прописанных в выражении. Поэтому выражение нужно немного отредактировать. Меняем значение переменных: Radius, Speed и RotationOffset.

8. Для этого стираем все, что написано после "Radius =", и прописываем туда следующее:
thisComp.layer("Null 1").effect("Radius")("Slider");

либо: Открываем на таймлайне у Null 1 эффекты, все три: Radius, Speed и Rotation Offset, берем pick whip у редактируемого выражения и связываем его со слайдером Radius в эффекте Radius у Null 1 на таймлайне.

9. Стираем все, что написано после "Speed =" и прописываем следующее:
thisComp.layer("Null 1").effect("Speed")("Slider");

либо: берем pick whip у редактируемого выражения и связываем его со слайдером Speed в эффекте Speed у Null 1 на таймлайне.

10. Стираем все, что написано после "RotationOffset =" и пишем:
thisComp.layer("Null 1").effect("Rotation Offset")("Angle")

либо: берем pick whip у редактируемого выражения и связываем его со слайдером RotationOffset в эффекте RotationOffset у Null 1 на таймлайне.

В итоге должно получится вот что:
Radius =thisComp.layer("Null 1").effect("Radius")("Slider");
Speed = thisComp.layer("Null 1").effect("Speed")("Slider");
RotationOffset = thisComp.layer("Null 1").effect("Rotation Offset")("Angle")

center = [this_comp.width/2,this_comp.height/2,0];
radius = 200;
angle = time * Speed + RotationOffset;
x = Radius * Math.cos(degreesToRadians(angle));
z = Radius * Math.sin(degreesToRadians(angle));
add(center, [x,z,0]);


11. Копируем это выражение, и вставляем его в параметр Position каждой маленькой фотографии. Это выражение связывает фотографии с Null 1. Почему же нельзя было просто связать Position фотографий с Position Null 1, как мы это сделали у первой маленькой фотографии? Потому что у нас не получится отдалить их на равноудаленное расстояние друг от друга. Как же это сделать? Нежелающие вдаваться в теоретическую часть, пропускают ее и переходят к практике. Для любознательных я опишу, как это работает. Позвольте немного физики.

Ключевым словом в выражении является ANGLE – угол. Значение его появляется (как видно из выражения) от умножения времени на скорость. А как известно нам еще со школы, s=t *u, т.е. время умноженное на скорость дает нам расстояние. У окружности это угол (немножко геометрии), но именно определяя это значение, мы можем правильно отдалить фотографии друг от друга во время движения по окружности (так как все они связаны с Null 1). Числа времени нам известны (на таймлайне), скорость мы задаем в окне эффектов у Null 1 слайдером Speed. Все, что нам нужно, это добавить к полученному значению определенное число, которое отдалит вторую фотографию от первой (читай: от позиции Anchor Point у Null 1) именно на это число градусов окружности (читай: пикселей композиции). И вписывать это число в параметр "angle" у каждой фотографии в порядке арифметической прогрессии (немножечко алгебры), т.е.:

a1, a1+x, a1+2x, a1+3x, a1+4x и т.д., где х – это и есть вот это "определенное число", константа.

Как вычислить эту константу? Формула такова:

x = r/n+1
где x – (тут и далее) – константа (чрезвычайно важное число), r – это радиус окружности (в окне эффектов у Null 1), а n – это количество наших фотографий. Итак, к числу фоток прибавляем 1, и делим радиус окружности на полученное значение. Почему +1? Потому что у окружности последняя точка находится там же, где и первая. Поэтому и "последняя" (несуществующая) фотография должна быть там же, где и первая. Иначе окружность будет незамкнута, а значит – это будет не окружность.

В моем проекте оказалось все очень просто. Радиус = 400, фоток – 7, решаем:
400/7+1 = 400/8 = 50.
Вот и все, что нам нужно. Переходим к последнему шагу.

12. Редактируем выражения для параметра Position у всех фотографий, кроме первой.

У второй фотографии: дописываем в графу " angle = time * Speed + RotationOffset" простое выражение: "+50" (+x) (в вашем случае – полученную вами константу). Графа должна выглядеть так:
angle = time * Speed + RotationOffset+ 50;

У третьей фотографии – "+100" (+2x);
angle = time * Speed + RotationOffset + 100;

У четвертой - "+150" (+3x);
angle = time * Speed + RotationOffset+ 150;

Все, фотографии летают.

Помните, что можете анимировать по ключевым кадрам параметра Radius у Null 1, как у меня в проекте. В АЕ множество задач можно решить и "руками", и "умом", но это именно тот случай, когда руки бесполезны, нужно включать ум.

У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

Добавлено через 1 час 12 минут:

Мне задали вопрос, как запустить движение в другом направлении. Для этого во всех выражениях берем значение переменной angle в круглые скобки и ставим перед ними знак минус.
Т.е. вот так:
для Null 1:

angle = -(time * Speed + RotationOffset);
для второй фотографии:

angle = -(time * Speed + RotationOffset +ваше число);
и т.д.

Помните, что мы в 3D пространстве. Поэтому можно этим пользоваться. Заливаю вторую версию проекта, усовершенствованную. Не забудьте кликнуть 2 раза на маркер.

У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

Продолжаем совершенствовать проект. Как получить полный контроль над движением? Опять, та же строчка angle. Просто во всех выражениях удалите "time * Speed"
Там должно остаться только

angle = RotationOffset+ваше число;

angle = -(RotationOffset+ваше число);
если вы запустили фотки в обратном направлении.

Теперь просто анимируйте по ключевым кадрам Rotation Offset в окне эффектов у Null 1.

P.S. Обращайте внимание на ; т.е. точки с запятыми!! они очень важны!!


Уважаемый мой коллега по АЕ, Andrew_Reznikoff сделал превью проекта, за что выражаю ему публичную благодарность! :)

Во время всеобщей лжи говорить правду - это экстремизм. (с) Дж. Оруэлл.


Рассмотрим метод из справочника "Атрибуты и методы 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.


Inertial Bounce.

Очень распространенный эффект "отскока", который можно записать в виде выражения:

Элемент к которому необходимо привязать данный экспрешн,переводим в 3д слой. Затем перемещаем его anchor point в то место, где будет его "центр тяжести", то есть откуда будет идти вращение. В моем случае это самый верх слоя (текст). Также создаем ключи вращения (в моем случае X rotation от 90 до 0) и в этот X rotation дописываем выражение Inertial Bounce. Также можете создать свет (Light) в композиции для еще более натурального вида анимации.


Decay Bounce.

Еще один вид отскока, на этот раз "от земли". Со следующим выражением:

veloc = thisComp.layer("Control Layer").effect("velo control")("Slider");

amplitude = thisComp.layer("Control Layer").effect("amplitude control")("Slider");

decay = thisComp.layer("Control Layer").effect("decay control")("Slider");

Проблема в том, чтобы использовать данное выражение необходимо создать дополнительный Null Object (или solid слой), назвать его как "Control Layer". Затем применить к ниму 3 фильтра Slider control, и назвать каждый как "velo control", "amplitude control", "decay control". Поставить у них значения -200,-200 и 4, соответственно. Кстати эти значения регулируют скорость (velo), амплитуду (amp) и затухание (decay) отскока. Затем на объект к которому необходимо сделать данный отскок, применяем выражение на параметр Position.


Better Bounce.

Очень простое выражение, которое можно записать в виде:

Это выражение можно добавить к любому из параметру transform, главное аккуратнее подбирайте частоту отскока (freq) так как оно основано на fps проекта.

Баскетбольный мяч.

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

Vy0 = 500; //initial y velocity (pixels/second)

Vx0 = 100; // initial x velocity (pixels/second)

g = 2500; // gravity (pixels/second/second)

Полезные выражения (Expression) в After Effects.

Выражение (Expression) AutoFade в After Effects (применяем к opacity)

Выражение (Expression) для таймера обратного отсчета в After Effects (применяем к Source Text)

Выражение (Expression) затухающих колебаний в After Effects

Выражение (Expression) в After Effects для Time Remap

Выражение (Expression) в After Effects для вращения с постоянной скоростью без ключевых кадров

Выражение (Expression) в After Effects для движения по спирали (применяем на position)

Выражение (Expression) в After Effects для перемщения с постоянной скоростью без ключевых кадров

Выражение (Expression) Wiggle в After Effects

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

Первая цифра — количество сдвигов в секунду, а второе число — значение покачивания.

Выражение (Expression) Time в After Effects

Выражение Time идеально подходит для объектов с бесконечным движением. Например, если вы хотите, чтобы объект вращался бесконечно, вы можете просто добавить слово time в качестве параметра вращения, и ваш объект будет вращаться на 1 градус на длине всей композиции. Параметр времени также работает с основными математическими уравнениями, поэтому если вы хотите, чтобы слой вращался в 30 раз быстрее, вы можете просто написать выражение time*30.

Выражение (Expression) loopOut в After Effects для цикличной анимации

Цикличная анимация. Выражению loopOut() требуется наличия ключевых кадров. Так что если у вас есть слой, который вращается по кругу в течение 1 секунды, вы можете добавить выражение loopOut(), и движение будет повторяться зациклено.

Выражение (Expression) seedRandom в After Effects для рандома (случайности)

Выражение (Expression) Math.round в After Effects для рандома (случайности)

Math.round() — это выражение, округляющее десятичные числа до ближайшего целого числа. Он идеально подходит для выполнения обратных отсчетов или цифр в исходном тексте. Просто добавьте свое исходное выражение в круглую скобку выражения Math.round() в поле выражения source text, и все ваши числа будут округлены.

Выражение (Expression) Snap Zoom In/Out в After Effects

Применяем на текст. Применяем на Scale параметр. Это выражение создает масштабирование слоя в начале и конце слоя.

Если ты используешь ось Z, то примени это выражение

Выражение (Expression) Y Axis Jitter в After Effects

Создает случайное неустойчивое движение по оси Y. В переменную pos, пишем значения для определения силы Jitter.

С августа 2016 года изучаю AE, начала работать в сфере моушен-дизайна, помимо иллюстраций.

Я подготовила урок для блога с простой анимацией фигур и линий. Этот урок предназначен для тех, кто уже более или менее хорошо ориентируется в After Effects, поэтому если вам он покажется сложным, то рекомендую посмотреть базовые уроки в сети. Например этот мини курс: Вводный курс Illustrator + After Effects.


Совсем недавно я закончила и выложила проект с анимированными линиями-выносками (callouts), и в своем уроке я расскажу вам, как я это делала на самом простом примере.

1. Создаем в Adobe Illustrator векторный файл с рисунком. У нас callout. Все линии без заливки, только обводка. Сделайте как на рисунке, чтобы было понятнее выполнять анимацию. Сохраните файл в ai формате.


2. Импорт в After Effects. Есть несколько способов. Двойной клик в окошке Project и выбрать файл в выпадающем окне. Либо через проводник - выбрать файл и перетащить мышью в окно Project. Ещё можно в Меню File > импорт > файл, и выбираем наш файл. Обратите внимание! Должно стоять footage в поле Import As и никаких галочек мы не ставим.



4. Перетаскиваем мышкой импортированный векторный файл с окна Project на time line - нижний раздел рабочей области, где, собственно, мы и будем анимировать наши линии.

5. Выделяем слой с файлом. Идем в меню Effect > Generate > Fill.


Цвет выбираем белый.


6. Слой выделен. Далее нажимаем на вторую по счету иконку Rasterize рядом с названием слоя (если не видно иконок, то внизу тайм лайна есть Toggle Swiches/Modes - нажмите и вид слоя измениться - появятся справа иконки).


Теперь наши линии хорошо видно. Нужно задать им Scale масштаб. Можно раскрыть слой и в параметрах Transform > Scale ввести значение, я поставила 450 на 450. Или горячая клавиша S - сразу отображает только один масштаб из всех параметров трансформации объекта. Горячие клавиши есть на все функции и это очень удобно. Да, каждый слой или объект можно трансформировать и эти настройки есть в каждом слое.

7. Затем разместим наш callout по центру. Как и в иллюстраторе: сначала стрелочка выделение Selection Tool(V), затем двигаем объект.

8. Выделяем наш слой, идем в меню Layer > Create Shapes from Vector Layer.



Все слои разбились отдельно и можно опять удалить наш оригинальный слой, он самый нижний получается. А вручную пришлось бы копировать (копирование слоя - CTRL+D) слой столько раз сколько подслоев - линий, затем удалять лишние подслои у нового скопированного слоя и переименовывать.

Далее у меня в уроке большие скриншоты. Поэтому нажимайте на картинку, чтобы открыть её на весь экран, у кого мелковато видно.





13. Анимация второй линии.
Сейчас научимся с вами работать с настройками самой линии. Сделаем из обычной прямой пунктирную линию и анимируем ее. Дважды U по слою с линией, находим Stroke и раскроем его значения, нажав на стрелочку. Находим параметр Dashes и нажимаем на плюсик + два раза. Появятся значения Dash (количество точек), Gap (расстояние между точками), Offset (анимировать точки). Введем, предположим, значения 5 и 5. Теперь снова ALT + клик по секундомеру у параметра Offset и вводим time*n (у меня значение 35).


Все! Анимация готова! Наш callout ожил! Теперь сохраняемся. Делаем рендер.
Нажимаем горячие клавиши CTRL + M (или идем в меню).


Нажимаем напротив Output Module прямо на стрелочку и выбираем формат у меня MOV+PNG+ALPHA (или же MOV+PNG). И нажимаем Render, ждем пока идет рендер. Потом смотрим результат. Видео сохранится в ту же папку, где и ваш проект.



Подпишитесь на нашу рассылку, чтобы не пропустить ничего нового:

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