CommunityProgramación y desarrollogithub.com

pixijs/pixijs-renderización-personalizada

Usa esta habilidad al escribir shaders, uniforms, filtros o batchers personalizados en PixiJS v8. Cubre Shader.from(), GlProgram/GpuProgram, UniformGroup con uniforms tipados, modo UBO, texturas como recursos, filtros personalizados, GLSL ES 3.0, y batchers mediante extensiones.

¿Qué es pixijs-renderización-personalizada?

Esta habilidad te permite crear sistemas de renderizado personalizados en PixiJS v8, cubriendo desde shaders y uniforms hasta filtros y batchers avanzados. Es especialmente útil cuando necesitas efectos visuales complejos, optimización de rendimiento con batchers, o integración con pipelines de renderizado WebGPU/WebGL. Compatible con GLSL ES 3.0 y WGSL, maneja UniformGroup con uniformes tipados (f32, vec2, mat4x4), modo UBO, texturas como recursos, y filtros mediante Filter.from. También cubre la configuración unsafe-eval para CSP estrictos, muestreo con uBackTexture, y extensiones de batcher. Se activa automáticamente con palabras clave como Shader, GlProgram, GpuProgram, UniformGroup, Batcher, Filter, GLSL, WGSL, UBO, custom shader, finalColor, blendRequired, y unsafe-eval. Funciona tanto con WebGL como con WebGPU, y es ideal para desarrolladores que buscan personalizar profundamente el pipeline de renderizado de PixiJS.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/pixijs/pixijs-skills/tree/main/skills/pixijs-custom-rendering

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace pixijs-renderización-personalizada?

Usa esta habilidad al escribir shaders, uniforms, filtros o batchers personalizados en PixiJS v8. Cubre Shader.from({gl, gpu, resources}), GlProgram/GpuProgram, UniformGroup con uniforms tipados (f32, vec2, mat4x4), modo UBO, texturas como recursos, filtro personalizado mediante Filter.from, convenciones GLSL ES 3.0 (in/out, finalColor, texture()), muestreo de uBackTexture, pixi.js/unsafe-eval para CSP estrictos, y batcher personalizado mediante extensiones. Se activa con: Shader, GlProgram, GpuProgram, UniformGroup, Batcher, Filter, Filter.from, GLSL, WGSL, UBO, uniform, custom shader, finalColor, uBackTexture, blendRequired, unsafe-eval.

Shaders y Programas

Shader.from({gl, gpu, resources})

Crea un shader que funciona tanto en WebGL como en WebGPU. El objeto gl y gpu contienen programas respectivos.

import { Shader } from 'pixi.js';

const shader = Shader.from({
    gl: {
        vertex: `
            in vec2 aPosition;
            void main() {
                gl_Position = vec4(aPosition, 0.0, 1.0);
            }
        `,
        fragment: `
            in vec4 finalColor;
            out vec4 fragColor;
            void main() {
                fragColor = finalColor;
            }
        `,
    },
    gpu: {
        vertex: `
            struct VertexOutput {
                @builtin(position) position: vec4<f32>,
            }
            @vertex fn main(@location(0) aPosition: vec2<f32>) -> VertexOutput {
                var out: VertexOutput;
                out.position = vec4<f32>(aPosition, 0.0, 1.0);
                return out;
            }
        `,
        fragment: `
            @fragment fn main() -> @location(0) vec4<f32> {
                return vec4<f32>(1.0, 0.0, 0.0, 1.0);
            }
        `,
    },
    resources: {
        uGlobalUniforms: uniformGroup,
    }
});

GlProgram y GpuProgram

Puedes usar GlProgram para WebGL y GpuProgram para WebGPU por separado.

import { GlProgram, GpuProgram } from 'pixi.js';

const glProgram = new GlProgram({
    vertex: `
        in vec2 aPosition;
        void main() {
            gl_Position = vec4(aPosition, 0.0, 1.0);
        }
    `,
    fragment: `
        in vec4 finalColor;
        out vec4 fragColor;
        void main() {
            fragColor = finalColor;
        }
    `
});

const gpuProgram = new GpuProgram({
    vertex: {
        entryPoint: 'main',
        source: `...código WGSL...`
    },
    fragment: {
        entryPoint: 'main',
        source: `...código WGSL...`
    }
});

