Поддержка 3D-трансформаций

В основе системы трансформаций Lottie лежит двумерная композиция, однако в структуре формата предусмотрен набор параметров, позволяющих эмулировать трёхмерное пространство. Эти возможности возникают на стыке данных из Adobe After Effects и способа интерпретации JSON-структуры библиотекой lottie-web.

3D в Lottie не является полноценным рендерингом трёхмерной сцены. Вместо этого используется математическое расширение 2D-трансформаций за счёт добавления осей вращения и перспективных коэффициентов. Каждый слой может хранить состояние в виде преобразования матрицы, дополненного компонентами вращения по осям X, Y и Z.


Источник 3D-данных в After Effects

Поддержка 3D-трансформаций начинается на уровне композиции в After Effects. При включении режима 3D Layer для слоя в структуру проекта добавляются дополнительные параметры:

  • вращение по оси X (X Rotation)
  • вращение по оси Y (Y Rotation)
  • вращение по оси Z (Z Rotation)
  • положение в трёхмерном пространстве (Position: x, y, z)
  • точка обзора камеры (Camera, если используется)

При экспорте через Bodymovin эти параметры сериализуются в JSON как дополнительные каналы анимации transform-объекта слоя.


Представление 3D в структуре Lottie JSON

В формате Lottie каждый слой содержит блок ks (keyframe transformations). Для 3D-слоёв структура расширяется следующим образом:

  • p — позиция, может содержать три компонента [x, y, z]
  • rx — rotationX
  • ry — rotationY
  • rz — rotationZ
  • or — orientation
  • a — anchor point

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


Проекция 3D-трансформаций в 2D-рендер

Lottie-web использует два основных типа рендеринга: SVG и Canvas. В обоих случаях 3D-данные приводятся к двумерной матрице преобразования.

Матрица преобразования

Каждый слой описывается матрицей:

M = T × Rz × Ry × Rx × S

где:

  • T — трансляция
  • Rz, Ry, Rx — матрицы вращения по осям
  • S — масштабирование

После вычисления итоговой матрицы происходит проекция в экранное пространство.

В случае Canvas-рендерера используется встроенная матрица CanvasRenderingContext2D.setTransform, а в SVG — модификация атрибута transform.


Ограниченность глубины и отсутствие Z-буфера

Несмотря на наличие Z-координаты, Lottie не выполняет:

  • сортировку по глубине в 3D-пространстве
  • скрытие поверхностей (hidden surface removal)
  • освещение и затенение
  • перспективное искажение геометрии в полном объёме

Z-значение используется только для смещения слоя вдоль виртуальной оси, которое затем учитывается при проекции камеры, если она присутствует в композиции.


Камера и её влияние на трансформации

При использовании камеры After Effects добавляет в экспорт дополнительные параметры:

  • положение камеры
  • точка интереса (Point of Interest)
  • фокусное расстояние (Zoom)

Эти значения преобразуются в матричную проекцию, влияющую на все 3D-слои композиции.

Камера в Lottie реализуется как дополнительное глобальное преобразование сцены. Все слои пересчитываются относительно её позиции, после чего результат приводится к 2D-плоскости.


Псевдоперспектива и визуальные искажения

Перспективный эффект в Lottie достигается за счёт комбинации:

  • изменения масштаба в зависимости от Z-позиции
  • смещения слоёв относительно виртуальной камеры
  • перспективной матрицы трансформации

При этом отсутствует полноценная перспектива рендеринга геометрии, как в WebGL. Эффект является математической аппроксимацией.


Особенности интерпретации 3D в lottie-web

Библиотека lottie-web при загрузке JSON-композиции анализирует структуру слоя и определяет наличие 3D-флагов. Если слой помечен как трёхмерный, активируется расширенный режим вычисления трансформаций.

Ключевые особенности обработки:

  • наличие 3dLayer флага в данных AE
  • расширенная интерпретация transform-ключей
  • объединение 3D-параметров в итоговую матрицу

При этом движок не переключается в другой режим рендеринга — остаётся SVG или Canvas.


Влияние на производительность

3D-трансформации значительно увеличивают вычислительную нагрузку за счёт:

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

На Canvas это проявляется в росте CPU-вычислений, на SVG — в увеличении количества DOM-операций при обновлении атрибутов transform.


Вращения по осям и порядок применения

Вращения применяются в строго определённой последовательности:

  1. Rotation X
  2. Rotation Y
  3. Rotation Z

Изменение порядка приводит к различным визуальным результатам из-за некоммутативности матричных операций. After Effects фиксирует порядок на этапе экспорта, и Lottie воспроизводит его без изменений.


Anchor point и 3D-вращение

Anchor point играет ключевую роль в восприятии 3D-вращений. Вращение всегда выполняется относительно точки якоря слоя.

При изменении anchor point:

  • меняется центр вращения
  • смещается траектория при анимации
  • изменяется визуальная глубина при использовании камеры

В 3D-слоях anchor point может содержать трёхмерные координаты, что дополнительно усложняет матричные вычисления.


Ограничения 3D-слоёв в Lottie

Несмотря на расширенную модель трансформаций, существуют системные ограничения:

  • отсутствует пересечение геометрии в 3D
  • нет физически корректного освещения
  • невозможна динамическая тень между слоями
  • не поддерживаются произвольные 3D-меши
  • отсутствует WebGL-ускорение сцены

3D в Lottie остаётся слоёной моделью с математической проекцией, а не полноценной 3D-средой.


Совместимость 3D-данных между SVG и Canvas

SVG-рендерер:

  • опирается на атрибут transform
  • использует строковые матрицы
  • ограничен точностью DOM-трансформаций

Canvas-рендерер:

  • использует матрицы контекста 2D
  • быстрее при сложных сценах
  • стабильнее при большом количестве слоёв

3D-трансформации в Canvas обычно дают более предсказуемый результат при сложной анимации камеры.


Практическая структура 3D-трансформаций в коде lottie-web

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

  • чтение keyframe-значений
  • интерполяция между кадрами
  • вычисление матриц Rx, Ry, Rz
  • добавление Z-смещения
  • применение камеры
  • финальная проекция в 2D

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


Взаимодействие 3D и выражений (Expressions)

Если в After Effects используются выражения, влияющие на 3D-параметры, они экспортируются в виде уже вычисленных значений. Lottie не интерпретирует expressions, а получает результат их выполнения.

Это означает, что:

  • динамическая логика теряется
  • остаются только числовые ключевые кадры
  • 3D-анимация становится детерминированной

Итоговая модель поведения 3D в Lottie

3D-трансформации формируют промежуточный слой между реальной 3D-геометрией и классической 2D-анимацией. Система основана на матричных преобразованиях, расширенных параметрами глубины и камеры, но ограничена плоским рендерингом и отсутствием трёхмерного движка.