Библиотека pixi-filters расширяет возможности рендеринга в PixiJS, предоставляя набор готовых фильтров для работы с изображениями, спрайтами и контейнерами. Каждый фильтр представляет собой класс, который наследуется от базового PIXI.Filter и применяет GLSL-шейдер к рендеру. Фильтры могут использоваться по отдельности или комбинироваться для создания сложных визуальных эффектов.
Фильтры в pixi-filters делятся на несколько категорий в зависимости от назначения:
Цветовые фильтры Позволяют изменять цветовую гамму спрайтов, корректировать яркость, контраст и насыщенность.
brightness(),
contrast(), saturate(),
hue().Размытие и сглаживание Используются для создания размытого фона, свечения или мягких теней.
blur регулирует интенсивность.Деформационные фильтры Изменяют форму объектов, создавая волны, вращения, искривления.
angle,
radius.time управляет анимацией.Световые и атмосферные эффекты Фильтры для имитации свечения, тумана, линзовых эффектов.
Художественные фильтры Предназначены для придания стилистических эффектов.
scale регулирует размер точек.size задает размер одного
пикселя.noise регулирует интенсивность зернистости.Анимационные фильтры Позволяют создавать динамические эффекты, изменяющиеся во времени.
Фильтр подключается к объекту через свойство filters, которое принимает массив фильтров:
import { BlurFilter, ColorMatrixFilter } from 'pixi-filters';
const blur = new BlurFilter(5);
const colorMatrix = new ColorMatrixFilter();
colorMatrix.brightness(1.2, false);
sprite.filters = [blur, colorMatrix];
Каждый фильтр имеет собственный набор параметров, влияющих на визуальный эффект:
time обычно
обновляется в игровом цикле.Производительность зависит от количества фильтров и разрешения текстуры. Размытия и дискретные деформации создают нагрузку на GPU, поэтому рекомендуется:
Создание сложного эффекта часто требует нескольких фильтров:
import { GlowFilter, DisplacementFilter } from 'pixi-filters';
const glow = new GlowFilter({ distance: 15, outerStrength: 2 });
const displacement = new DisplacementFilter(texture);
container.filters = [glow, displacement];
Использование комбинаций открывает практически неограниченные возможности для стилизации и динамических эффектов в 2D-графике.
PixiJS позволяет создавать кастомные фильтры, наследуя PIXI.Filter и определяя собственный GLSL-шейдер:
import { Filter } from 'pixi.js';
class CustomWaveFilter extends Filter {
constructor() {
super(null, `
precision mediump float;
varying vec2 vTextureCoord;
uniform sampler2D uSampler;
uniform float time;
void main(void) {
vec2 uv = vTextureCoord;
uv.y += sin(uv.x * 10.0 + time) * 0.05;
gl_FragColor = texture2D(uSampler, uv);
}
`, { time: 0 });
}
}
uSampler – текстура объекта.vTextureCoord – координаты пикселя.uniforms позволяет передавать параметры в
шейдер и динамически изменять их.Такой подход обеспечивает максимальную гибкость и позволяет создавать уникальные визуальные эффекты, недоступные стандартными фильтрами.
gsap или встроенный цикл
requestAnimationFrame.Использование pixi-filters позволяет создавать насыщенные визуальные сцены, реализовать динамические эффекты и существенно расширить возможности 2D-графики на JavaScript.