UniformGroup y Uniformes Tipados

UniformGroup con uniformes tipados

Usa arrays tipados para mayor eficiencia.

import { UniformGroup } from 'pixi.js';

const uniformGroup = new UniformGroup({
    uTime: { value: 0, type: 'f32' },
    uResolution: { value: new Float32Array([800, 600]), type: 'vec2<f32>' },
    uTransform: { value: new Float32Array(16), type: 'mat4x4<f32>' },
    uMainTexture: { value: texture, type: 'texture2D<f32>' }
});

Modo UBO

Para mayor rendimiento, usa UBO (Uniform Buffer Object).

const uboGroup = new UniformGroup({
    uColor: { value: new Float32Array([1, 0, 0, 1]), type: 'vec4<f32>' },
    uIntensity: { value: 1.0, type: 'f32' }
}, { isUBO: true });

Filtros Personalizados

Filter.from

Crea filtros personalizados fácilmente.

import { Filter } from 'pixi.js';

const customFilter = Filter.from({
    gl: {
        vertex: `
            in vec2 aPosition;
            out vec2 vTextureCoord;
            void main() {
                gl_Position = vec4(aPosition, 0.0, 1.0);
                vTextureCoord = aPosition * 0.5 + 0.5;
            }
        `,
        fragment: `
            in vec2 vTextureCoord;
            in vec4 finalColor;
            out vec4 fragColor;
            uniform sampler2D uTexture;
            uniform sampler2D uBackTexture;
            void main() {
                vec4 front = texture(uTexture, vTextureCoord);
                vec4 back = texture(uBackTexture, vTextureCoord);
                fragColor = mix(front, back, 0.5);
            }
        `
    },
    gpu: {
        vertex: `...`,
        fragment: `...`
    },
    resources: {
        uTexture: texture,
        uBackTexture: backTexture
    }
});

Convenciones GLSL ES 3.0

  • Usa in y out en lugar de attribute y varying.
  • El color de salida se nombra finalColor.
  • Muestrea texturas con texture() en lugar de texture2D().
  • uBackTexture es la textura del frame anterior.
#version 300 es
precision mediump float;

in vec2 vTextureCoord;
in vec4 finalColor;

uniform sampler2D uTexture;
uniform sampler2D uBackTexture;

out vec4 fragColor;

void main() {
    vec4 front = texture(uTexture, vTextureCoord);
    vec4 back = texture(uBackTexture, vTextureCoord);
    fragColor = mix(front, back, finalColor.a);
}

pixi.js/unsafe-eval para CSP Estricto

Si tu sitio usa Content Security Policy estricto, necesitas agregar unsafe-eval para PixiJS v8.

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-eval'">

o en el servidor:

Content-Security-Policy: script-src 'self' 'unsafe-eval'

Batchers Personalizados mediante Extensiones

Crear un batcher

import { ExtensionType, extensions } from 'pixi.js';

class CustomBatcher {
    static extension = {
        type: ExtensionType.Batcher,
        name: 'custom-batcher'
    };

    build(renderer) {
        // lógica de batch personalizada
    }

    upload(renderer) {
        // subir datos de batch a la GPU
    }

    render(renderer) {
        // renderizar el batch
    }
}

extensions.add(CustomBatcher);

Blend Mode y blendRequired

const batcher = new CustomBatcher();
batcher.blendRequired = true; // fuerza blend mode

Notas Importantes

  • Siempre usa Shader.from() para compatibilidad cross-platform.
  • Los uniformes tipados mejoran el rendimiento.
  • uBackTexture solo está disponible en filtros.
  • Para UDP, usa isUBO: true en UniformGroup.
  • Los batchers mejoran el rendimiento agrupando objetos similares.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

pixijs/pixijs

