facemodel

Об эффекте

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

Накладываемая на лицо текстура — это изображение в формате PNG, созданное из шаблона развёртки лицевой модели. Скачайте файл шаблона и заполните его.

Совет: разместите файл с текстурой в подпапке Textures папки, содержащей файлы маски.

Пример

JSON{ "preview": "Icon.png", "effects": [ { "name": "facemodel", "texture": "Textures/texture-file.png", "eyes": false, "mouth": false } ] }

Параметры эффекта

ПараметрОписание
nameНазвание эффекта. Должно быть "facemodel". Тип данных: string.
textureПуть к файлу текстуры либо набор параметров текстуры. Если текстура представляет собой статичное изображение, то укажите в параметре путь к .png файлу текстуры. Путь нужно указать относительно конфигурационного файла mask.json, например, "texture": "Textures/texture-file.png". Если необходимы сложные режимы наложения текстуры, манипуляции с alpha-каналом или анимация, то вам нужно объявить texture как набор параметров и использовать их для задания свойств наложения. Подробное описание см. в разделе Параметры texture. Если этот параметр не указан или при загрузке текстуры произошла ошибка, то будет использована «шахматная» бело-серая заливка. Тип данных: string или obj.
eyesУказывает, включает ли маска полигоны глаз (true) или нет (false). Значение по умолчанию: false. Тип данных: bool.
mouthУказывает, включает ли маска полигоны рта (true) или нет (false). Значение по умолчанию: false. Тип данных: bool.

Параметры texture

JSON{ "preview": "Icon.png", "effects": [ { "name": "facemodel", "texture": { "texture": "Textures/texture-file.png", "color": [ 1, 1, 1, 0.75 ], "blend_mode": "Multiply", "UseAlphaMask": true } } ] }
ПараметрОписание
textureПуть к .png файлу текстуры относительно конфигурационного файла mask.json, например, "texture": "Textures/texture-file.png". Если параметр texture не указан или при загрузке текстуры произошла ошибка, то будет использована «шахматная» бело-серая заливка. Тип данных: string.
blend_modeСпособ наложения текстуры на изображение за ней (фон). Допустимые значения: • "replace" — текстура непрозрачна, ее alpha-канал не используется. • "alpha" — смешивание фона с текстурой, используя alpha-канал текстуры. Это значение используется по умолчанию. • "add" — результирующий цвет пикселя в изображения равен сумме цвета фона и текстуры (alpha-канал не используется). • "addalpha" — результирующий цвет пикселя равен сумме фона и текстуры, при комбинировании учитывается значения alpha-канала текстуры. Также можно использовать один из следующих расширенных режимов наложения. Названия совпадают с терминами, которые обычно используют графические редакторы: • "Multiply" – умножение цветов; • "Lighten" – замена светлым; • "Darken" – замена тёмным; • "LinearLight" – линейное затемнение; • "Screen" – режим ширмы; • "Overlay" – перекрытие; • "SoftLight" – мягкий свет; • "SoftLight2" – мягкий свет (еще один вариант); • "ColorDodge" – осветление основы; • "ColorBurn" – затемнение основы; • "VividLight" – яркий свет; • "PinLight" – точечный свет; • "HardMix" – жесткий свет; • "Difference" – разница; • "Exclusion" – исключение; • "Hue" – цветовой тон; • "Saturаtion" – насыщенность; • "Color" – цветность; • "Luminosity" – свечение. Значение по умолчанию: "alpha". Тип параметра: string.
colorКоэффициенты RGBA, которые применяются к точкам накладываемой текстуры. Чем выше коэффициент, тем сильнее представлен цветовой канал текстуры. 0.0 соответствует отключению цветового канала, 1.0 — то же значение, которое используется в текстуре. Для усиления канала используйте значения больше 1.0. По умолчанию используется "color": [1.0, 1.0, 1.0, 1.0]. Тип данных: array<float>[4].
auto_mirrorУказывает, надо ли автоматически отрисовывать текстуру зеркально в случае, когда изображение поступает с задней камеры: true (отзеркаливать) или false (текстура остаётся без изменений). Параметр важен для текстур, содержащих логотип или текст. Тип данных: bool.
u_transformИспользуется для UV-преобразования координат текстуры. Значение по умолчанию: "u_transform": [1.0, 0.0, 0.0]. Примеры использования рассмотрены ниже в разделе Преобразование UV-координат. Тип данных: array<float>[3].
v_transformИспользуется для UV-преобразования координат текстуры. Значение по умолчанию: "v_transform": [0.0, 1.0, 0.0]. Примеры использования рассмотрены ниже в разделе Преобразование UV-координат. Тип данных: array<float>[3].
animationНабор параметров, описывающих анимацию накладываемой текстуры. Присутствие этих параметров в texture сигнализирует движку масок, что текстура является анимированной, то есть состоящей из нескольких кадров, хранящихся в отдельных .png файлах и воспроизводящихся последовательно. Настройки анимации описаны в разделе animation. Тип данных: obj.
Преобразование UV-координат
  • Зеркальное отображение относительно вертикальной оси: "u_transform" : [-1.0, 0.0, 1.0]

  • Зеркальное отображение относительно горизонтальной оси: "v_transform" : [0.0, -1.0, 1.0]

  • Поворот на 90 градусов по часовой стрелке: "u_transform" : [0.0, 1.0, 0.0], "v_transform" : [1.0, 0.0, 0.0]

  • Поворот на 180 градусов: "u_transform" : [-1.0, 0.0, 1.0], "v_transform" : [0.0, -1.0, 1.0]

  • Поворот на 90 градусов против часовой стрелки: "u_transform" : [0.0, -1.0, 1.0], "v_transform" : [-1.0, 0.0, 1.0]

Параметры animation

JSON{ "preview": "Icon.png", "effects": [ { "name": "facemodel", "texture": { "texture": "Textures/frame.png", "blend_mode": "Multiply", "UseAlphaMask": true, "animation": { "type": "once", "timeline": [ 50, 50, 50, 100 ] } } } ] }
ПараметрОписание
typeТип воспроизведения. Возможное значение — одна из следующих строковых констант: • "once" — однократное проигрывание, потом остановка на 1 кадре, или • "loop" – зацикленное проигрывание. По умолчанию используется "loop". Тип данных: string.
trigger_startСобытие для запуска анимации: • "mouth_open" — открытие рта; • "mouth_close" — закрытие рта; • "face_found" — начало трекинга лица; • "face_lost" — потеря трекинга лица; • "tap" — касание экрана. До запуска анимации триггером, текстура будет отображать первый кадр. Тип данных: string.
trigger_stopСобытие для остановки анимации: • "mouth_open" — открытие рта; • "mouth_close" — закрытие рта; • "face_found" — начало трекинга лица; • "face_lost" — потеря трекинга лица; • "tap" — касание экрана. Тип данных: string.
fpsЧисло кадров в секунду при отображении анимации, другими словами, это скорость воспроизведения. Тип данных: int.
timelineЕщё один параметр, который указывает скорость воспроизведения. Задаётся в виде массива, например, "timeline": [200, 100, 40], где каждый элемент — это длительность воспроизведения соответствующего кадра в миллисекундах. В приведённом примере первый кадр будет показан в течение 200 миллисекунд, второй — 100 миллисекунд, а третий и остальные кадры (если они есть) будут иметь длительность 40 миллисекунд. Число элементов должно быть равно или меньше количества кадров. Тип данных: array<int>.
timeline_exПараметр, который даёт возможность задать произвольный порядок следования кадров и указать длительность воспроизведения каждого кадра. См. примеры ниже. Обратите внимание, что при использовании параметра timeline_ex проигрывается только заданная последовательность кадров (при использовании timeline проигрываются все доступные кадры). Тип данных: array<int или array<int>[2]>.

Важно! Параметры fps, timeline и timeline_ex дают возможность настроить скорость воспроизведения различными способами. Используйте только один из них.

Задание кадров

Параметр texture указывает на PNG изображение первого кадра (в нашем примере, это "frame.png"). Последующие кадры должны иметь подобное имя файла и числовой индекс (1, 2, 3 и так далее). Например, анимация из примера выше, содержащая 4 кадра, будет состоять из такой последовательности файлов:

  • frame.png - Имя файла в texture, первый кадр.
  • frame1.png - Второй кадр.
  • frame2.png - Третий кадр.
  • frame3.png - Четвертый кадр.

При использовании параметров fps или timeline кадры воспроизводятся последовательно в порядке возрастания индексов. Чтобы переопределить порядок, используйте параметр timeline_ex.

Примеры использования timeline_ex

  • "timeline_ex" : [50, 50, 60] — проиграет 1-ый в течение 50 миллисекунд, 2-ой кадры — столько же, а 3-ий — в течение 60 миллисекунд. Остальные кадры проиграны не будут, так как при использовании timeline_ex проигрывается только заданная последовательность кадров (в этом его отличие от "timeline").

  • "timeline_ex" : [50, 50, [5, 100], 40, 40, [0, 900], 100] — проиграет следующую последовательность:

    • 1-й кадр, 50 миллисекунд;
    • 2-й кадр, 50 миллисекунд;
    • 6-й кадр, 100 миллисекунд (6-ому кадру соответствует индекс 5);
    • 7-й кадр, 40 миллисекунд (обратите внимание, что после прыжка на 6-ой кадр, проигрывание продолжится с 7-го кадра. При этом специально указывать 7-ой кадр не нужно);
    • 8-й кадр, 40 миллисекунд;
    • 1-й кадр, 900 миллисекунд (опять прыжок);
    • 2-й кадр, 100 миллисекунд (после прыжка на 1-ый кадр проигрывание продолжится со 2-го кадра).

Обратите внимание, что первый кадр имеет индекс 0, второй — 1, и так далее.

Ссылки по теме

Эффекты

Эффект patch