Выражения. Метод 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]; //Красный цвет