Выражения. Метод dot(vec1, vec2) After Effects
Метод dot(vec1, vec2) в выражениях After Effects используется для вычисления скалярного произведения двух векторов. Это полезно, когда нужно определить, насколько два вектора «смотрят» в одном направлении. В After Effects этот метод часто используется для работы с позициями, направлениями или для создания анимаций, зависящих от ориентации объектов.
Скалярное произведение можно использовать для вычисления косинуса угла между двумя векторами.
Список эффектов и не только After Effects
Выражения After Effects список
Вектор Направление на экране[1, 0] вправо[-1, 0] влево[0, 1] вниз[0, -1] вверх
cos(0) = 1 вектора совпадают
cos(90) = 0 вектора перпендикулярны
cos(180) = -1 вектора противоположны
Значение Интерпретация
1 Векторы смотрят в одном направлении
0 Векторы перпендикулярны
-1 Векторы в противоположных направлениях
——
6
Выражение для свойства Исходный Текст текстового слоя Text 1
dir1 = [1, 0]; // вправо
dir2 = thisComp.layer(«Text 2»).transform.position — transform.position;
dot(dir1, normalize(dir2));
Выражение для свойства Исходный Текст текстового слоя Text 1 Результат будет противоположный
dir1 = [1, 0]; // вправо
dir2 = transform.position — thisComp.layer(«Text 2»).transform.position;
dot(dir1, normalize(dir2));
Выражение для свойства Исходный Текст текстового слоя Text 1
dir1 = [1, 0]; // вправо
dir2 = thisComp.layer(«Text 2»).transform.position — thisComp.layer(«Text 1»).transform.position;
dot(dir1, normalize(dir2));
dir1 = [1, 0]; // вправо
dir2 = thisComp.layer(«Слой-фигура 1»).transform.position — thisComp.layer(«Слой-фигура 2»).transform.position;
dot(dir1, normalize(dir2));
——
2
Размытия при движении вниз. Выражение к свойству Размытость эффекта Быстрое размытие
vel = thisLayer.transform.position; // получаем вектор Позиция слоя к которому применено выражение
down = [0, 1]; // направление вниз
speedDown = dot(vel, down); // положительно, если движение вниз
ease(speedDown, 0, 720, 0, 100); // мягкий переход от 0 до 100 пикселей размытия
Можно записать и так
ease(dot(transform.position, [0, 1]), 0, 720, 0, 100); // мягкий переход от 0 до 100 пикселей размытия
time * 100; Выражение для анимации положения текстового слоя. Применил к свойству YПоложение слоя
———
3
Тоже самое, только размытие при движении в право
vel = transform.position;
right = [1, 0];
speedRight = dot(vel, right);
ease(speedRight, 0, 1000, 0, 70)
Можно написать и так
ease(dot(transform.position, [1, 0]), 0, 1000, 0, 100);
transform.position[0] + time * 100;
——-
4
transform.position + time * 100; //Анимация слоя Слой-фигура 1. Движется слева на право 100 пикселей в секунду
Выражение для свойства Непрозрачность. Как только Слой-фигура 1 распологается перпендикулярно относительно слоя Text он становится полностью непрозрачным
right = [1, 0];
target = normalize(thisComp.layer(«Слой-фигура 1»).transform.position — thisLayer.position);
facingTarget = dot(right, target);
if (facingTarget >= 0) {
100
} else {
0
}
———
4
transform.position + time * 100; //Анимация слоя Слой-фигура 1. Движется слева на право 100 пикселей в секунду
Выражение для свойства Поворот. Как только слой Слой-фигура 1 распологается перпендикулярно относительно слоя Text он начинает вращаться
right = [1, 0];
target = normalize(thisComp.layer(«Слой-фигура 1»).transform.position — transform.position);
facingTarget = dot(right, target);
if (facingTarget >= 0) {
transform.rotation + 180 * time;
} else {
0
}
——
5
transform.position + time * 100; //Анимация слоя Слой-фигура 1. Движется слева на право 100 пикселей в секунду
Выражение для свойства Цвет эффекта Заливка. Как только слой Слой-фигура 1 распологается перпендикулярно относительно слоя Text цвет слоя меняется на зеленый
right = [1, 0];
target = normalize(thisComp.layer(«Слой-фигура 1»).transform.position — transform.position);
facingTarget = dot(right, target);
if (facingTarget >= 0) {[0, 1, 0, 1]; //Зеленый цвет
} else {[1, 0, 0, 1]; //Красный цвет
}
——
5
/Анимация слоя Слой-фигура 1. Движется слева на право 100 пикселей в секунду
linear(time, [0, 1, 0, 1], [0, 0, 1, 1]);
Выражение для свойства Цвет эффекта Заливка. Как только слой Слой-фигура 1 распологается перпендикулярно относительно слоя Text цвет слоя меняется
right = [1, 0];
target = normalize(thisComp.layer(«Слой-фигура 1»).transform.position — transform.position);
facingTarget = dot(right, target);
if (facingTarget >= -0.4) {
ease(time/16, [0, 0, 1, 1], [0, 1, 0, 1]); //Цвет меняется от синего до зеленого
} else {[1, 0, 0, 1]; //Красный цвет