Выражения. Метод comp(name) в After Effects

 

 

В Adobe After Effects точка (.) в выражениях используется для доступа к свойствам и методам объектов в иерархии композиции. Это похоже на принципы объектно-ориентированного программирования, где точка разделяет объект и его элемент. Точка позволяет «переходить» по иерархии свойств.

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

comp(‘Композиция 13’);

comp(«Композиция 13»).layer(«<пустой текстовый слой>»).transform.rotation + time * 30;

effect(«Базовый 3D»)(1);

comp(«Композиция 13»).layer(«<пустой текстовый слой>»).effect(«Базовый 3D»)(1) + time * 30;

comp(«Композиция 13»).transform.rotation + time * 30; // Так писать нельзя. Пропущена ступень иерархии layer()

comp(«Композиция 13»).layer(«<пустой текстовый слой>»).time * 30;

comp(«Композиция 13»).time * 30; // Так писать нельзя. Пропущена ступень иерархии layer()

————-

В Adobe After Effects функция comp(name) используется в выражениях для доступа к конкретной композиции в проекте по её имени. Это позволяет ссылаться на свойства, слои или другие параметры указанной композиции

Предположим, у вас есть композиция с именем «Композиция 9», и вы хотите, чтобы позиция слоя в другой композиции следовала за позицией слоя «Собака» из «Композиция 9».

transform.position + time * 100; // Выражение для анимации Положения

comp(«Композиция 9»).layer(«Собака»).transform.position + 200;

comp(«Композиция 9») — обращается к композиции с именем «Композиция 9».
layer(«Собака») — обращается к слою с именем «Собака» внутри этой композиции.
ransform.position + 200 — получает значение позиции этого слоя.

Примените это выражение к свойству Position слоя в другой композиции, и он будет двигаться синхронно с «Собака».

//Для примера как можно использовать слой с Композицией для управления свойства слоя другой композиции

comp(«Композиция 9»).layer(«Собака»).transform.position + comp(«Композиция 9»).layer(«Композиция 10»).transform.position;

—————————-

Если вы хотите, чтобы непрозрачность (Opacity) слоя в другой композиции зависела от времени воспроизведения композиции «Композиция 6», можно написать:

comp(«Композиция 6»).layer(«Собака»).time > 2 ? 100 : 0;

Или написать вот так

if (comp(«Композиция 6»).layer(«Собака»).time > 3) {
100; // Полная непрозрачность после 3 секунд
} else {
0; // Полная прозрачность до 3 секунд
}

comp(«Композиция 6»).layer(«Собака»).time — возвращает текущее время в секундах
Условие > 2 ? 100 : 0 означает: если время в «Композиция 6» больше 2 секунд, непрозрачность будет 100%, иначе — 0%.
Это полезно для синхронизации анимации между композициями.

————

Допустим, вы хотите, чтобы масштаб (Scale) слоя увеличивался в зависимости от количества слоев в композиции «Композиция 11».

[comp(«Композиция 11»).numLayers * 10, comp(«Композиция 11»).numLayers * 10];

//Или написать вот так:

x = comp(«Композиция 11»).numLayers * 10;
y = comp(«Композиция 11»).numLayers * 10;

[x, y];

comp(«Композиция 11»).numLayers — возвращает общее количество слоев в композиции «Композиция 11».
Умножение на 10 создает пропорциональный масштаб (например, 5 слоев = масштаб 50%).
Примените это к свойству Scale, и масштаб будет зависеть от числа слоев.

x = comp(«Композиция 12»).numLayers * 30;
y = comp(«Композиция 12»).numLayers * 30;

[x, y];

[comp(«Композиция 12 композиция 2»).numLayers * 30, comp(«Композиция 12 композиция 2»).numLayers * 30];

———-

Точное имя композиции: Имя должно совпадать полностью, включая пробелы и регистр.
comp(name) особенно полезно в больших проектах с множеством вложенных композиций для централизованного управления.