Выражения. Метод normalize After Effects

 

 

Метод normalize(vec) в Adobe After Effects в выражениях используется для нормализации вектора, то есть преобразования его длины к 1, сохраняя его направление. Используется для вычисления направления движения объекта, для управления ориентацией (например, поворот объекта в сторону другого). для равномерного распределения значений в анимации.

Список эффектов и не только After Effects
Выражения After Effects список

 

 

Нормализация позволяет отделить направление от скорости или интенсивности. Например, вы можете задать объекту движение в определённом направлении с фиксированной скоростью, умножив нормализованный вектор на нужный коэффициент.

——-
5

Выражение применяется для свойства Исходный текст Текстового слоя. Возвращается положение слоя

x = transform.position[0];
y = transform.position[1];

[x, y];

То же самое можно записать вот так для слоя Text 1. Выражение добавляется в свойство Исходный текст

x = thisComp.layer(«Text 1»).transform.position[0];
y = thisComp.layer(«Text 1»).transform.position[1];

[x, y];

То же самое можно записать вот так для слоя Text 2. Выражение добавляется в свойство Исходный текст

x = thisComp.layer(«Text 2»).transform.position[0];
y = thisComp.layer(«Text 2»).transform.position[1];

[x, y];

Нормализация Позиции слоя Text 1 . Выражение добавляется в свойство Исходный текст

x = normalize(thisComp.layer(«Text 1»).transform.position[0]);
y = normalize(thisComp.layer(«Text 1»).transform.position[1]);

[x, y];

Нормализация Позиции слоя Text 2 . Выражение добавляется в свойство Исходный текст

x = normalize(thisComp.layer(«Text 2»).transform.position[0]);
y = normalize(thisComp.layer(«Text 2»).transform.position[1]);

[x, y];

Расстояние и направление между анкерными точками двух слоев Выражение добавляется к свойству Исходный текст текстового слоя Text 2

thisComp.layer(«Text 1»).transform.position — transform.position;

Нормализация расстояния между анкерными точками слоев. Направление остается без изменения

normalize(thisComp.layer(«Text 1»).transform.position — transform.position);

Округление полученых нормализованных результатов с помощью toFixed(2)

direction = thisComp.layer(«Text 1»).transform.position — transform.position;
norm = normalize(direction);[norm[0].toFixed(2), norm[1].toFixed(2)];

Округление полученых нормализованных результатов с помощью Math.round

direction = thisComp.layer(«Text 1»).transform.position — transform.position;
norm = normalize(direction);[Math.round(norm[0] * 100) / 100, Math.round(norm[1] * 100) / 100];

——
1

Cлой будет двигаться к слою «Text 1» с постоянной скоростью 100, независимо от расстояния между ними.

dir = thisComp.layer(«Text 1»).transform.position — transform.position;
transform.position + normalize(dir) * 100 * time;

Если не использовать normalize то результат будет другой. Появится ускорение движения

dir = thisComp.layer(«Text 1»).transform.position — transform.position;
transform.position + dir * time;

——-
3

Управление вращением к цели

Если не использовать normalize то при движении слоя Text 1 слой Text 2 к свойству Поворот которого применено выражение будет поворачиваться

dir = thisComp.layer(«Text 1»).transform.position — transform.position;
radiansToDegrees(Math.atan2(dir[1], dir[0]));

Если использовать normalize то при движении слоя Text 1 слой Text 2 к свойству Поворот которого применено выражение будет поворачиваться и поворот будет более стабилен

dir = normalize(thisComp.layer(«Text 1»).transform.position — transform.position);
radiansToDegrees(Math.atan2(dir[1], dir[0]));

вычисляет угол поворота слоя, указывающего в сторону «Text 1», при этом длина направления нормализована. Это не обязательно, но может быть полезно для стабилизации значений.

———
3

Одновременно применить выражения к обеим слоям

Выражение можно применить к свойству поворот слоя Text 1

dir = normalize(thisComp.layer(«Text 2»).transform.position — transform.position);
radiansToDegrees(Math.atan2(dir[1], dir[0]));

А это выражение можно применить к свойству поворот слоя Text 2

dir = normalize(thisComp.layer(«Text 1»).transform.position — transform.position);
radiansToDegrees(Math.atan2(dir[1], dir[0]));

И оба слоя будут зависить друго от друга

——-
2

Имитация маятника

Выражение для свойства положение слоя Text 1

x = thisLayer.transform.position[0] + Math.sin(time * 2) * 500;
y = thisLayer.transform.position[1];

[x, y];

Выражение для свойства Поворот слоя Text 2

dir = normalize(thisComp.layer(«Text 1»).transform.position — transform.position);
radiansToDegrees(Math.atan2(dir[1], dir[0]));

———
4

Выражение для свойства Масштаб слоя Text 2. При изменении положения слоя Text 1 меняется масштаб слоя Text 2

dir = normalize(thisComp.layer(«Text 1»).transform.position — transform.position);
x = radiansToDegrees(Math.atan2(dir[1], dir[0]));
y = radiansToDegrees(Math.atan2(dir[1], dir[0]));

[x, y];