Use this skill first for ANY PixiJS v8 task; it routes to the right specialized skill for the job. Covers the full PixiJS surface: Application setup, the scene graph (Container, Sprite, Graphics, Text, Mesh, ParticleContainer, DOMContainer, GifSprite), rendering (WebGL/WebGPU/Canvas, render loop, custom shaders, filters, blend modes), assets, events, color, math, ticker, accessibility, performance, environments, migration from v7, and project scaffolding. Triggers on: pixi, pixi.js, pixijs, PixiJS, v8, Application, app.init, Sprite, Container, Graphics, Text, Mesh, ParticleContainer, DOMContainer, GifSprite, Assets, Ticker, renderer, WebGL, WebGPU, scene graph, filter, shader, blend mode, texture, BitmapText, create-pixi, how do I draw, how do I render, how do I animate in pixi.

pixijs/pixijs-accessibility

Use this skill when adding screen reader and keyboard navigation to PixiJS v8 apps. Covers AccessibilitySystem options (enabledByDefault, debug, activateOnTab, deactivateOnMouseMove), per-container accessibility properties, shadow DOM overlay, mobile touch-hook activation. Triggers on: accessibility, a11y, screen reader, ARIA, keyboard navigation, tab order, AccessibilitySystem, accessibleTitle, accessibleHint, tabIndex, accessibleChildren.

pixijs/pixijs-application

Use this skill when creating and configuring a PixiJS v8 Application. Covers new Application() + async app.init() options (width, height, background, antialias, resolution, autoDensity, preference, resizeTo, autoStart, sharedTicker, canvas, useBackBuffer, powerPreference, eventFeatures, accessibilityOptions, gcActive, bezierSmoothness, webgl/webgpu/canvasOptions per-renderer overrides), app.stage/renderer/canvas/screen/domContainerRoot access, ResizePlugin, TickerPlugin, CullerPlugin (cullable, cullArea), custom ApplicationPlugin creation via ExtensionType.Application, start/stop lifecycle, and app.destroy() with releaseGlobalResources. Triggers on: Application, app.init, app.stage, app.renderer, app.canvas, app.screen, app.domContainerRoot, ApplicationOptions, ApplicationPlugin, ExtensionType.Application, resizeTo, preference, autoStart, sharedTicker, useBackBuffer, powerPreference, skipExtensionImports, preferWebGLVersion, preserveDrawingBuffer, cullable, CullerPlugin, app.start, app.stop, app.destroy, rele

pixijs/pixijs-assets

Use this skill when loading and managing resources in PixiJS v8. Covers Assets.init, Assets.load/add/unload, bundles, manifests, background loading, onProgress, caching, spritesheets, video textures, web fonts, bitmap fonts, animated GIFs, compressed textures, SVG as texture or Graphics, resolution detection, per-asset data options, and forcing a specific loader with the parser field (for extension-less URLs). Triggers on: Assets, Assets.load, Assets.init, loadBundle, manifest, backgroundLoad, Spritesheet, Cache, LoadOptions, unload, parser, loadParser, loadWebFont, loadBitmapFont, loadVideoTextures, GifSource, VideoSourceOptions.

pixijs/pixijs-blend-modes

Use this skill when compositing display objects with blend modes in PixiJS v8. Covers standard modes (normal, add, multiply, screen, erase, min, max), advanced modes via pixi.js/advanced-blend-modes (color-burn, overlay, hard-light, etc.), batch-friendly ordering. Triggers on: blendMode, additive, multiply, screen, overlay, color-burn, color-dodge, advanced-blend-modes, glow, erase.

pixijs/pixijs-color

Use this skill when creating, converting, or manipulating colors in PixiJS v8. Covers Color class input formats (hex, CSS names, RGB/HSL objects, arrays, Uint8Array), conversion methods (toHex, toNumber, toArray, toRgba), component access, setAlpha/multiply/premultiply, Color.shared singleton. Triggers on: Color, ColorSource, hex, rgb, hsl, tint, premultiply, Color.shared, color conversion.

pixijs/pixijs-core-concepts

Use this skill when understanding how PixiJS v8 renders frames: the systems-and-pipes renderer, the render loop, and how the library adapts to different environments. Covers WebGLRenderer/WebGPURenderer/CanvasRenderer selection, renderer.render() pipeline, environment detection, and pointers to per-topic deep dives. Triggers on: renderer, WebGL, WebGPU, Canvas, render loop, render pipeline, systems, environments, autoDetectRenderer.

pixijs/pixijs-create

