В Lottie структура векторной графики строится вокруг слоёв и групп, экспортируемых из After Effects в формат JSON. Элементы Fill и Stroke являются базовыми примитивами, определяющими визуальное заполнение и контур формы. В Lottie Web они интерпретируются как набор операций Canvas или SVG-рендеринга, в зависимости от выбранного режима.
Каждая shape-группа может содержать несколько операторов рендеринга, где порядок элементов критически влияет на итоговый результат. Fill и Stroke всегда привязываются к конкретному пути (path), а не существуют отдельно.
Fill представляет собой сплошное заполнение замкнутого контура
цветом. В Lottie JSON он описывается через объект fl (fill)
внутри группы shape.
Основные параметры Fill:
Цвет хранится как массив из трёх или четырёх значений от 0 до 1:
"c": { "k": [1, 0, 0] }
Здесь используется нормализованная RGB-модель, где значение 1 соответствует 255 в стандартной 8-битной палитре.
Прозрачность задаётся отдельно:
"o": { "k": 80 }
Это значение интерпретируется как процент непрозрачности.
Fill применяется только к замкнутым путям. Если контур не замкнут, Lottie Web автоматически не создаёт визуальную заливку, даже если параметр присутствует в JSON.
При наличии нескольких Fill в одной группе применяется правило наложения по порядку: каждый последующий Fill перекрывает предыдущий в рамках одной shape-группы.
Stroke отвечает за отрисовку линии вдоль заданного пути. В JSON он
представлен объектом st.
Ключевые параметры Stroke:
Цвет обводки задаётся аналогично Fill:
"c": { "k": [0, 0, 0] }
Прозрачность влияет на итоговую интенсивность линии и может анимироваться независимо от толщины.
Параметр w определяет ширину обводки в пикселях (или
условных единицах композиции).
"w": { "k": 10 }
В Lottie Web толщина интерпретируется с учётом масштабирования слоя. При трансформациях scale визуальная толщина может изменяться, если не применяется компенсация transform flattening.
Определяет форму концов линии:
1 — butt (прямой срез)2 — round (закругление)3 — square (удлинённый квадрат)Закруглённые окончания увеличивают визуальную длину сегмента за счёт радиуса.
Определяет поведение в точках соединения сегментов:
1 — miter (острый угол)2 — round (скругление)3 — bevel (срезанный угол)При использовании miter может применяться ограничение miter limit, предотвращающее чрезмерно длинные углы.
Stroke может содержать массив d, описывающий чередование
штрихов и пробелов.
Структура:
"d": [
{ "n": "d", "v": { "k": 10 } },
{ "n": "g", "v": { "k": 5 } }
]
Где:
d — длина штрихаg — длина промежуткаПри анимации этих параметров можно создавать эффекты движения штрихов вдоль пути, особенно в сочетании с offset.
В одной shape-группе Fill и Stroke могут сосуществовать одновременно. Порядок их объявления определяет результат визуального наложения.
Типичный порядок:
Если Fill размещён выше Stroke, он может визуально перекрывать обводку, особенно при высокой opacity.
В Lottie Web рендеринг выполняется последовательно, поэтому каждый слой влияет на буфер отрисовки.
Практически все свойства Fill и Stroke поддерживают ключевую анимацию
через k:
"o": {
"k": [
{ "t": 0, "s": [100] },
{ "t": 20, "s": [0] }
]
}
Таким образом можно анимировать:
Цвет хранится как массив, поэтому изменение происходит по каждому каналу:
"c": {
"k": [
{ "t": 0, "s": [1, 0, 0] },
{ "t": 30, "s": [0, 0, 1] }
]
}
Это позволяет реализовывать плавные переходы без дополнительных слоёв.
При работе через Canvas renderer:
При SVG renderer:
Fill и Stroke не существуют в изоляции от трансформаций слоя:
При сложных иерархиях групп возникает эффект каскадного умножения прозрачности, где итоговое значение рассчитывается как произведение всех уровней opacity.
При пересечении нескольких shape-групп с Fill и Stroke используется альфа-композитинг:
Некоторые режимы смешивания (blending modes) могут радикально изменять поведение Fill и Stroke, особенно при использовании multiply или screen.
В Lottie Web существуют ограничения по сравнению с After Effects:
Также важно учитывать, что экспорт из After Effects часто оптимизирует структуру shape-групп, объединяя Fill и Stroke в более простые конструкции, что влияет на читаемость JSON, но не на визуальный результат.