After Effects
Изучал и тестировал все туториалы:
After Effects tutorials

Изучал After Effects CC за курсом Супер Моушн (2015)
ссылка1
ccылка2
Список уроков курса Супер Моушн
Глава 1. Основы шейповой анимации в After effects
ознакомился с принципами хорошей анимации, создал шейповые анимации за автором
шейповый 5-и секундный ролик я создавал самостоятельно от начала до конца по уроку, оттачивая работу с программой After Effects
Глава 2. Полезные выражения в After effects

01_EXP_05_LoopOut Advanced_2.mp4
loopOut(); == loopOut("circle");
loopOut("pingpong");
loopOut("continue");
loopOut("offset");
loopOut("circle",2);
loopOut("pingpong",1);
loopIn("pingpong");
loopOutDuration("cycle", framesToTime(10));
02_Control_Bounce.mp4
02_Control_Colors.mp4
гармонические затухания
// amp = .06;
// freq = 2;
// decay = 5;
amp = thisComp.layer("Control_Bounce").effect("Amp")("Slider");
freq = thisComp.layer("Control_Bounce").effect("Freq")("Slider");
decay = thisComp.layer("Control_Bounce").effect("Dec")("Slider");
n = 0;
if (numKeys > 0){
n = nearestKey(time).index;
if (key(n).time > time){
n--;
}
}
if (n == 0){
t = 0;
}else{
t = time - key(n).time;
}
if (n > 0){
v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{
value;
}
n = 0;
if (numKeys > 0){
n = nearestKey(time).index;
if (key(n).time > time){
n--;
}
}
if (n == 0){
t = 0;
}else{
t = time - key(n).time;
}
if (n > 0){
v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{
value;
}
использование Expression Control
Color Contol

Переменные и значения
content("Rectangle 1").transform.position;
comp("03_Variables_Values").layer("Shape Layer 1").transform.position;
content("Rectangle 1").content("Fill 1").color;
comp("03_Variables_Values").layer("Shape Layer 1").content("Rectangle 1").content("Fill 1").color;
r = transform.rotation;
r/10;
[100,100];
a = 100;
[100,100+a*2,100*a];
value; == transform.rotation;
[value[0],value[1]]; собственные значения по x и по y
привязка вращения одной фигуры к параметру другой фигуры
S4_R = thisComp.layer("Shape Layer 4").transform.rotation; // rotation shape layer4
[S4_R,value[1]]
posGreen = thisComp.layer("Shape Layer 2").transform.position; // [x,y]
posOrange = thisComp.layer("Shape Layer 3").transform.position; // [x,y]
определение расстояния между фигурами
delta = posOrange[0] - posGreen[0]; // number
if (delta< 0){delta*(-1)};
Math.round(delta);
Функции index
index - номер слоя
(index-1)*30;
(index-1)*(-90);
linear(t, tMin, tMax, value1, value2);
ease(t, tMin, tMax, value1, value2);
Kof = effect("Kof")("Slider");
posCircle = thisComp.layer("Circle").transform.position[0]; //x
ease(posCircle, 280, 960, value, value*Kof);
// Kof = effect("Kof")("Slider");
// posCircle = thisComp.layer("Circle").transform.position[0]; //x
// ease(0, 280, 960, [0],[360]);

valueAtTime(time);
04_ValueAtTime.mp4
анимация по двум ключам: смещение по позиции,
смещение слоёв и трех композиций
posMain = thisComp.layer("Main_Bar").transform.position; // [x,y]
delay = thisComp.layer("Delay").effect("Delay")("Slider");
OneFrame = thisComp.frameDuration; // длительность одного кадра
newY = posMain.valueAtTime(time-delay*OneFrame*(index-2));
[value[0],newY[1]];
Анимация масштаба иконок при наведении объекта-курсора без помощи ключей.
iconP = transform.position; // [x,y]
iconS = transform.scale; // [x,y]
ArrowP = thisComp.layer("Arrow").transform.position; // [x,y]
scaleF = thisComp.layer("Control Dock Effect").effect("Scale Factor")("Slider"); //num
Dis = thisComp.layer("Control Dock Effect").effect("Distance")("Slider"); //num
delta = Math.round(length(ArrowP,iconP));
//ArrowP = thisComp.layer("Arrow").transform.position;
//'Arrow Position ' + Math.round(ArrowP[0]) + ' ' + Math.round(ArrowP[1]);
linear(delta, 0, Dis, iconS*scaleF, iconS);
////////
iconP = transform.position; // [x,y]
iconS = transform.scale; // [x,y]
ArrowP = comp("DOCK_Effect_L").layer("Arrow").transform.position; // [x,y]
scaleF = comp("DOCK_Effect_L").layer("Control Dock Effect").effect("Scale Factor")("Slider"); //num
Dis = comp("DOCK_Effect_L").layer("Control Dock Effect").effect("Distance")("Slider"); //num
delta = Math.round(length(ArrowP,iconP));
linear(delta, 0, Dis, iconS*scaleF, iconS);
https://helpx.adobe.com/ru/after-effects/using/expression-basics.html
http://motionscript.com/
https://vk.com/ae_exp
Дополнительные скрипты
pt_ShiftLayers.jsx
https://aescripts.com/pt_shiftlayers/ (можно по цене 0)
Paste Multiple Keyframes
https://godownloads.net/paste-multiple-keyframes-2-0-6-for-after-effects-free-download/
Duik - работа с настройками графиков анимаций
https://rainboxlab.org/tools/duik/
ft-Toolbar2.jsxbin
https://www.youtube.com/watch?v=gGtmXYp7_Os
AdvancedCompGrids
https://aescripts.com/advanced-composition-grids/ (можно по цене 0)
изометрические сетки
zl_ExplodeShapeLayers
http://zofile.com/kstgky8155f0/zl_explodeshapelayers_v3.3.1_monter.rar
при работе с иллюстрации позволяет взрывать слои
RepositionAnchorPoint.jsx
motion 2 платный
привязки anсor point
Другие скрипты
https://www.premiumbeat.com/blog/free-after-effects-scripts/
Глава 3. Эффектные шейповые переходы в After effects
изучая эту главу, были разные варианты комбинаций эффектов, создавал все их по урокам,
собрал из них финальную композицию частично по готовым ключам во времени как в исходнике автора
Глава 4. Анимация текста
создавал текстовые анимации с разными эффектами, использовал скрипты
DecomposeText.jsx и
pt_ShiftLayers.jsx для ускорения работы
в анимации текстов по position, scale, rotation использовался скрипт колебаний
amp = .06;
freq = 2;
decay = 4;
n = 0;
if (numKeys > 0){
n = nearestKey(time).index;
if (key(n).time > time){
n--;
}
}
if (n == 0){
t = 0;
}else{
t = time - key(n).time;
}
if (n > 0){
v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{
value;
}
значения amp, freq, decay выносились в отдельный слой со слайдерами для управления этими значениями сразу для всех букв
изучение текстового слоя, текстовых аниматоров, создание animation preset
создал анимацию текста без ключевых кадров с помощью Amortype script
анимация отдельных букв, эта работа автора курса для изучения как создаются такие покадровые анимации, изучил её

На букве М использовались маски для разбивки на части буквы, еффект Linear Wipe эффект перехода.
На букве О использовался CC Jaws эффект зубчатой формы, привязка верхней части буквы о к нижней.
Буква У порезана масками на две части. Использовались эффекты СС Bend It на букве У.
Также эффект CC Jaws с Waves с имитацией спадающей краски.
В конце у буквы У добавлена анимация частиц с помощью плагина CC MR. Mercury.
Буква Ш разбита на отдельные шейпы, проанимированы по скейлу Y столбики с разными интервалами.
Добавлены экспрешены падения Ease and Wizz чтобы объекты падали о вымышленный пол.
// Ease and Wizz 2.0.4 : outBounce : All keyframes
// Ian Haigh (http://ianhaigh.com/easeandwizz/)
// Last built: 2013-07-05T11:46:51+10:00
// some defaults
var p = 0.81; // period for elastic
var a = 50; // amplitude for elastic
var s = 1.70158; // overshoot amount for "back"
function easeandwizz_outBounce(t, b, c, d) {
if ((t/=d) < (1/2.75)) { return c*(7.5625*t*t) + b }
else if (t < (2/2.75)) { return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b }
else if (t < (2.5/2.75)) { return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b }
else { return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b }
}
function easeAndWizz() {
var n = 0;
if (numKeys > 0) {
n = nearestKey(time).index;
if (key(n).time > time) { n-- }
}
try {
var key1 = key(n);
var key2 = key(n+1);
} catch(e) {
return null;
}
// determine how many dimensions the keyframes need
var dim = 1; // It's gotta have at least ONE dimension
try {
key(1)[1];
dim = 2;
key(1)[2];
dim = 3;
} catch(e) {}
t = time - key1.time;
d = key2.time - key1.time;
sX = key1[0];
eX = key2[0] - key1[0];
if (dim >= 2) {
sY = key1[1];
eY = key2[1] - key1[1];
if (dim >= 3) {
sZ = key1[2];
eZ = key2[2] - key1[2];
}
}
if ((time < key1.time) || (time > key2.time)) {
return value;
} else {
val1 = easeandwizz_outBounce(t, sX, eX, d, a, p, s);
switch (dim) {
case 1:
return val1;
break;
case 2:
val2 = easeandwizz_outBounce(t, sY, eY, d, a, p, s);
return [val1, val2];
break;
case 3:
val2 = easeandwizz_outBounce(t, sY, eY, d, a, p, s);
val3 = easeandwizz_outBounce(t, sZ, eZ, d, a, p, s);
return [val1, val2, val3];
break;
default:
return null;
}
}
}
(easeAndWizz() || value);
Буква H. Сначала анимируется Trim Path линий. Потом анимируется круг с нестандартным переходом в закгрулённые контуры.
Используется анимация СС Bend It эффектов и СС Jaws волнообразный эффект.
cоздал анимацию буквы А с волнообразным эффектом СС Jaws и добавил эффект Simple Choker, который скрывает часть контура
Глава 5. Анимированные Hud/UI-интерфейсы
Создание анимации интерфейса с эффектами.
Последовательно выполнял всю анимацию интерфейса по урокам автора, изучил тонкости создания интерфейсных анимаций и создания экспрэшенов. Интерфейс был создан в Illustraror GUI_Elements_Lesson.

Я импортировал его в After Effects, слои разбивал по композициям.
Создал анимации отдельных элементов, текстовые аниматоры по opacity, character offset.
Сохранение отдельных ключей анимаций для повторного использования.
Создание экспрэшена для генерации рандомного текста.
seedRandom(100,true); // запускает генератор рандомных чисел, счетчик стоит на месте по таймлайну и не меняется
random(10,100); // постоянно генерирует значения в диапозоне от 10 до 100
Math.round(value); // округление в большую строну
Math.floor(value); // округление в меньшую строну
// рандомный генератор чисел от 10 до 100 по таймлайну с интервалом постоянно каждые 0.4 секунды
number = 0.4;
r = Math.floor(time/number);
seedRandom(r,true);
a = random(10,100);
Math.round(a);
// рандомный генератор чисел от 10 до 100 по таймлайну с рандомным интервалом
g = Math.floor(time/0.2); // счетчик, который обновляется через интервал
seedRandom(g,true);
c = random(0.2,0.8);
number = c;
r = Math.floor(time/number);
seedRandom(r,true);
a = random(10,100);
Math.round(a);
зацикленная анимация отдельных ключей
loopOut("offset");
loopOut("cycle",4);
создание ключа Time Remap - остановка зацикленной анимации
loopOut(); // повторяется анимация с самого начала
loopOut("cycle",1); // повторяется анимация на два ключа
использование скрипта
Slim Panel - Script for After Effects
https://gumroad.com/l/TYAs
использование скрипта
Explode Shape Layers
loopOut("continue"); // продолжает анимацию с той же скоростью как на последнем ключе
value+time*(-50); // экспрэшен для rotation
линейная функция, которая изменяет параметр
анимация Wiggle Transform по position
и Trim Path по end
добавлен Repeater
анимация по position и scale
ee - открыть экспрэшен в таймлайне
создание линий указателей с текстом с помощью точек null, beam эффекта и экспрэшен
создание эффект Beam для линий с текстом,
Starting Thickness к Ending Thikness,
Inside color к Outside color
привязка линий к null объектам
создание экспрэшен для линий указателей
чтобы линия всегда была в горизонтальном положении создаётся
привязка координаты по y первой точки линии Null_Angle к кординате по y первой точки у Null_length
A_null = thisComp.layer("Null_Angle").transform.position;
[value[0],A_null[1]];
// создание привязки углового Null_Angle к главному
M_null = thisComp.layer("Master_Null").transform.position;
[value[0]+M_null[0],value[1]+M_null[1]];
// привязывается координата первой точки горизонтальной линии с учетом длины длины
A_null = thisComp.layer("Null_Angle").transform.position;
[value[0]+A_null[0],A_null[1]];
В уроке автор использовал Optical Flares, Particular эффект.
Устанавливал триальную версию, изучал возможности.
https://www.redgiant.com/products/trapcode-particular/
https://www.redgiant.com/products/trapcode-particular/free-trial-download
скачивается архив 780 mb
Trapcode Suite 15.1.8 Installer.exe
Список всех плагинов при установке:
3D Stroke
Echospace
Form
Horizon
Lux
Mir
Particular
Shine
Sound Keys
Starglow
Tao
Изучал возможности Trapcode Particular еффектов частиц.
С помощью плагина Optical Flares создал свой фон для ролика.
Глава 6. Персонажная анимация
Анимация походки персонажа. Выполнял всю анимацию самостоятельно, повторяя за автором курса по урокам.

Импорт в After Effects AI файл, созданный по слоям для отдельных частей тела персонажа.
Автор посоветовал почитать книгу "Аниматор: Набор для выживания" за 2002,
скачал за 2019 год
https://obuchalka.org/20190228107271/animator-nabor-dlya-vijivaniya-sekreti-i-metodi-sozdaniya-animacii-zd-grafiki-i-komputernih-igr-uilyams-r-2019.html
Аниматор: Набор для выживания
Использование скрипта duik_14.23 (такой был в уроке)
http://duduf.com/downloads/duik/old/
ставил также
Duik bassel.2
Создание рига
С помощью duik создавал кости, получал нули, которыми легче управлять в анимации, создавал связи опорных точек и все части тела собирал вместе. Затем создал контроллер и инверсивную кинематику,
она даёт возможность накладывать ограничения, например, руки изгабаются в правильном направлении не более опреленного угла.
Создание 16 кадров (кнопка n) с 4 отдельных фаз по 4 кадра, расположение по позиции и вращению опорных точек у костей по этим фазам,
использование скрипта Paste Multiple Keyframes для копирования ключений в разных слоях для ускорения работы.
Добавление промежуточных фаз c изображениями с урока и проработка правильных позиций частей тела в разные моменты движения.
Добавление лёгкой анимации челки на голове и небольшого вращения усов.
В анимации из 16 кадров с 4 фаз получилась быстрая походка,
растягивание 16 кадров на 24 кадра.
Выделяются все кадры во всех слоях и с зажатым alt тянется любой правый кадр с 16 до 24, растягивая пропорционально все кадры.
Проверка всех фаз и полуфаз на правильные позиции и повороны ног, рук, тела
создание замедления скорости в фазах, когда персонаж упирается ногами делая полный шаг.
Все ключи были линейными, в фазах полного шага добавлены ключи f9 easy ease, это создаёт замедление с линейных ключей.
Создание сглаженных движений рук с замедлениями, перемещая по кривым бизье позицию точки руки.
При нажатии alt+ctrl на точках создаются handle, которые позволяют делать кривые безье.
На всех кадрах кроме фаз на ключах нажимаются клик с ctrl дважды до круглых ключей для создания более сглаженной анимации. И также на ногах все линейные ключи выделяются ctrl круглые безье.
Добавление кисти, палитры и падения капли.
Добавлен рассинхрон анимации рук и ног, добавлено зацикливание всей анимации
loopOut();
Автор советовал также почитать книги британского аниматора, дизайнера Фрейзера Девидсона, курс персонажной анимации от Ромы Вышиванова и Антона Пинкевича.
Глава 7. Потрясающая корпоративная графика
Анимация флетовой инфографики.
Цель этой главы - изучение на готовом проекте как правильно создаются такие ролики.
Это последняя глава курса, она состоит из 9 часов видео уроков, в которых автор создавал этот ролик, много показывал, объяснял.
Мне было всё понятно, поэтому я не делал эту анимацию за автором, я проанализировал все композиции.
Этот ролик - работа автора курса, я могу делать такие анимации.

При открывании исходника ролика была ошибка.
After Effects error: There was an error processing this PDF document (1074397201)
After Effects error: cannot reopen an open file.
After Effects закрывался, это происходило из краша одного файла AI,
изучил это баг.
Ролик состоит из большого количества слоёв, композиции, вложенных композиции.
Чтобы исправить сбой я удалял отдельные слои, запускал анимацию и проверял в каком месте при добавлении слоёв происходит сбой.
Затем нашел слой, в котором возникает эта ошибка.
Ошибка оказалась во вложенных композициях где-то глубоко внутри, в файле AI, который не использовался и был в скрытом слое, удалив этот слой ошибки не стало.
Автор курса рассказывает как правильно организовывать структуру ролика, папок, вложенных подпапок, композиций чтобы не нагромождать все анимации в одной композиции, разбивать на подкомпозиции и легко понимать где что находится.
Иногда в файлах из Ai слои имеют лишние области, которые заполняют всё пространство и с ними неудобно работать,
для избавления от лишних слоёв используется скрипт SlimPanel клик по звёздочке с зажатым alt, пропадает лишняя рамка.
Для разбивки одного шейпа на отдельные слои используется скипт ExplodeShapeLayers, также SlimPanel может разбивать на слои, нажимая ctrl и иконку звёздочки.
Перемещение по ключевым кадрам j - назад, k - вперед
Разрезать слой ctrl+shift+d
Использование эффекта Grid Wipe, дублирование еффекта, анимирование параметра completion.
Создание зацикленных экспрешенов: loopOut("cycle,6"); количество ключей, которые повторять от последнего.