Use this skill when scaffolding a new PixiJS v8 project with the create-pixi CLI or adding PixiJS to an existing project. Covers npm/yarn/pnpm/bun create commands, interactive vs non-interactive flows, bundler vs creation template categories, available template presets (bundler-vite, bundler-webpack, bundler-esbuild, bundler-import-map, creation-web, framework-react, extension-default), Node version requirements, `npm install pixi.js` for existing projects, post-scaffold dev flow, and the Vite top-level-await production-build gotcha. Triggers on: create pixi.js, npm create, npm install pixi.js, scaffold, template, bundler-vite, bundler-webpack, creation-web, framework-react, new project, existing project, getting started, quick start.

pixijs/pixijs-environments

Use this skill when running PixiJS v8 outside a standard browser: Web Workers, OffscreenCanvas, Node/SSR, or CSP-restricted contexts. Covers DOMAdapter.set, BrowserAdapter, WebWorkerAdapter, custom Adapter interface, pixi.js/unsafe-eval for strict CSP. Triggers on: DOMAdapter, BrowserAdapter, WebWorkerAdapter, Web Worker, OffscreenCanvas, Node, headless, SSR, CSP, unsafe-eval, Adapter.

pixijs/pixijs-events

Use this skill when handling pointer, mouse, touch, or wheel input in PixiJS v8. Covers eventMode (none, passive, auto, static, dynamic), FederatedEvent types, propagation and capture phase, hitArea, interactiveChildren, cursor and cursorStyles, global move events for drag, eventFeatures config. Triggers on: eventMode, FederatedPointerEvent, pointerdown, click, tap, globalpointermove, drag, hitArea, cursor, stopPropagation.

pixijs/pixijs-filters

Use this skill when applying visual effects to PixiJS v8 containers via the filter pipeline. Covers built-in filters (AlphaFilter, BlurFilter, ColorMatrixFilter, DisplacementFilter, NoiseFilter), custom Filter.from() with GLSL/WGSL, options (resolution, padding, antialias, blendRequired), filterArea optimization, pixi-filters community package. Triggers on: filters, BlurFilter, ColorMatrixFilter, DisplacementFilter, NoiseFilter, Filter.from, GLSL filter, pixi-filters, filterArea.

pixijs/pixijs-math

Use this skill when working with coordinates, vectors, matrices, shapes, hit testing, or layout rectangles in PixiJS v8. Covers Point/ObservablePoint, Matrix (2D affine, decompose, apply, applyInverse), shapes (Rectangle, Circle, Ellipse, Polygon, RoundedRectangle, Triangle), Rectangle layout helpers (pad, fit, enlarge, ceil, scale, getBounds), strokeContains hit tests, Polygon isClockwise/containsPolygon, toGlobal/toLocal, PointData/PointLike/Size types, DEG_TO_RAD, and pixi.js/math-extras vector and intersection helpers. Triggers on: Point, ObservablePoint, Matrix, Rectangle, Circle, Polygon, Triangle, RoundedRectangle, toGlobal, toLocal, hitArea, strokeContains, pad, fit, enlarge, ceil, getBounds, containsRect, intersects, isClockwise, math-extras, lineIntersection, segmentIntersection, DEG_TO_RAD, PointData.

pixijs/pixijs-migration-v8

