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

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

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

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


Теги:

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

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

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

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

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

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

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

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

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

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

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

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


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

Теги:



atatat
Наблюдатель
Наблюдатель
Сообщения: 50
Зарегистрирован: 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
Санта
Санта
Сообщения: 2802
Зарегистрирован: 18 мар 2016 23:20
Откуда: С Ютуба
Благодарил (а): 18 раз
Поблагодарили: 274 раза

Сообщение 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
Платные консультации по работе в программах


Yurik
Не Нуб
Не Нуб
Сообщения: 38
Зарегистрирован: 17 апр 2018 12:05
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Сообщение Yurik » 13 май 2018 19:11

Извините, что поднял тему из подвала...
Очень нужно разобраться, но везде написано одно и тоже, но у меня не работает((
Что то не так в описании функции? или что то не догоняю?
В текстовом слое в Sourse вбиваю:
ease(time, inPoint, outPoint, 0, 100); реультат от 0 до 100, все норм.
Вбиваю:
ease(time, outPoint, inPoint, 0, 100); ничего не меняется, все равно от 0 до 100, а не наоборот.
Попробуйте сами, видимо
aeplug писал(а):Источник цитаты t - исходное число, значение которого будет интерполировано
tMin - минимальное значение исходного диапазон
tMax - максимальное значение исходного диапазон
value1 - первое значение итогового диапазона (при t = tMin)
value2 - второе значение итогового диапазона (при t = tMax)

Это не совсем так?

Спасибо

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

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

Сообщение aeplug » 13 май 2018 20:26

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


Yurik
Не Нуб
Не Нуб
Сообщения: 38
Зарегистрирован: 17 апр 2018 12:05
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Сообщение Yurik » 13 май 2018 20:28

Да это понятно, тогда будет ок, но значит нет привязки, что именно первое значение времени будет интереполировано в первое нужное значение? В этой формуле ease(time, outPoint, inPoint, 0, 100) на outPoint (в конце слоя) должен быть 0 или нет? )

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

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

Сообщение aeplug » 13 май 2018 20:45

Yurik писал(а):Источник цитаты первое значение времени

Ну в описании же написано МИНИМАЛЬНОЕ, а не ПЕРВОЕ. Значит сравниваются они там именно так.
Возвращает value1 при значении t меньше или равном tMin. Возвращает value2 при значении t больше или равном tMax. Возвращает линейную интерполяцию между value1 и value2 при выполнении условия tMin < t < tMax.

Yurik писал(а):Источник цитаты должен быть 0 или нет?

Очевидно да, но на практике нет.
Изображение
Может просто outPoint - это то место где слоя уже нет.
Поэтому 100 ты просто не видишь.
попробуй так

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

ease(time, inPoint, outPoint-thisComp.frameDuration, 0, 100)

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


Yurik
Не Нуб
Не Нуб
Сообщения: 38
Зарегистрирован: 17 апр 2018 12:05
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Сообщение Yurik » 13 май 2018 21:15

Дело не именно 0 или 100. В твоей формуле на скриншоте outPointу на этом месте тайм лайна выдает 99.9. Нормально.
Но если ты поменяешь в форумле outPoint и inPOint, то ничего не изменится, все равно в конце клипа будет 99.9.
Вот это я и хочу понять. Насчет выполнения условия tMin < t < tMax, вот кусок твоей формулы:
aeplug писал(а):Источник цитаты ease(time, d3s, d3e, d2s, d2e);

d3s это outPoint, а d3e это маркер. Out явно больше маркера, какое ж тут выполнение условий?
Зануда я да?))) Ну или и правда, пофигу как писать второй и третий параметр функции, оно само разберется, поставит 4-й параметр меньшему, а 5-й параметр большему значению.


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

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

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