PixiJS изначально строился вокруг рендеринга на WebGL, однако с ростом поддержки WebGPU появился новый рендерер, обеспечивающий более высокий уровень производительности и расширенные возможности работы с графикой. WebGPU — это низкоуровневый API для графических и вычислительных операций в браузере, который предоставляет прямой доступ к GPU, обходя ограничения традиционного WebGL.
Для создания рендерера WebGPU используется класс
PIXI.Renderer с указанием типа платформы:
const app = new PIXI.Application({
width: 800,
height: 600,
backgroundColor: 0x1099bb,
forceCanvas: false,
powerPreference: "high-performance",
// Указание использовать WebGPU, если доступен
context: "webgpu"
});
document.body.appendChild(app.view);
Ключевой параметр context: "webgpu" заставляет PixiJS
использовать WebGPU вместо WebGL. Важно проверять доступность WebGPU в
браузере, так как не все платформы его поддерживают:
if (!navigator.gpu) {
console.warn("WebGPU не поддерживается этим браузером. Будет использован WebGL рендерер.");
}
1. Улучшенная производительность
WebGPU предоставляет прямой доступ к вычислительной мощности GPU, что позволяет обрабатывать большее количество спрайтов, текстур и эффектов с меньшей нагрузкой на CPU. Это особенно актуально для сложных сцен с тысячами объектов.
2. Современные шейдерные возможности
Использование WebGPU позволяет создавать более сложные шейдеры, включая compute shaders, что расширяет возможности постобработки и генерации процедурной графики.
3. Многопоточность и параллельные вычисления
WebGPU использует низкоуровневую модель командных буферов, что позволяет GPU работать параллельно с CPU, снижая задержки при рендеринге и вычислениях на стороне GPU.
4. Поддержка высокоточных форматов текстур
WebGPU позволяет использовать форматы текстур с высокой точностью
(например, RGBA16Float), что важно для научных
визуализаций, HDR-графики и сложных эффектов освещения.
WebGPU вводит свои ограничения и особенности управления текстурами:
writeTexture или буферы GPU.rgba16float и bgra8unorm, что расширяет
возможности визуальных эффектов.generateMipmap
через GPU-команды.Пример создания текстуры:
const texture = PIXI.Texture.from("image.png", {
scaleMode: PIXI.SCALE_MODES.LINEAR,
mipmap: PIXI.MIPMAP_MODES.ON
});
1. Ограниченная поддержка браузеров
На данный момент WebGPU полностью поддерживается в последних версиях Chrome, Edge и Safari, но отсутствует в большинстве мобильных браузеров и некоторых десктопных сборках Firefox. Необходимо предусматривать fallback на WebGL.
2. Ограничения по совместимости с существующими фильтрами
Многие стандартные фильтры PixiJS, рассчитанные на WebGL, могут работать некорректно или не поддерживаться в WebGPU. Для них требуется переписывать шейдеры в формате WGSL (WebGPU Shading Language).
3. Более строгая модель памяти
WebGPU требует явного управления буферами и текстурами, что усложняет динамическое создание и обновление ресурсов по сравнению с WebGL, где доступ к текстурам и массивам пикселей более гибкий.
4. Нет прямого доступа к canvas 2D API
WebGPU полностью ориентирован на GPU. Прямые операции с контекстом 2D canvas невозможны, поэтому все отрисовки должны быть через PixiJS-объекты или шейдеры.
Для эффективного использования WebGPU в PixiJS рекомендуется:
PIXI.BatchRenderer) для уменьшения количества draw
calls.PixiJS предоставляет возможность подключать кастомные шейдеры для WebGPU. Пример простого фрагментного шейдера на WGSL:
@fragment
fn main(@location(0) fragCoord: vec4<f32>) -> @location(0) vec4<f32> {
let color = vec3<f32>(fragCoord.x / 800.0, fragCoord.y / 600.0, 0.5);
return vec4<f32>(color, 1.0);
}
Шейдер можно привязать к спрайту через PIXI.Shader:
const shader = PIXI.Shader.from(vertexWGSL, fragmentWGSL);
const sprite = new PIXI.Mesh(geometry, shader);
app.stage.addChild(sprite);
WebGPU в PixiJS совместим с большинством сцен, построенных для WebGL, однако стоит учитывать:
WebGPU открывает новые горизонты для высокопроизводительной графики в браузере, предоставляя разработчикам PixiJS инструменты для работы с современными возможностями GPU, но требует внимательного подхода к совместимости и управлению ресурсами.