В формате Lottie анимация представляется через JSON-структуру, где
центральным элементом является массив слоёв. Каждый слой описывает
отдельную сущность сцены: векторную фигуру, текст, растровое изображение
или композицию. В основе лежит объект layers, внутри
которого элементы имеют типы shapes, precomp,
image, text и служебные разновидности.
Типичный слой содержит набор параметров:
ind, id)ty)ks)shapes или ссылка на
refId)ip,
op)Иерархия слоёв повторяет структуру Adobe After Effects, из которого чаще всего производится экспорт через Bodymovin. Однако прямое перенесение сложных проектов приводит к избыточной вложенности и разветвлённым деревьям зависимостей.
Основной источник усложнения структуры слоёв формируется на этапе композиции в исходном графическом проекте. Использование большого количества precomposition, корректирующих слоёв и вложенных групп приводит к увеличению глубины дерева.
На уровне JSON это выражается через:
precomp внутри precompshapesИзбыточность возникает также при использовании автоматической генерации слоёв, когда каждая логическая группа визуально корректируется отдельной композицией, хотя могла бы быть объединена.
Сведение слоёв представляет собой процесс уменьшения глубины иерархии за счёт объединения визуально и функционально связанных элементов.
На уровне структуры Lottie это проявляется в следующих преобразованиях:
shapes
контейнерprecomp там, где отсутствует
повторное использованиеПосле упрощения структура слоя становится более линейной, уменьшается количество уровней вложенности и сокращается число вычисляемых матриц трансформации при рендеринге.
Precomposition в Lottie представляет собой ссылочный слой,
указывающий на отдельный блок анимации внутри массива
assets. При избыточном использовании формируется сеть
зависимостей, усложняющая обход графа.
Упрощение достигается за счёт анализа повторяемости и автономности подкомпозиций. Если композиция используется единожды и не содержит уникальной логики, она может быть развернута в родительский слой.
Структурно это означает замену:
refId на inline layersassets элемента на прямое включение
содержимогоip
и opСнижение количества precomposition уменьшает число переходов при анимационном рендеринге и упрощает кеширование кадров в Lottie Web.
Shape-слои в Lottie состоят из дерева примитивов: gr
(group), fl (fill), st (stroke),
tr (transform). Часто они формируются с избыточной
вложенностью из-за группировки в исходном редакторе.
Упрощение структуры shape layers включает:
gr без логической
необходимостиОсобое влияние оказывает устранение дублирующихся свойств заливки и обводки, когда несколько слоёв используют идентичные параметры, но реализованы как отдельные объекты.
В JSON Lottie часто присутствуют элементы, не участвующие в финальной
визуализации. Это могут быть скрытые слои, отключённые через
ty или hd, а также активы без ссылок.
Очистка структуры включает:
assetsПодобная оптимизация уменьшает размер JSON и сокращает время парсинга в Lottie Web.
Каждый слой в Lottie имеет собственный блок трансформаций
ks, включающий позицию, масштаб, поворот и якорь. При
вложенных структурах возникает дублирование вычислений, когда несколько
уровней иерархии содержат собственные матрицы трансформации.
Сведение трансформаций достигается путём композиции матриц:
В результате уменьшается количество операций матричного умножения во время рендеринга и упрощается граф зависимостей слоёв.
Lottie Web интерпретирует JSON-анимацию в реальном времени, строя сценограф на основе слоёв и их связей. Глубина и сложность структуры напрямую влияют на:
Упрощённая структура слоёв снижает стоимость обхода дерева сцены и уменьшает количество промежуточных вычислений. Особенно заметен эффект при анимациях с большим числом keyframes и вложенных precomposition.
Использование линейных структур вместо глубокой иерархии позволяет уменьшить когнитивную и вычислительную сложность модели анимации. На уровне JSON это выражается в стремлении к плоской организации слоёв, где каждый элемент выполняет строго одну функцию без промежуточных абстракций.
Часто применяется подход, при котором:
Такая организация приводит к более предсказуемому поведению рендеринга и снижает вероятность накопления избыточных зависимостей внутри структуры анимации.