SVG-рендерер в Lottie Web представляет собой DOM-ориентированный
механизм визуализации анимаций, основанных на JSON-структуре,
экспортируемой из Adobe After Effects через Bodymovin. В отличие от
Canvas-рендерера, SVG-вариант строит иерархию элементов прямо в
DOM-дереве браузера, используя нативные SVG-теги
(<path>, <g>,
<circle>, <rect>,
<mask>, <clipPath>), что делает
результат максимально совместимым с векторной природой исходной
графики.
Каждый Lottie-файл описывает композицию, состоящую из слоёв. SVG-рендерер преобразует эти слои в вложенную структуру DOM:
<svg><g> (группа)<g><path><fill>,
<stroke> (через атрибуты и стили)Основой работы становится постоянная синхронизация состояния JSON-анимации с атрибутами SVG-элементов. На каждом кадре обновляются transform-параметры, пути и стили.
Transform-цепочка включает:
positionscalerotationanchor pointЭти параметры конвертируются в матрицы преобразований SVG
(matrix()), применяемые к группам <g>,
что позволяет сохранять иерархическую структуру трансформаций,
аналогичную After Effects.
Shape layers в Lottie являются наиболее нативно поддерживаемым типом контента для SVG-рендерера. Основные элементы:
<path d="...">fill,
fill-opacitystroke,
stroke-width, stroke-linecap,
stroke-linejoinstroke-dasharray и stroke-dashoffsetОсобенность заключается в том, что Lottie заранее вычисляет кривые Безье в формате SVG path data. Это делает rendering относительно быстрым при умеренном количестве точек, но резко ухудшает производительность при сложных формах с тысячами сегментов.
SVG-рендерер реализует маскирование через стандартные SVG-механизмы:
<mask> — для альфа-масок<clipPath> — для отсечения по формеLottie преобразует AE-маски в DOM-структуры, где:
mask="url(#id)"Track mattes (альфа и лума) эмулируются через комбинацию масок и дополнительных групп. При этом лума-маттинг часто требует растеризации промежуточных слоёв или упрощённой симуляции, так как SVG не предоставляет нативной поддержки luminance-matte в том виде, как в After Effects.
Текст в SVG-рендерере Lottie является одной из наиболее проблемных областей. Он может быть реализован двумя способами:
Конвертация текста в кривые
SVG <text> элементы
В большинстве production-сценариев используется первый вариант, поскольку он гарантирует идентичность рендера с After Effects.
SVG поддерживает:
<linearGradient>)<radialGradient>)Lottie преобразует AE-gradient fills в SVG definitions внутри
<defs>.
Ограничения проявляются в следующих аспектах:
SVG-рендерер использует стандартные CSS свойства:
opacitymix-blend-modeОднако поддержка blend modes зависит от браузера. Часть режимов из After Effects (например, специфические overlay/soft light вариации) не всегда воспроизводится идентично.
При сложных композициях часто возникает деградация производительности из-за необходимости пересчёта blending на уровне рендеринга DOM.
SVG-рендерер не использует canvas-перерисовку, вместо этого изменяет атрибуты DOM-элементов:
transformd у <path>opacityЭто создаёт постоянную нагрузку на:
При большом количестве элементов возникает bottleneck не на уровне графики, а на уровне DOM mutation cost.
Корневой SVG использует viewBox, что обеспечивает:
preserveAspectRatioОднако при сложных композициях с большим количеством слоёв масштабирование может сопровождаться перерасчётом матриц трансформации, что влияет на производительность.
SVG-движок в Lottie имеет ряд фундаментальных ограничений, связанных с природой SVG и DOM.
After Effects 3D layers, камеры и освещение не поддерживаются. Все 3D-данные:
Большая часть эффектов After Effects не имеет SVG-эквивалента:
<filter>, с высокой
нагрузкой)SVG filters значительно снижают производительность при активной анимации.
SVG-рендерер плохо масштабируется при:
Причина — постоянные reflow/repaint операции в DOM.
Shape morphing реализуется через интерполяцию path data. Ограничения:
SVG filters поддерживаются частично:
feGaussianBlur — дорогостоящийfeColorMatrix — ограниченная точностьSVG-рендерер создаёт большое количество DOM-нода. Это приводит к:
destroy() в Lottie
APIОсобенно критично при SPA-приложениях, где анимации часто монтируются и размонтируются.
SVG-структура доступна для прямого DOM-доступа, что создаёт дополнительные возможности:
<g>Однако любое внешнее вмешательство может конфликтовать с внутренним state-machine Lottie, так как он ожидает полный контроль над атрибутами элементов.
SVG-рендерер потенциально улучшает доступность по сравнению с canvas:
aria-labelОднако Lottie-экспорт по умолчанию не формирует доступную структуру, и SVG остаётся декоративным элементом без семантики.
SVG-движок предпочтителен в сценариях:
Проблемные сценарии:
В таких случаях DOM overhead превышает стоимость canvas rasterization, и SVG-рендерер становится менее эффективным по сравнению с Canvas-режимом Lottie Web.