Экспрессии, используемые в After Effects, не являются частью рантайма Lottie Web и в большинстве случаев не интерпретируются в браузере. При экспорте через bodymovin такие выражения либо вычисляются заранее и превращаются в набор ключевых кадров, либо полностью игнорируются, если не поддерживаются системой экспорта. Это фундаментальное ограничение определяет поведение всей анимационной логики при переносе из After Effects в веб-среду.
After Effects позволяет использовать JavaScript-подобный синтаксис экспрессий для управления параметрами анимации. В среде Lottie Web этот механизм отсутствует как исполняемая система. JSON-файл, который формируется после экспорта, не содержит интерпретатора и не способен выполнять код.
В результате:
Любая попытка перенести поведение вида:
value + Math.sin(time * 2) * 10
не сохраняет исходную динамику, если экспрессия не была предварительно «запечена» в ключевые кадры.
При использовании bodymovin происходит один из трёх сценариев обработки экспрессий:
Наиболее распространённый вариант. Значения вычисляются в момент экспорта и записываются как набор keyframes.
Особенности:
Некоторые типы экспрессий не поддерживаются экспортёром. В этом случае:
Для ограниченного набора выражений может выполняться упрощённое преобразование:
Однако даже в этом случае результат не эквивалентен оригинальной логике After Effects.
Экспрессии After Effects опираются на JavaScript Math API, но Lottie не предоставляет полноценного аналога вычислительной среды.
В экспортированном JSON отсутствует возможность:
Поддерживаются только заранее вычисленные результаты. Даже если исходная экспрессия содержит:
linear(time, 0, 1, 0, 100)
в Lottie это превращается в массив значений, а не в функцию.
Ключевым ограничением является потеря динамического временного контекста.
В After Effects экспрессии используют:
timeframedurationcomp() параметрыВ Lottie Web отсутствует механизм, который позволяет выражению реагировать на текущий кадр. Вся временная динамика заменяется интерполяцией между ключевыми кадрами.
Это приводит к следующим последствиям:
Экспрессии After Effects часто обращаются к другим слоям:
thisComp.layer("Controller").effect("Slider")("Slider")
В Lottie Web подобная модель данных отсутствует. JSON-структура не содержит живых ссылок между объектами.
Все связи преобразуются в:
Это означает:
After Effects поддерживает полноценные условия:
if (value > 50) {
100
} else {
0
}
В Lottie Web такие конструкции не существуют в исполняемом виде. После экспорта:
Таким образом, динамическая логика заменяется статической развёрткой поведения.
Функции вроде:
wiggle()noise()не имеют прямого эквивалента в Lottie Web.
Если такие выражения используются, возможны варианты:
Особенность заключается в том, что отсутствие runtime-рандомизации делает результат детерминированным. Даже если визуально шум присутствует, он становится заранее рассчитанным.
Экспрессии After Effects могут опосредованно зависеть от:
В Lottie Web отсутствует доступ к любым внешним источникам данных. JSON-анимация не имеет:
Следовательно:
After Effects экспрессии часто используются как инструмент прототипирования сложной логики. Однако при переходе в Lottie происходит трансформация:
Этот разрыв приводит к тому, что:
Даже если экспрессии преобразованы в ключевые кадры, Lottie Web использует собственный механизм интерполяции:
Экспрессии, завязанные на нестандартные easing-функции, теряют точность воспроизведения. Особенно это заметно при:
Формат Lottie JSON изначально не предназначен для хранения исполняемой логики. Он описывает:
Отсутствие исполняемого слоя означает, что экспрессии не могут быть частью рантайм-модели без внешнего интерпретатора.
Некоторые расширения и кастомные решения пытаются добавить поддержку выражений на уровне JavaScript-плееров, однако:
Поведение экспрессий в экосистеме Lottie Web можно свести к трём состояниям:
Результирующая анимация становится не вычисляемой системой, а набором данных, воспроизводимых в браузере без возможности пересчёта логики.