В PixiJS текстуры — это базовые строительные блоки для отображения
графики. Эффективное использование текстур напрямую влияет на
производительность и потребление памяти. Каждое изображение загружается
в виде Texture, а объединение нескольких текстур в один
атлас позволяет значительно снизить количество
отдельных загрузок и переключений текстур на GPU, что критично для
динамичной анимации и игр с большим количеством спрайтов.
Атлас — это один файл изображения, содержащий
несколько спрайтов, и соответствующая карта, описывающая координаты
каждого элемента. Использование атласов сокращает количество вызовов
drawCall, что особенно важно для рендеринга сотен или тысяч
спрайтов одновременно.
Выбор размера атласа определяется сочетанием нескольких факторов: аппаратной платформы, формата текстур и требований к производительности.
1. Классические размеры:
2. Платформенные ограничения:
3. Баланс между размером и количеством текстур:
1. Grid Packing (сеточная упаковка)
2. Shelf Packing (полочная упаковка)
3. MaxRects / Skyline
Создание текстур из атласа:
import * as PIXI from 'pixi.js';
const app = new PIXI.Application({ width: 800, height: 600 });
document.body.appendChild(app.view);
PIXI.Loader.shared
.add('spritesheet', 'assets/spritesheet.json')
.load((loader, resources) => {
const texture = resources.spritesheet.textures['hero.png'];
const sprite = new PIXI.Sprite(texture);
sprite.x = 100;
sprite.y = 100;
app.stage.addChild(sprite);
});
PIXI.Loader все текстуры атласа
автоматически создаются и кэшируются.Динамическое создание атласов:
PixiJS предоставляет PIXI.Spritesheet и
PIXI.BaseTexture для создания текстур из уже загруженных
изображений.
const baseTexture = PIXI.BaseTexture.from('atlas.png');
const textures = {
hero: new PIXI.Texture(baseTexture, new PIXI.Rectangle(0, 0, 64, 64)),
enemy: new PIXI.Texture(baseTexture, new PIXI.Rectangle(64, 0, 64, 64)),
};
1. Минимизация drawCall:
Container с
renderable и batchable спрайтами для
автоматического объединения.2. Использование правильного формата текстур:
3. Мипмапы и фильтрация:
texture.baseTexture.mipmap = PIXI.MIPMAP_MODES.ON;4. Разделение на несколько атласов при необходимости:
TexturePacker или встроенные функции PixiJS для
автоматизации процесса.Эффективная работа с атласами обеспечивает высокую производительность и плавность рендеринга, снижая нагрузку на память и GPU, что критично для интерактивных приложений и игр на PixiJS.