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

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

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

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

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

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


Теги:

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

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

Будем разбираться с выражениями в 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 КБ) 1144 просмотра
Функции для Interpolaton.jpg
Функции для Interpolaton.jpg (25.89 КБ) 1144 просмотра

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

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

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 КБ) 1144 просмотра
График преобразования.jpg
График преобразования.jpg (14.45 КБ) 1144 просмотра

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

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

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 КБ) 1143 просмотра
Двойной-график-прозрачности-для-двух-маркеров.jpg
Двойной-график-прозрачности-для-двух-маркеров.jpg (33.29 КБ) 1143 просмотра

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

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

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


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

Теги:



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

Сообщение 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);
    }

Аватара пользователя

vladimir.rostripolka
Нуб
Нуб
Сообщения: 1
Зарегистрирован: 14 июн 2017 11:34
Благодарил (а): 1 раз

Подскажите, может кто знает

Сообщение vladimir.rostripolka » 14 июн 2017 11:47

Спасибо за урок. Пытаюсь разобраться как привязать подобное выражение к масштабу? или любому другому имеющему 2 значения. С программированием знаком очень слабо. подскажите пожалуйста если кто разбирается как прописать. За ранее спасибо

Аватара пользователя

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

Сообщение aeplug » 14 июн 2017 13:16

vladimir.rostripolka писал(а):Источник цитаты подобное выражение к масштабу

измени последнюю строку на

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

t=ease(time, d1s, d1e, d2s, d2e) - ease(time, d3s, d3e, d2s, d2e);
[t,t]
Видео уроки для After Effects http://www.youtube.com/AEPlug
Платные консультации по работе в программах


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

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

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