Родительские связи в 3D

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

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


Модель наследования трансформаций

Каждый слой в Lottie описывает собственные параметры:

  • position (X, Y, Z)
  • scale (X, Y, Z)
  • rotation (X, Y, Z)
  • anchor point
  • opacity

В 3D-режиме добавляется ось Z для всех пространственных свойств. При наличии родителя вычисление итоговой матрицы происходит по следующему принципу:

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

Итоговая позиция объекта определяется не напрямую, а через композицию всех трансформаций вверх по дереву.


Матрицы преобразований в 3D

Внутри движка Lottie используется стандартная 4×4 матрица преобразований. Она объединяет:

  • перенос (translation)
  • вращение (rotation)
  • масштабирование (scale)
  • перспективное искажение (в ограниченном виде)

Общая форма:

M_total = M_parent × M_local

Для цепочки вложенности:

M_total = M_root × ... × M_parent × M_child

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


Локальная система координат и якорная точка

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

В 3D-пространстве anchor point становится трёхмерным:

  • anchorX
  • anchorY
  • anchorZ

Именно относительно этой точки происходят вращения по осям X, Y и Z.

Если родительский слой смещается, дочерний не просто сдвигается, а полностью пересчитывает своё положение в пространстве с учётом локального anchor point.


Повороты в трёхмерной иерархии

В 3D Lottie поддерживает вращение вокруг трёх осей:

  • X rotation — наклон вперёд/назад
  • Y rotation — поворот влево/вправо
  • Z rotation — вращение в плоскости экрана

При наличии родительского слоя вращения становятся кумулятивными.

Особенность композиции вращений

В отличие от 2D, где rotation — скаляр, в 3D порядок вращений влияет на результат:

R_total = R_parent × R_child

Если родитель вращается по Y, а потом по X, дочерний слой наследует уже изменённую систему координат. Это приводит к эффекту «локального мира», где оси ребёнка перестают совпадать с глобальными.


Масштабирование и деформация иерархии

Scale в 3D наследуется так же, как и другие трансформации, но с важной особенностью: масштаб влияет на глубину сцены.

При вложенных слоях:

  • scale родителя изменяет расстояние между слоями
  • scale потомка дополнительно деформирует локальное пространство

Пример эффекта:

  • родитель scaleZ = 2 → объект визуально «приближается» или «отдаляется»
  • дочерний scaleX/Y/Z применяется уже в этой изменённой системе координат

Глубина и порядок отрисовки

В 3D-режиме Lottie не использует полноценный Z-buffer как игровой движок. Вместо этого применяется упрощённая система сортировки:

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

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


Камера и влияние на иерархию

Хотя Lottie не является полноценным 3D-движком, камера в композиции влияет на восприятие родительских связей.

Камера задаёт:

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

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


Композиции как родительские контейнеры

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

В 3D-режиме композиция становится:

  • глобальной системой координат
  • корнем матричного дерева
  • контейнером для наследования трансформаций

Каждая вложенная композиция фактически создаёт изолированную 3D-сцену, но при рендеринге они могут быть объединены через parent composition.


Проблемы наследования в сложных иерархиях

При глубокой вложенности 3D-слоёв возникают характерные эффекты:

  • накопление ошибок округления матриц
  • неожиданные смещения anchor point
  • инверсия осей при сильных вращениях
  • разрыв логики глубины при смешении Z и scale

Особенно заметны проблемы при комбинации:

  • rotationX + rotationY на каждом уровне иерархии
  • отрицательный scale у родителя
  • анимации anchor point в движении

Преобразования как единая цепь матриц

Внутренне вся система родительских связей сводится к одной операции:

LayerWorldMatrix = ParentWorldMatrix × LocalTransformMatrix

Это означает, что каждый слой не существует отдельно — его состояние всегда зависит от всей цепочки родителей.

Даже незначительное изменение в верхнем слое:

  • position
  • rotation
  • scale

пересчитывает всю поддеревянную структуру.


Влияние 3D-иерархии на анимацию

Анимация ключевых кадров в 3D-иерархии не изменяет принцип наследования, но изменяет динамику:

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

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


Инверсия и локальные оси

При сильных вращениях родителей происходит эффект инверсии локальных осей:

  • X может стать Y
  • Z может «развернуться» относительно камеры

Это приводит к тому, что дочерний слой начинает интерпретировать свои трансформации в изменённой системе координат.


Практическое поведение и ограничения

Система родительских связей в 3D Lottie остаётся упрощённой по сравнению с полноценными 3D-движками:

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

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