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