Использование precomps

Precomposition (прекомпозиции) в контексте After Effects представляет собой вложенную композицию, которая содержит собственный набор слоёв, анимаций и таймлайнов. При экспорте через Bodymovin структура сохраняется в виде вложенных сущностей внутри JSON, используемого библиотекой Lottie Web.

Внутренняя модель Lottie опирается на иерархию, где сцена может включать ссылки на другие композиции, что формирует древовидную структуру анимации. Это ключевой механизм переиспользования и логического разделения сложных сцен.


Представление precomps в JSON-структуре Lottie

При экспорте композиции Bodymovin формирует два основных уровня:

  • Основная композиция (layers)
  • Вложенные композиции (assets)

Precomp обычно попадает в assets как объект с уникальным идентификатором и собственным массивом слоёв.

{
  "id": "comp_precomp_1",
  "layers": [
    {
      "ty": 4,
      "nm": "Shape Layer inside Precomp"
    }
  ]
}

В основной композиции такой precomp подключается через слой с типом композиции:

{
  "ty": 0,
  "refId": "comp_precomp_1",
  "nm": "Precomp Layer"
}

Ключевые поля:

  • ty: 0 — слой-композиция
  • refId — ссылка на объект внутри assets
  • id — идентификатор precomp в списке ассетов
  • layers — внутренние слои композиции

Механизм рендеринга precomps в Lottie Web

Lottie Web обрабатывает precomps как отдельные мини-композиции, которые рендерятся в рамках родительского контекста.

При построении сцены происходит:

  1. Разбор основной композиции
  2. Обнаружение слоя с refId
  3. Поиск соответствующего объекта в assets
  4. Рекурсивная отрисовка вложенной композиции
  5. Применение трансформаций родительского слоя

Иерархия трансформаций сохраняется, включая:

  • позицию
  • масштаб
  • вращение
  • opacity
  • anchor point

Таким образом, precomp ведёт себя как единый слой, но фактически является контейнером сложной структуры.


Иерархическая композиция и вложенность

Precomps позволяют строить многоуровневые структуры:

Main Composition
 ├── Shape Layer
 ├── Precomp A
 │     ├── Shape Layer A1
 │     ├── Precomp B
 │     │     ├── Shape Layer B1
 ├── Image Layer

Lottie Web рекурсивно проходит по этой структуре, создавая независимые графы анимации для каждого уровня.

Особенность заключается в том, что каждый уровень сохраняет собственное локальное пространство координат, которое затем преобразуется в глобальное.


Использование precomps для оптимизации структуры

Precomps выполняют роль логических модулей, позволяя разделять сложную анимацию на изолированные блоки.

Основные сценарии применения:

  • группировка связанных слоёв
  • повторное использование анимационных блоков
  • изоляция временных шкал
  • упрощение экспорта из After Effects

При работе с Lottie Web это влияет на:

  • читаемость JSON
  • управляемость анимации
  • повторное использование компонентов

Производительность и влияние вложенных композиций

Каждый precomp увеличивает глубину рекурсивного рендеринга. Lottie Web при отрисовке:

  • создаёт отдельные контексты вычисления трансформаций
  • поддерживает отдельные таймлайны
  • синхронизирует время между вложенными слоями

Проблемные аспекты:

  • глубокая вложенность увеличивает нагрузку на CPU
  • большое количество precomps может замедлить первый рендер
  • сложные иерархии усложняют garbage collection в runtime

Оптимизация достигается через:

  • минимизацию глубины вложенности
  • объединение статичных слоёв
  • использование flatten-структур там, где не требуется логическое разделение

Особенности интерполяции и таймлайна

Каждый precomp имеет собственную временную шкалу, но синхронизированную с родительской композицией.

Внутренний time mapping включает:

  • смещение времени относительно родителя
  • наследование скорости воспроизведения
  • поддержку time remapping (если задан в After Effects)

При этом Lottie Web не всегда полностью поддерживает сложные time-remap конструкции, что может приводить к упрощению поведения анимации внутри precomp.


Масштабирование и трансформации precomps

Precomp-слой ведёт себя как единый объект, но его внутренняя структура сохраняет независимые координаты.

Порядок трансформаций:

  1. локальная анимация внутри precomp
  2. преобразование координат в родительскую систему
  3. применение трансформаций слоя-прокси

Особое внимание:

  • anchor point precomp влияет на всю вложенную систему
  • scale родителя масштабирует всю внутреннюю композицию
  • rotation применяется как матричное преобразование ко всей иерархии

Взаимодействие precomps с выражениями и эффектами

В Lottie Web поддержка expressions ограничена, однако при экспорте некоторые результаты выражений «запекаются» в ключевые кадры внутри precomp.

Это приводит к следующим особенностям:

  • динамические зависимости теряются
  • precomp становится статическим набором ключей
  • сложные expressions преобразуются в baked animation

Эффекты, применённые к precomp в After Effects, могут:

  • быть упрощены до трансформаций
  • либо проигнорированы при экспорте
  • либо перенесены на уровень отдельных слоёв

Управление precomps через Lottie Web API

Lottie Web предоставляет доступ к управлению анимацией, включая доступ к структуре слоёв, но precomps остаются частью внутреннего дерева.

Пример загрузки композиции:

const animation = lottie.loadAnimation({
  container: document.getElementById('anim'),
  renderer: 'svg',
  loop: true,
  autoplay: true,
  path: 'animation.json'
});

Доступ к структуре:

animation.renderer.elements

Каждый элемент может содержать ссылку на вложенные элементы, соответствующие precomp-структурам.


Сценарии использования в реальных проектах

Precomps особенно эффективны в следующих архитектурных паттернах анимации:

  • UI-анимации с повторяющимися компонентами (иконки, кнопки, бейджи)
  • сложные сценические анимации с несколькими независимыми объектами
  • анимации персонажей, где части тела вынесены в отдельные композиции
  • циклические визуальные эффекты с переиспользуемыми блоками

Типичные проблемы при экспорте precomps

При переносе из After Effects часто возникают ограничения:

  • потеря 3D-слоёв внутри precomp
  • некорректная передача blending modes
  • упрощение масок
  • отсутствие некоторых эффектов

Lottie Web интерпретирует результат как статическую структуру слоёв с ограниченной семантикой композиции.


Архитектурная роль precomps в сложных анимациях

Precomps выступают как модульная система внутри единого JSON-графа.

С точки зрения Lottie:

  • каждый precomp — изолированный граф анимации
  • связи между ними реализованы через ссылки refId
  • рендеринг выполняется через рекурсивный обход дерева

Такая модель позволяет строить масштабируемые анимационные сцены без необходимости плоской структуры слоёв.