Use this skill when upgrading to PixiJS v8 from v7 or diagnosing broken v7 code after an upgrade. Covers async app.init, single pixi.js package (deprecated @pixi/* sub-packages), Graphics shape-then-fill, BaseTexture → TextureSource, shader/uniform rework, ParticleContainer+Particle, constructor options objects, DisplayObject removal, settings/utils removal, Ticker signature, events rewrite. Triggers on: migrate v7, v8 breaking changes, @pixi/ import, DisplayObject, beginFill, endFill, cacheAsBitmap, BaseTexture, deprecated.

pixijs/pixijs-performance

Use this skill when profiling or optimizing a PixiJS v8 app for FPS, draw calls, or GPU memory. Covers destroy patterns (cacheAsTexture(false), releaseGlobalResources), GCSystem and TextureGCSystem, PrepareSystem, object pooling, batching rules, BitmapText for dynamic text, culling (Culler, CullerPlugin, cullable, cullArea), resolution/antialias tradeoffs. Triggers on: FPS, jank, draw calls, batching, object pool, GCSystem, PrepareSystem, Culler, cacheAsTexture, memory leak, destroy patterns.

pixijs/pixijs-scene-container

Use this skill when grouping, positioning, or transforming display objects in PixiJS v8. Covers Container constructor options (isRenderGroup, sortableChildren, boundsArea), addChild/removeChild/addChildAt/swapChildren/setChildIndex, position/scale/rotation/pivot/skew/alpha/tint, getBounds/getGlobalPosition/toLocal/toGlobal, zIndex sorting, cullable, onRender per-frame callback, destroy. Triggers on: Container, addChild, removeChild, addChildAt, swapChildren, sortableChildren, zIndex, position, scale, rotation, pivot, getBounds, toGlobal, toLocal, onRender, destroy, constructor options, ContainerOptions.

pixijs/pixijs-scene-core-concepts

Use this skill when reasoning about the PixiJS v8 scene graph as a whole: how containers, leaves, transforms, and render order fit together. Covers leaf vs container distinction, local/world coordinates, culling, render groups, sortable children, masking, RenderLayer, constructor options shared by every scene node, and which leaf skill covers which display object. Triggers on: scene graph, display list, Container, Sprite, Graphics, Text, Mesh, ParticleContainer, DOMContainer, GifSprite, masking, render group, RenderLayer, world transform, constructor options, ContainerOptions.

pixijs/pixijs-scene-dom-container

Use this skill when overlaying HTML elements on the PixiJS v8 canvas. Covers DOMContainer with element, anchor, and scene-graph-driven CSS transforms, the pixi.js/dom side-effect import, DOMPipe registration, visibility sync, pointer-events handling. Triggers on: DOMContainer, pixi.js/dom, DOMPipe, HTML overlay, input on canvas, iframe overlay, DOMContainerOptions, element, anchor, constructor options.

pixijs/pixijs-scene-gif

Use this skill when displaying animated GIFs in PixiJS v8. Covers the pixi.js/gif side-effect import, Assets.load returning a GifSource, GifSprite playback (play/stop/currentFrame/animationSpeed), autoPlay/loop options, onComplete/onLoop/onFrameChange callbacks, GifSource sharing, clone, destroy. Triggers on: GifSprite, GifSource, pixi.js/gif, animationSpeed, currentFrame, autoPlay, onComplete, onFrameChange, constructor options, GifSpriteOptions.

pixijs/pixijs-scene-graphics

Use this skill when drawing vector shapes and paths in PixiJS v8. Covers the Graphics API: shape-then-fill methods (rect/circle/ellipse/poly/roundRect/star/regularPoly/roundPoly/roundShape/filletRect/chamferRect), path methods (moveTo/lineTo/bezierCurveTo/quadraticCurveTo/arc/arcTo/arcToSvg/closePath), fill/stroke/cut, holes, FillGradient (linear/radial), FillPattern, GraphicsContext sharing, svg import/export, containsPoint hit testing, cloning, clearing, bounds, fillStyle/strokeStyle, draw-time transforms (rotateTransform/scaleTransform/translateTransform/setTransform/save/restore), default styles, GraphicsPath reuse. Triggers on: Graphics, GraphicsContext, rect, circle, poly, roundRect, fill, stroke, cut, hole, beginHole, FillGradient, FillPattern, moveTo, bezierCurveTo, svg, graphicsContextToSvg, svg export, GraphicsOptions, containsPoint, clone, clear, bounds, rotateTransform, translateTransform, setFillStyle, setStrokeStyle, GraphicsPath.

pixijs/pixijs-scene-mesh

Use this skill when rendering custom geometry in PixiJS v8. Covers Mesh with MeshGeometry (positions, uvs, indices, topology), MeshSimple for per-frame vertex animation, MeshPlane for subdivided deformation, MeshRope for path-following textures, PerspectiveMesh for 2.5D corners. Triggers on: Mesh, MeshGeometry, MeshSimple, MeshPlane, MeshRope, PerspectiveMesh, positions, uvs, indices, topology, setCorners, constructor options, MeshOptions, MeshPlaneOptions, MeshRopeOptions, SimpleMeshOptions, PerspectivePlaneOptions.

Skills relacionados