Cavalry

Cavalry занимает особое место среди инструментов процедурной и параметрической анимации благодаря архитектуре, ориентированной на гибкие зависимости, инстансинг и математическое управление формами. При работе с веб-доставкой анимаций ключевым сценарием становится экспорт сцен в формат Lottie JSON, который затем воспроизводится через Lottie Web в браузерной среде.

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

Архитектура преобразования анимации

Процесс конвертации можно рассматривать как серию этапов нормализации:

  • Сценические объекты преобразуются в слои (layers)
  • Процедурные зависимости разворачиваются в дискретные ключевые кадры
  • Геометрия переводится в векторные кривые Bezier
  • Математические выражения интерполируются в числовые значения
  • Таймлайн фиксируется в виде абсолютных значений кадров

Ключевая задача на этом этапе — устранение динамических зависимостей, которые не имеют прямого эквивалента в Lottie-спецификации.

Геометрия и векторные формы

Cavalry использует процедурные примитивы, которые могут изменяться в реальном времени: окружности с переменным радиусом, модифицируемые сплайны, генеративные повторения. При экспорте в Lottie такие объекты преобразуются в shape layers.

Особенности преобразования:

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

При этом теряется семантика процедурности: в Lottie остаётся только результат вычисления, но не сам алгоритм.

Интерполяция параметров

Система ключевых кадров Lottie требует явного описания значений во времени. В Cavalry же параметры часто вычисляются через выражения или зависимости.

При экспорте:

  • выражения заменяются на дискретные выборки значений
  • временная дискретизация зависит от заданного FPS
  • easing-функции преобразуются в bezier easing кривые Lottie
  • непрерывные зависимости превращаются в набор ключевых точек

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

Текстовые слои и шрифты

Текстовая система Cavalry включает расширенные возможности типографики: кернинг, трекинг, привязку к кривым, а также процедурные изменения строк.

При экспорте в Lottie:

  • текст может быть сохранён как текстовый слой или преобразован в кривые
  • шрифты должны быть доступны в окружении выполнения или заранее конвертированы
  • сложные текстовые деформации (path text, warp) часто фиксируются в векторной форме
  • динамические изменения строк сериализуются в ключевые кадры

В случае отсутствия поддержки шрифта поведение становится непредсказуемым в зависимости от рендера Lottie Web.

Маски и маттинг

Система масок Cavalry поддерживает сложные вложенные структуры и процедурные границы. В Lottie поддержка ограничена набором простых режимов:

  • alpha matte
  • alpha inverted matte
  • luma matte (в ограниченной реализации)

При экспорте:

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

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

Инстансы и повторяющиеся структуры

Cavalry активно использует инстансинг: один объект может быть многократно переиспользован с различными параметрами.

В Lottie такой подход отсутствует как концепция, поэтому:

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

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

Цветовые пространства и эффекты

Cavalry поддерживает работу с цветовыми пространствами и процедурными эффектами, включая градиенты, пост-обработку и математические фильтры.

При экспорте:

  • сложные эффекты (blur, glow, distortion) либо упрощаются, либо запекаются в растровые состояния
  • градиенты преобразуются в линейные или радиальные аналоги Lottie
  • цветовые трансформации фиксируются в ключевых кадрах
  • blending modes частично поддерживаются и часто приводят к расхождениям между рендерами

Lottie Web в браузере использует собственный рендеринг canvas/SVG, поэтому визуальные различия зависят от выбранного renderer-а.

Тайминг и синхронизация анимации

Система времени Cavalry основана на композиционном таймлайне, где элементы могут существовать в различных контекстах времени.

Lottie требует глобальной временной шкалы:

  • все композиции сводятся к единому timeline
  • offset-слои пересчитываются в абсолютные значения
  • nested compositions разворачиваются в линейную структуру
  • time remapping фиксируется в дискретных значениях

Это приводит к потере относительной временной логики и переходу к жестко заданному кадрированию.

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

При переносе сцен из Cavalry в Lottie неизбежно возникают ограничения, связанные с отсутствием эквивалентов:

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

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

Оптимизация структуры JSON

Выходной Lottie JSON часто требует пост-оптимизации:

  • удаление избыточных ключевых кадров
  • объединение идентичных слоёв
  • минимизация кривых интерполяции
  • сокращение precision числовых значений
  • дедупликация цветовых значений

Оптимизация напрямую влияет на производительность Lottie Web в браузере, особенно при больших композициях.

Поведение в рантайме

После загрузки Lottie-анимации в браузерной среде происходит интерпретация JSON и построение внутренней структуры анимации:

  • создаются слои canvas или SVG
  • формируются временные контроллеры
  • запускается система интерполяции
  • активируются event-based callbacks (если предусмотрены)

Особенности поведения:

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

Совместимость и расхождения

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

  • различия в антиалиасинге
  • округления координат
  • особенности интерполяции bezier-кривых
  • ограничения SVG-модели браузера
  • различия FPS между средами

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