Текущие версии программ: After Effects CC 2017 v14.2  Premiere Pro CC 2017 v11.1.1

не стесняйтесь создавать новые темы для новых вопросов

Анимация по маркерам без ключей в After Effects. Автоматизация прозрачности на выражениях +проект

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
Ссылки, описания, дополнительная информация для моих уроков на YouTube
Canonical Link
Аватара пользователя

Автор темы
aeplug
Санта
Санта
Сообщения: 1151
Зарегистрирован: 18 мар 2016 23:20
Откуда: С Ютуба
Благодарил (а): 2 раза
Поблагодарили: 129 раз

Анимация по маркерам без ключей в After Effects. Автоматизация прозрачности на выражениях +проект


Теги:

Сообщение aeplug » 18 мар 2017 13:34

Анимация-без-ключевых-кадров-по-маркерам.jpg
Анимация-без-ключевых-кадров-по-маркерам.jpg (36.59 КБ) 638 просмотров
Анимация-без-ключевых-кадров-по-маркерам.jpg
Анимация-без-ключевых-кадров-по-маркерам.jpg (36.59 КБ) 638 просмотров

Будем разбираться с выражениями в After Effects, создавая автоматическое появление (и исчезновение) слоя за счет прозрачности. Оказывается можно написать хитрое выражение, которое будет само в начале слоя поднимать его прозрачность от 0 до 100. А в конце - наоборот, сбавлять до нуля. Это выражение может работать с маркерами слоя для регулировки длительности эффекта появления/исчезновения или брать значения по умолчанию. Очень удобно сделать из всего этого пресет и использовать его для быстрой автоматической анимации без ключевых кадров.
https://www.youtube.com/watch?v=qqSNUaUmca8
Мое выражение после урока:

Код: Выделить всё

d1s = inPoint;
d2s = 0;
d2e = 100;
d3s = outPoint;
trans = 2;
if (marker.numKeys==2)
   {
   d3e = marker.key(2).time;
   d1e = marker.key(1).time;
   }
else
   {
   d3e = outPoint - trans;
   d1e = inPoint + trans;
   }
ease(time, d1s, d1e, d2s, d2e) - ease(time, d3s, d3e, d2s, d2e);

Чужое выражение, найденное в интернете давным давно:

Код: Выделить всё

transition = 20;       // transition time in frames
if (marker.numKeys<2){
tSecs = transition / ( 1 / thisComp.frameDuration); // convert to seconds
linear(time, inPoint, inPoint + tSecs, 0, 100) - linear(time, outPoint - tSecs, outPoint, 0, 100)
}else{
linear(time, inPoint, marker.key(1).time, 0, 100) - linear(time, marker.key(2).time, outPoint, 0, 100)
}

Краткое содержание урока


На стриме попросили рассказать про анимацию маркерами, да у меня и самого уже давно лежала найденная в недрах интернета заготовка, с которой я хотел разобраться. В основе такого метода лежат стандартные функции After Effects для интерполяции значений.
Функции для Interpolaton.jpg
Функции для Interpolaton.jpg (25.89 КБ) 558 просмотров
Функции для Interpolaton.jpg
Функции для Interpolaton.jpg (25.89 КБ) 558 просмотров

Их задача состоит в получении числа на входе, двух диапазонов для преобразования и пропорционального изменения исходного значения во второй диапазон:

Код: Выделить всё

ease(t, tMin, tMax, value1, value2)

  • t - исходное число, значение которого будет интерполировано
  • tMin - минимальное значение исходного диапазон
  • tMax - максимальное значение исходного диапазон
  • value1 - первое значение итогового диапазона (при t = tMin)
  • value2 - второе значение итогового диапазона (при t = tMax)
Причем value1 и value2 могут быть как больше, так и меньше друг друга. Например при использовании функции вида:

Код: Выделить всё

linear(time, 1, 2, 20, 80)

