В PixiJS свойство blendMode отвечает за то, как один
спрайт или графический объект визуально взаимодействует с другими
объектами на канвасе. Оно определяет алгоритм смешивания цветов между
верхним и нижним слоями, аналогично тому, как работают слои в
графических редакторах.
Синтаксис установки blendMode:
sprite.blendMode = PIXI.BLEND_MODES.ADD;
Здесь PIXI.BLEND_MODES — это объект с предопределёнными
константами для различных режимов смешивания.
1. NORMAL (по умолчанию)
PIXI.BLEND_MODES.NORMAL — стандартное наложение. Верхний
объект полностью перекрывает нижний в зависимости от своей прозрачности
(alpha).
sprite.blendMode = PIXI.BLEND_MODES.NORMAL;
2. ADD (сложение цветов)
PIXI.BLEND_MODES.ADD складывает значения цветов верхнего и
нижнего объектов. Часто используется для световых эффектов, свечения или
огня. При этом яркие цвета усиливаются, а тёмные практически не
влияют.
sprite.blendMode = PIXI.BLEND_MODES.ADD;
3. MULTIPLY (умножение цветов)
PIXI.BLEND_MODES.MULTIPLY умножает значения цветов верхнего
и нижнего объектов. Итоговый цвет всегда темнее. Идеально подходит для
создания теней или затемнения фона.
sprite.blendMode = PIXI.BLEND_MODES.MULTIPLY;
4. SCREEN (экран)
PIXI.BLEND_MODES.SCREEN работает противоположно
MULTIPLY: делает изображение светлее. Часто используется
для наложения бликов, света и глянцевых эффектов.
sprite.blendMode = PIXI.BLEND_MODES.SCREEN;
5. OVERLAY (наложение)
PIXI.BLEND_MODES.OVERLAY комбинирует MULTIPLY
и SCREEN в зависимости от яркости нижнего слоя: тёмные
области затемняются, светлые осветляются. Используется для усиления
контраста и текстур.
sprite.blendMode = PIXI.BLEND_MODES.OVERLAY;
blendMode тесно связан с alpha объекта.
Даже при использовании ADD или SCREEN прозрачность влияет на
результат:
sprite.alpha = 0.5;
sprite.blendMode = PIXI.BLEND_MODES.ADD;
Полупрозрачный спрайт создаст менее интенсивный световой эффект по сравнению с полностью непрозрачным.
Если контейнер (PIXI.Container) содержит несколько
объектов с разными blendMode, PixiJS применяет смешивание
по объектам, а не ко всему контейнеру сразу.
const container = new PIXI.Container();
const sprite1 = PIXI.Sprite.from('image1.png');
sprite1.blendMode = PIXI.BLEND_MODES.ADD;
const sprite2 = PIXI.Sprite.from('image2.png');
sprite2.blendMode = PIXI.BLEND_MODES.MULTIPLY;
container.addChild(sprite1, sprite2);
Это позволяет создавать сложные визуальные эффекты без необходимости объединять слои вручную.
Некоторые режимы (ADD, MULTIPLY,
SCREEN) требуют больше вычислений на GPU, особенно на
мобильных устройствах. Для оптимизации:
batching объектов с одинаковым
blendMode.blendMode можно комбинировать с кастомными шейдерами.
При этом шейдер вычисляет цвета объекта, а blendMode
определяет, как эти цвета будут смешаны с фоном. Это открывает
возможности для создания динамического освещения, эффекта огня, магии
или других визуальных эффектов без изменения базовой текстуры.
ADD
или SCREEN.MULTIPLY.OVERLAY.NORMAL.blendMode в контейнер
для оптимизации рендеринга.Использование blendMode позволяет создавать визуально
насыщенные сцены в PixiJS с минимальными затратами ресурсов и высокой
гибкостью.