Механизм экспрессий в Adobe After Effects представляет собой полноценную JavaScript-подобную среду вычислений, встроенную в композицию. Он позволяет привязывать свойства слоёв к формулам, данным, времени и другим слоям в реальном времени. Однако при экспорте анимации через Bodymovin в формат Lottie большая часть этой логики теряется, поскольку Lottie Web не является интерпретатором After Effects Expression Engine.
В результате любые выражения, использующие динамическое вычисление значений, в итоговом JSON либо полностью игнорируются, либо преобразуются в статические ключевые кадры. Это фундаментальное ограничение определяет необходимость альтернативных подходов к реализации поведения, которое в After Effects выглядит как “живое”.
Lottie Web работает как интерпретатор заранее рассчитанных анимационных данных. В основе формата лежит декларативная модель: ключевые кадры, интерполяции, кривые Безье, маски и трансформации.
Выражения After Effects не попадают в эту модель по следующим причинам:
Любая логика, завязанная на времени композиции или внешних параметрах, должна быть заранее преобразована в числовые значения.
Основной подход замены выражений — запекание (baking) результата в ключевые кадры до экспорта.
В After Effects это достигается несколькими способами:
После экспорта Bodymovin получает уже готовую траекторию изменения значений.
Пример логики:
wiggle(2, 30) заменяется на
псевдослучайную последовательность ключевых кадровТакой подход увеличивает размер JSON, но гарантирует совместимость с Lottie Web.
Часть выражений используется для параметризации анимации: управление скоростью, амплитудой, зависимость от слайдеров. В Lottie Web подобные сценарии заменяются управляемыми значениями JSON и API-методами.
Ключевая стратегия — перенос логики из After Effects в JavaScript.
После загрузки анимации возможна подмена значений через модификацию JSON перед инициализацией:
Такой подход позволяет имитировать выражения вида:
Lottie Web предоставляет набор методов, которые частично компенсируют отсутствие expression engine.
play(), pause(), stop()goToAndStop(frame, isFrame)goToAndPlay(frame, isFrame)setSpeed(value)Эти методы позволяют заменить выражения, завязанные на time progression, например:
time * factorХотя Lottie не поддерживает выражения событийного типа, поведение можно реализовать через:
completeloopCompleteenterFrameНа их основе строятся внешние контроллеры, которые заменяют expression-based triggers.
Многие выражения After Effects фактически являются математическими функциями. Их можно полностью перенести в JavaScript-слой, управляющий Lottie-анимацией.
linear, ease,
clamp)random, noise)time,
posterizeTime)В JavaScript это реализуется через:
Одним из самых часто используемых выражений After Effects является
wiggle. В Lottie Web оно недоступно, но может быть
воспроизведено через внешнее управление transform-параметрами.
Подход:
Основные методы генерации:
Таким образом достигается эффект живого движения без экспорта выражений.
В After Effects выражения часто используют ссылки на другие слои:
Lottie не поддерживает прямые ссылки между слоями, поэтому применяется один из подходов:
setSubframe и обновление
transformВыражения часто используются для создания адаптивных форм. В Lottie это заменяется заранее подготовленными морфинг-кривыми.
Методы:
Каждое состояние вычисляется заранее и переключается через API или keyframes.
Expression-based логика часто сводится к условным конструкциям:
В Lottie это заменяется системой состояний:
Переключение происходит через:
Некоторые эффекты After Effects можно имитировать через структуру слоёв:
Такой подход позволяет сохранять визуальную сложность без динамической логики.
Замена выражений на альтернативные механизмы приводит к ряду системных компромиссов:
При этом достигается полная предсказуемость поведения анимации в браузере, что является ключевым преимуществом Lottie Web.
В крупных проектах на Lottie Web применяется несколько устойчивых архитектурных решений:
After Effects:
value + time * speedLottie Web:
setSpeedAfter Effects:
random(seed)Lottie Web:
After Effects:
thisComp.layer("X").transform.positionLottie Web:
After Effects:
if (value > threshold)Lottie Web:
Экосистема Lottie, включая инструменты предпросмотра и оптимизации, играет ключевую роль в устранении проблем выражений. На этапе экспорта возможны:
Итоговый результат всегда ориентирован на статическую структуру данных.
Вместо expression-driven логики формируется альтернативная модель:
Такая архитектура полностью заменяет expression engine After Effects в рамках возможностей Lottie Web, сохраняя визуальную сложность при отказе от runtime вычислений внутри анимационного JSON.