Режимы наложения в Lottie Web представляют собой механизм визуального смешивания слоёв, при котором пиксели одного слоя взаимодействуют с пикселями другого слоя по заданной математической формуле. В контексте анимации это используется для создания глубины, свечения, теней и сложных композитных эффектов без необходимости в растровых предрасчитанных изображениях.
В Lottie такие режимы описываются на уровне структуры композиции и интерпретируются рендерером (Canvas или SVG). В JSON-структуре анимации слой может содержать параметр смешивания, который определяет способ композитинга. При рендере этот параметр преобразуется в соответствующую графическую операцию браузера.
В Lottie Web существует два основных пути отрисовки:
Каждый из них реализует режимы наложения по-своему.
В Canvas используется стандартное свойство:
ctx.globalCompositeOperation
Это низкоуровневый API HTML5 Canvas, определяющий способ объединения текущего слоя с уже нарисованным содержимым.
В SVG подход иной: используются фильтры:
<feBlend mode="multiply"/>
<feBlend mode="screen"/>
или комбинации filter primitives.
Lottie абстрагирует эти различия и предоставляет единый формат описания в JSON, где слой содержит параметр смешивания, который затем транслируется в конкретную реализацию рендерера.
Режим умножения относится к категории затемняющих режимов смешивания. Его математическая модель основана на поканальном умножении значений цветов.
В упрощённом виде:
Result = Base × Blend
Каждый цветовой канал (R, G, B) нормализуется в диапазон от 0 до 1, после чего перемножается.
В анимациях Multiply часто используется для:
ctx.globalCompositeOperation = "multiply";
При использовании Canvas важно учитывать, что порядок слоёв критичен: Multiply применяется к уже отрисованному буферу. В сложных композициях это может приводить к различиям между SVG и Canvas версиями.
Режим Screen является противоположностью Multiply и относится к группе осветляющих режимов.
Математическая модель:
Result = 1 - (1 - Base) × (1 - Blend)
В Lottie Screen применяется для:
ctx.globalCompositeOperation = "screen";
Screen приводит к нелинейному осветлению изображения. При наложении нескольких слоёв эффект усиливается экспоненциально, что часто используется для создания «неонового» визуального стиля.
Overlay представляет собой комбинированный режим, который объединяет поведение Multiply и Screen в зависимости от яркости базового слоя.
Если базовый пиксель темнее 50% серого:
Result = 2 × Base × Blend
Если светлее:
Result = 1 - 2 × (1 - Base) × (1 - Blend)
Overlay сохраняет текстурную структуру изображения, одновременно повышая контрастность.
Overlay часто применяется для:
ctx.globalCompositeOperation = "overlay";
В Lottie-анимации режим наложения слоя задаётся числовым или перечислимым значением внутри описания слоя. Обычно используется поле, связанное с blending mode.
Пример упрощённой структуры:
{
"layers": [
{
"ty": 4,
"nm": "Shape Layer",
"bm": 1
}
]
}
Где:
bm — blending modeВ разных версиях интерпретация может варьироваться, но логика сводится к маппингу:
Рендерер Lottie Web интерпретирует это значение и устанавливает соответствующий режим композитинга.
При отрисовке слоя движок проходит несколько этапов:
При Canvas-рендере ключевая операция выглядит так:
ctx.save();
ctx.globalAlpha = layer.opacity;
ctx.globalCompositeOperation = layer.blendMode;
drawLayer(layer);
ctx.restore();
SVG-рендерер вместо этого создаёт фильтровую цепочку, что позволяет сохранять векторную природу элементов.
globalCompositeOperationРазличия особенно заметны в Overlay, где цветовые переходы могут интерпретироваться по-разному из-за различий в цветовых пространствах и алгоритмах фильтрации.
Режимы Multiply, Screen и Overlay относятся к дорогим операциям композитинга, особенно при большом количестве слоёв.
Основные факторы влияния:
При Canvas-рендере каждая операция blendMode может вызывать дополнительные пересчёты пикселей, особенно при ретина-дисплеях.
Lottie Web в большинстве браузеров работает в sRGB пространстве. Это означает, что все вычисления blending modes происходят в нелинейном цветовом пространстве, что влияет на визуальный результат.
Multiply:
Screen:
Overlay:
Alpha-канал влияет на итоговый результат независимо от режима наложения. В Lottie Web порядок применения обычно следующий:
Это означает, что даже при сильных режимах типа Screen прозрачность может существенно ослаблять эффект.
Lottie поддерживает precomposition (вложенные композиции), где blending modes могут применяться на уровне группы слоёв.
В таких случаях:
Это может приводить к различиям между «ожидаемым» визуальным результатом и фактическим, особенно при сложных цепочках Overlay внутри precomp.
При переносе анимаций из After Effects в Lottie:
Multiply и Screen обычно совпадают наиболее стабильно, Overlay чаще всего требует визуальной проверки из-за сложной логики смешивания.
Blending modes в Lottie являются некоммутативными операциями. Порядок слоёв напрямую влияет на результат.
Изменение последовательности:
Особенно критично для Overlay, где значение зависит от относительной яркости базового слоя, который определяется порядком рендеринга.