Режимы наложения масок

В Lottie Web маски являются частью системы композитинга, определяющей, как отдельные области слоя ограничивают видимость содержимого и как несколько масок взаимодействуют между собой. При экспорте из After Effects маски транслируются в JSON-структуру Lottie и интерпретируются движком рендеринга (canvas, svg или html) как последовательность операций над альфа-каналом слоя.

Каждая маска описывается набором параметров: путь (shape), режим наложения, инверсия, растушёвка и прозрачность. Именно режим наложения определяет базовую логику объединения нескольких масок на одном слое.

Маски в Lottie Web применяются последовательно к одному слою и формируют итоговую область видимости через поэтапное вычисление:

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

В JSON Lottie маска выглядит примерно так:

{
  "masksProperties": [
    {
      "mode": "a",
      "pt": { /* shape data */ },
      "o": { "k": 100 },
      "x": { "k": 0 }
    }
  ]
}

Где:

  • mode — режим наложения
  • pt — геометрия маски
  • o — opacity (в процентах)
  • x — expansion (расширение/сжатие маски)

Режим Add (a)

Режим Add является базовым и наиболее часто используемым. Он добавляет область маски к итоговой видимости слоя.

Поведение:

  • область маски становится видимой частью слоя
  • несколько масок в режиме Add объединяются по принципу объединения множеств (union)
  • итоговая область увеличивается с каждой новой маской Add

Формально можно рассматривать как:

Result = A ∪ B ∪ C ...

где A, B, C — области масок.

Особенности:

  • не удаляет уже существующую видимость
  • расширяет область отображения
  • используется по умолчанию при создании масок в After Effects

Режим Subtract (s)

Режим Subtract вычитает область маски из текущего результата. Это ключевой инструмент для создания «вырезов» внутри слоя.

Поведение:

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

Математическая модель:

Result = Base - Mask

При нескольких масках:

Result = (((Base - A) - B) - C)

Особенности:

  • может полностью «пробить» слой насквозь
  • часто используется для создания отверстий, окон, сложных форм
  • чувствителен к инверсии маски

Режим Intersect (i)

Режим Intersect оставляет только пересечение текущего результата и области маски.

Поведение:

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

Формально:

Result = A ∩ B ∩ C ...

Особенности:

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

Инверсия маски

Каждая маска в Lottie Web может быть инвертирована через параметр x.

Поведение инверсии:

  • область действия маски меняется на противоположную
  • вместо «внутри формы» применяется «вне формы»

Если обозначить маску как M, то:

Inverted = ¬M

В сочетании с режимами наложения инверсия радикально меняет результат:

  • Add + инверсия → расширение области вне формы
  • Subtract + инверсия → добавление области вместо вычитания
  • Intersect + инверсия → пересечение с внешней областью маски

Взаимодействие нескольких масок

В Lottie Web маски обрабатываются строго последовательно сверху вниз (в порядке массива masksProperties).

Алгоритм:

  1. берётся исходный слой
  2. применяется первая маска
  3. результат передаётся второй маске
  4. процесс повторяется до конца списка

Пример комбинирования:

  • Add → расширяет область
  • Subtract → вырезает из уже расширенной области
  • Intersect → дополнительно ограничивает результат

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


Приоритет и порядок вычислений

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

В отличие от булевых операций в CAD-системах, Lottie использует последовательную модель:

(((Layer ⊕ Mask1) ⊕ Mask2) ⊕ Mask3)

где ⊕ зависит от режима каждой маски.

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


Роль растушёвки и прозрачности

Помимо режима наложения, каждая маска содержит дополнительные параметры:

Opacity (o)

Определяет силу воздействия маски:

  • 100% — полное применение режима
  • 0% — маска фактически игнорируется
  • промежуточные значения создают частичное влияние

Expansion (x)

Расширяет или сжимает контур маски:

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

Feather (через shape-параметры)

Создаёт мягкие края:

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

Особенности реализации в Lottie Web

Рендеринг масок зависит от используемого движка:

Canvas renderer

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

SVG renderer

  • маски преобразуются в SVG <mask>
  • используются clipPath и mask-элементы
  • поведение ближе к нативной браузерной модели

HTML renderer

  • ограниченная поддержка
  • чаще используется fallback-композитинг

Булева логика масок в контексте Lottie

Режимы масок можно интерпретировать как набор булевых операций:

Режим Логика
Add Union
Subtract Difference
Intersect Intersection

Такая модель позволяет воспринимать маски как последовательные булевы преобразования над областью видимости слоя.


Типичные композиционные паттерны

В практике Lottie-анимаций часто встречаются устойчивые схемы:

Окно в форме

  • базовая маска Add
  • внутренний Subtract для выреза

Ограничение движения объекта

  • Intersect для жёсткого клипа
  • Add для зоны допустимого отображения

Многоуровневая сложная форма

  • цепочка Add → Subtract → Intersect
  • использование инверсии для обхода геометрических ограничений

Ограничения системы масок

Несмотря на гибкость, система имеет ряд технических ограничений:

  • отсутствие полноценной CSG-геометрии (constructive solid geometry)
  • зависимость от порядка массива
  • различия между SVG и Canvas рендером
  • ограниченная точность feather на сложных формах
  • возможные артефакты при пересечении большого числа масок

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