В библиотеке PixiJS фильтры применяются к объектам для изменения их визуального представления. Каждый фильтр представляет собой отдельный шейдер, который выполняет специфическую задачу: размытие, изменение цвета, искажение, световые эффекты и другие. Возможность накладывать несколько фильтров на один объект позволяет создавать сложные визуальные эффекты без ручного комбинирования текстур или рендеринга.
Фильтры в PixiJS применяются через свойство
filters объекта. Это массив, в котором каждый элемент —
экземпляр фильтра:
import * as PIXI from 'pixi.js';
const app = new PIXI.Application({ width: 800, height: 600 });
document.body.appendChild(app.view);
const sprite = PIXI.Sprite.from('image.png');
app.stage.addChild(sprite);
const blurFilter = new PIXI.filters.BlurFilter();
const colorMatrix = new PIXI.filters.ColorMatrixFilter();
sprite.filters = [blurFilter, colorMatrix];
Ключевые моменты:
filters. Первый фильтр обрабатывает исходное изображение,
результат передается следующему и так далее.DisplacementFilter)
требуют дополнительной текстуры для работы.Порядок фильтров важен, так как результат одного фильтра используется в качестве входных данных для следующего. Например, если сначала применить размытие, а потом цветокоррекцию, эффект будет отличаться от обратного порядка.
const blurFilter = new PIXI.filters.BlurFilter(5);
const sepiaFilter = new PIXI.filters.ColorMatrixFilter();
sepiaFilter.sepia(true);
// Применение: сначала blur, потом sepia
sprite.filters = [blurFilter, sepiaFilter];
Каждый фильтр имеет собственные параметры, которые можно изменять в любое время:
blurFilter.blur = 10; // Увеличение размытия
colorMatrix.brightness(1.5); // Повышение яркости
При изменении параметров фильтров не требуется заново
присваивать массив filters, изменения вступают в
силу автоматически.
Применение нескольких фильтров одновременно может значительно нагружать GPU. Основные принципы оптимизации:
Объединение фильтров Некоторые фильтры можно объединять в один кастомный шейдер, чтобы сократить количество проходов рендеринга.
Использование cacheAsBitmap Если
объект статичен, sprite.cacheAsBitmap = true позволяет
рендерить объект один раз с применёнными фильтрами и использовать его
как текстуру.
Минимизация размера фильтруемой области Фильтры работают только на том прямоугольнике, где есть содержимое объекта. Ограничение размеров текстур и масок снижает нагрузку.
Проверка порядка фильтров Иногда перестановка фильтров может снизить визуальную нагрузку без потери эффекта.
Можно комбинировать разные типы фильтров для достижения уникальных эффектов:
const blur = new PIXI.filters.BlurFilter(4);
const glow = new PIXI.filters.GlowFilter({ distance: 15, outerStrength: 2 });
const colorAdjust = new PIXI.filters.ColorMatrixFilter();
colorAdjust.hue(90, false);
sprite.filters = [blur, glow, colorAdjust];
Особенности:
GlowFilter требует отдельного рендеринга для
создания ореола.ColorMatrixFilter может изменять контраст, яркость,
насыщенность и оттенок одновременно.В PixiJS фильтры можно применять не только к отдельным спрайтам, но и к контейнерам, что позволяет одновременно изменять несколько объектов:
const container = new PIXI.Container();
container.addChild(sprite1, sprite2, sprite3);
const blur = new PIXI.filters.BlurFilter(3);
container.filters = [blur];
filters.Эффективное использование нескольких фильтров в PixiJS позволяет создавать визуально насыщенные сцены с минимальным кодом и управлять эффектами динамически, сочетая размытия, искажения и цветовые корректировки для достижения профессионального уровня графики.