Трейл-эффекты (trail effects) создают ощущение движения объектов в пространстве за счёт визуального «следа», оставляемого объектом при перемещении. В PixiJS их реализация базируется на накопительном рендеринге, когда предыдущие кадры сохраняются и постепенно затухают, создавая плавный визуальный эффект.
Для начала необходимо инициализировать приложение PixiJS:
const app = new PIXI.Application({
width: 800,
height: 600,
backgroundColor: 0x000000,
antialias: true
});
document.body.appendChild(app.view);
Создаётся канвас с заданными размерами и фоновым цветом. Параметр
antialias улучшает визуальное качество линий и фигур.
Далее создаётся объект, за которым будет тянуться след:
const circle = new PIXI.Graphics();
circle.beginFill(0xff0000);
circle.drawCircle(0, 0, 20);
circle.endFill();
circle.x = app.view.width / 2;
circle.y = app.view.height / 2;
app.stage.addChild(circle);
PIXI.Graphics позволяет создавать простые фигуры: круги,
прямоугольники, линии, полигоны. В трейл-эффектах часто используют
полупрозрачные объекты для более плавного следа.
Накопительный рендеринг строится на том, что сцена не полностью
очищается каждый кадр, а предыдущий рендер постепенно затемняется или
размывается. В PixiJS это можно реализовать с помощью
PIXI.RenderTexture.
const trailTexture = PIXI.RenderTexture.create({ width: app.view.width, height: app.view.height });
const trailSprite = new PIXI.Sprite(trailTexture);
app.stage.addChild(trailSprite);
const fade = new PIXI.Graphics();
fade.beginFill(0x000000, 0.1);
fade.drawRect(0, 0, app.view.width, app.view.height);
fade.endFill();
trailTexture хранит накопленный рендер.trailSprite выводит текстуру на экран.fade используется для постепенного затухания следа,
имитируя исчезновение старых кадров.Обновление сцены происходит внутри функции
app.ticker.add:
app.ticker.add((delta) => {
// Смещение объекта
circle.x += Math.cos(app.ticker.lastTime / 500) * 5;
circle.y += Math.sin(app.ticker.lastTime / 500) * 5;
// Затухание предыдущего кадра
app.renderer.render(fade, trailTexture, false, null, false);
// Рендер текущего объекта в текстуру
app.renderer.render(circle, trailTexture, false, null, false);
});
Параметры функции render:
fade или
circle).false, чтобы не очищать
текстуру.null, чтобы
использовать стандартное преобразование.false или
true для оптимизации.Каждый кадр текстура слегка затемняется (fade), после
чего накапливается новый кадр объекта. Такой подход создаёт плавный,
непрерывный след.
Полупрозрачные объекты:
Использование alpha < 1 позволяет мягко накладывать
цвета:
circle.alpha = 0.8;
Размытие следа:
Добавление фильтров PIXI.filters.BlurFilter придаёт
плавность:
const blurFilter = new PIXI.filters.BlurFilter(2);
trailSprite.filters = [blurFilter];
Масштабирование и цветовые градиенты:
Можно изменять размер или цвет объекта по мере его движения для создания динамичных эффектов:
circle.scale.set(1 + 0.5 * Math.sin(app.ticker.lastTime / 200));
circle.tint = 0xff0000 + (Math.sin(app.ticker.lastTime / 300) * 0x00ff00);
app.ticker.add до меньшей частоты снижает нагрузку.PIXI.Graphics объектов, каждый рендерится в
trailTexture.PIXI.particles.Emitter, интегрируемые в накопительный
рендер для эффектов дыма, огня или магии.Трейл-эффекты с накопительным рендерингом в PixiJS позволяют создавать визуально сложные, динамичные сцены с минимальной нагрузкой на систему. Управление прозрачностью, фильтрами и текстурами открывает широкие возможности для экспериментов и реализации эффектов частиц, света и магии.