получим такой обрезанный график зависимости от исходного, постоянно возрастающего, значения времени, вписанный между 20 и 80 на участке с 1-ой до 2-ой секунды.
График преобразования.jpg
График преобразования.jpg (14.45 КБ) 558 просмотров
График преобразования.jpg
График преобразования.jpg (14.45 КБ) 558 просмотров

Таким образом, для получения нужного результат мы должны задать два диапазона для переменной времени time:
  1. от времени начальной точки слоя inPoint до времени первого маркера marker.key(1).time
  2. для изменения прозрачности от 0 до 100
График прозрачности.jpg
График прозрачности.jpg (50.83 КБ) 558 просмотров
График прозрачности.jpg
График прозрачности.jpg (50.83 КБ) 558 просмотров

Код: Выделить всё

d1s = inPoint;
d1e = marker.key(1).time;
d2s = 0;
d2e = 100;
ease(time, d1s, d1e, d2s, d2e)

Второй участок графика для спадания прозрачности после второго маркера делается также, но с учетом обратного преобразования с 100 до 0: от времени второго маркера marker.key(2).time до конечной точки слоя outPoint.

Код: Выделить всё

d1s = inPoint;
d1e = marker.key(1).time;
d2s = 0;
d2e = 100;
d3s = outPoint;
d3e = marker.key(2).time;
ease(time, d1s, d1e, d2s, d2e) - ease(time, d3s, d3e, d2s, d2e);

Двойной-график-прозрачности-для-двух-маркеров.jpg
Двойной-график-прозрачности-для-двух-маркеров.jpg (33.29 КБ) 557 просмотров
Двойной-график-прозрачности-для-двух-маркеров.jpg
Двойной-график-прозрачности-для-двух-маркеров.jpg (33.29 КБ) 557 просмотров

Еще я добавил в финальную версию выражения проверку наличия маркеров на слое через переменную marker.numKeys и (в случае отсутствия таковых) работу с настройками по умолчанию. Благодаря этому, выражение будет работать даже без маркеров на слое, что обеспечивает быстрое применение и готовность к работе с использованием пресетов.
:post_scriptum: Не забудьте посмотреть на полезные ссылки, там есть интересные скрипты для создания и управления анимацией через маркеры.

. :info: .
Полезные ссылки:

Проект прилагаю. Версия CC 2017.


Видео уроки для After Effects http://www.youtube.com/AEPlug
Платные консультации по работе в программах

Теги:



atatat
Не Нуб
Не Нуб
Сообщения: 47
Зарегистрирован: 05 июл 2016 19:14
Благодарил (а): 3 раза

Сообщение atatat » 18 мар 2017 15:03

Самый полезный урок за этот год! Спасибо большое. Раньше тоже интересовался темой с маркерами, нашел что-то на англ сайтах, но не смог применить. Очень бы хотелось больше уроков на тему автоматизации, ведь это очень нужно в работе в АЕ!


Meh.21
Нуб
Нуб
Сообщения: 1
Зарегистрирован: 11 апр 2017 15:15

Сообщение Meh.21 » 11 апр 2017 15:19

Доработал чутка для себя. Обработка >2 маркеров и 1го меркера (при этом затухание в конце не будет происходить)

Код: Выделить всё

d1s = inPoint;
d2s = 0;
d2e = 100;
d3s = outPoint;
trans = .5;

if (marker.numKeys==1)
   {
      d1e = marker.key(1).time;
     ease(time, d1s, d1e, d2s, d2e);
    }

if (marker.numKeys>1)
   {
      d3e = marker.key(marker.numKeys).time;
      d1e = marker.key(1).time;
      ease(time, d1s, d1e, d2s, d2e) - ease(time, d3s, d3e, d2s, d2e);
    }

if (marker.numKeys==0)
    {
      d3e = outPoint - trans;
      d1e = inPoint + trans;
      ease(time, d1s, d1e, d2s, d2e) - ease(time, d3s, d3e, d2s, d2e);
    }


Вернуться в «Мои уроки»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей