В PixiJS маскирование объектов реализуется с помощью
свойства mask, которое позволяет скрывать части спрайтов
или контейнеров на основе формы другого графического объекта. Наиболее
гибкий и часто используемый подход — использование спрайта с
альфа-каналом в качестве маски. Альфа-канал определяет
прозрачность каждого пикселя, где полностью прозрачные участки делают
объект невидимым, а непрозрачные — видимым.
Объект маски Маска может быть любым экземпляром
PIXI.Sprite, PIXI.Graphics или
PIXI.Container. В случае со спрайтом с альфа-каналом
прозрачные участки становятся «отверстиями», а непрозрачные области
показывают содержимое объекта, к которому применяется маска.
const maskSprite = PIXI.Sprite.from('mask.png'); // PNG с прозрачностью
maskSprite.position.set(100, 50);
maskSprite.scale.set(1.5);Применение маски к объекту Любой спрайт или
контейнер может иметь свойство mask. После присвоения маски
содержимое объекта отображается только в пределах непрозрачной области
маски.
const targetSprite = PIXI.Sprite.from('image.jpg');
targetSprite.position.set(50, 50);
targetSprite.mask = maskSprite;Добавление маски в сцену Маска должна быть частью сцены (или контейнера), чтобы рендеринг корректно отрабатывался. Обычно маску добавляют в тот же контейнер, что и объект, или выше по иерархии.
const container = new PIXI.Container();
container.addChild(targetSprite);
container.addChild(maskSprite); // маска должна быть добавлена в сценуАльфа-канал позволяет создавать сложные маски с плавными градиентами
прозрачности. В отличие от обычной маски PIXI.Graphics, где
прозрачность либо 0, либо 1, альфа-канал дает возможность частичной
видимости, что открывает возможности для реалистичных эффектов.
maskSprite.alpha = 1.0; // полностью непрозрачная маска
// Частичная прозрачность учитывается автоматически
Примечание:
Маска наследует трансформации: позицию, масштаб, вращение. Если маска перемещается, объект под ней автоматически обновляется.
app.ticker.add(() => {
maskSprite.rotation += 0.01; // вращение маски
});
Маска также учитывает масштаб контейнера, если объект и маска находятся в одном контейнере. Это позволяет создавать динамические эффекты типа «движущегося окна», через которое видно содержимое.
Маска через спрайт отлично сочетается с фильтрами
PIXI.filters, позволяя создавать эффекты размытия, свечения
и цветокоррекции только внутри маски.
const blurFilter = new PIXI.filters.BlurFilter(4);
targetSprite.filters = [blurFilter];
Альфа-маска обеспечивает фильтру воздействие строго на видимые участки объекта, создавая естественные границы.
PIXI.Graphics, так как
каждый пиксель обрабатывается для вычисления прозрачности.PIXI.RenderTexture, чтобы снизить нагрузку на
GPU.clipRect или
mask другого уровня).app.ticker или
GSAP для плавного движения, вращения или
масштабирования.RenderTexture для
ускорения рендеринга сложных сцен.Эта техника позволяет создавать визуально сложные эффекты: плавные переходы, частичные появления объектов, эффекты прожектора, динамические окна видимости и анимированные градиентные маски. Использование маски через спрайт с альфа-каналом — один из самых гибких способов управления видимостью объектов в PixiJS.