Ограничения в работе с экспрессиями

Экспрессии, используемые в After Effects, не являются частью рантайма Lottie Web и в большинстве случаев не интерпретируются в браузере. При экспорте через bodymovin такие выражения либо вычисляются заранее и превращаются в набор ключевых кадров, либо полностью игнорируются, если не поддерживаются системой экспорта. Это фундаментальное ограничение определяет поведение всей анимационной логики при переносе из After Effects в веб-среду.

After Effects позволяет использовать JavaScript-подобный синтаксис экспрессий для управления параметрами анимации. В среде Lottie Web этот механизм отсутствует как исполняемая система. JSON-файл, который формируется после экспорта, не содержит интерпретатора и не способен выполнять код.

В результате:

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

Любая попытка перенести поведение вида:

value + Math.sin(time * 2) * 10

не сохраняет исходную динамику, если экспрессия не была предварительно «запечена» в ключевые кадры.

Преобразование экспрессий при экспорте

При использовании bodymovin происходит один из трёх сценариев обработки экспрессий:

1. Бейкинг в ключевые кадры

Наиболее распространённый вариант. Значения вычисляются в момент экспорта и записываются как набор keyframes.

Особенности:

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

2. Игнорирование выражений

Некоторые типы экспрессий не поддерживаются экспортёром. В этом случае:

  • параметр фиксируется в текущем состоянии слоя
  • анимация упрощается до статического значения
  • возможна потеря части поведения композиции

3. Частичная трансформация

Для ограниченного набора выражений может выполняться упрощённое преобразование:

  • линейные зависимости
  • базовые математические операции
  • простые временные функции

Однако даже в этом случае результат не эквивалентен оригинальной логике After Effects.

Ограниченность математического набора

Экспрессии After Effects опираются на JavaScript Math API, но Lottie не предоставляет полноценного аналога вычислительной среды.

В экспортированном JSON отсутствует возможность:

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

Поддерживаются только заранее вычисленные результаты. Даже если исходная экспрессия содержит:

linear(time, 0, 1, 0, 100)

в Lottie это превращается в массив значений, а не в функцию.

Отсутствие временного контекста

Ключевым ограничением является потеря динамического временного контекста.

В After Effects экспрессии используют:

  • time
  • frame
  • duration
  • comp() параметры

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

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

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

Ограничения работы со свойствами слоёв

Экспрессии 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-анимация не имеет:

  • сетевого доступа
  • файловой системы
  • API событий вне плеера

Следовательно:

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

Разрыв между дизайнерской и веб-реализацией

After Effects экспрессии часто используются как инструмент прототипирования сложной логики. Однако при переходе в Lottie происходит трансформация:

  • логика → данные
  • вычисления → значения
  • зависимости → ключевые кадры

Этот разрыв приводит к тому, что:

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

Ограничения интерполяции

Даже если экспрессии преобразованы в ключевые кадры, Lottie Web использует собственный механизм интерполяции:

  • линейная интерполяция
  • bezier-кривые (упрощённая модель easing)
  • отсутствие кастомных функций интерполяции из After Effects

Экспрессии, завязанные на нестандартные easing-функции, теряют точность воспроизведения. Особенно это заметно при:

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

Ограничения архитектуры JSON-модели

Формат Lottie JSON изначально не предназначен для хранения исполняемой логики. Он описывает:

  • состояния свойств
  • ключевые кадры
  • трансформации
  • маски и формы

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

Некоторые расширения и кастомные решения пытаются добавить поддержку выражений на уровне JavaScript-плееров, однако:

  • это не стандарт Lottie
  • несовместимо между реализациями
  • требует отдельного движка поверх lottie-web

Итоговая модель поведения экспрессий

Поведение экспрессий в экосистеме Lottie Web можно свести к трём состояниям:

  • вычислено заранее и зафиксировано
  • частично упрощено до ключевых кадров
  • потеряно при экспорте

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