BabylonJS/Babylon.js · error

GPU Particle System is not supported.

Error message

GPU Particle System is not supported.

What it means

GPUParticleSystem in Babylon.js requires WebGPU (or fallback GPU compute) support in the host environment. The quick-create extension checks the static GPUParticleSystem.IsSupported flag before constructing the system, alerts the user, and throws because it cannot create the requested GPU particle system. The error is intentional: silently falling back to a CPU system would change behavior the user explicitly asked for.

Source

Thrown at packages/dev/inspector-v2/src/extensions/quickCreate/particles.tsx:52

    // Node Particle System state
    const [nodeParticleSystemName, setNodeParticleSystemName] = useState("Node Particle System");
    const [nodeParticleSystemSnippetId, setNodeParticleSystemSnippetId] = useState("");

    const handleCreateCPUAsync = async () => {
        return await new Promise<{ name: string }>((resolve) => {
            setTimeout(() => {
                const system = new ParticleSystem(cpuParticleSystemName, cpuParticleSystemCapacity, scene);
                system.particleTexture = new Texture("https://assets.babylonjs.com/textures/flare.png", scene);
                system.start();
                resolve(system);
            }, 0);
        });
    };

    const handleCreateGPUAsync = async () => {
        if (!GPUParticleSystem.IsSupported) {
            alert("GPU Particle System is not supported.");
            throw new Error("GPU Particle System is not supported.");
        }
        return await new Promise<{ name: string }>((resolve) => {
            setTimeout(() => {
                const system = new GPUParticleSystem(gpuParticleSystemName, { capacity: gpuParticleSystemCapacity }, scene);
                system.particleTexture = new Texture("https://assets.babylonjs.com/textures/flare.png", scene);
                system.start();
                resolve(system);
            }, 0);
        });
    };

    const handleCreateNodeAsync = async () => {
        let nodeParticleSet;
        const snippetId = nodeParticleSystemSnippetId.trim();
        if (snippetId) {
            nodeParticleSet = await NodeParticleSystemSet.ParseFromSnippetAsync(snippetId);
            nodeParticleSet.name = nodeParticleSystemName;
        } else {

View on GitHub (pinned to 0592b347b8)

Solutions

  1. Open the inspector in a WebGPU-capable browser (Chrome/Edge 113+, recent Safari with WebGPU enabled) with hardware acceleration on.
  2. Create a regular (CPU) ParticleSystem instead when GPUParticleSystem.IsSupported is false.
  3. Check GPUParticleSystem.IsSupported in your UI and hide/disable the GPU option when false.
  4. Ensure the engine is created with WebGPU (e.g. WebGPUEngine) so the feature is available at runtime.

Example fix

// before
const handleCreateGPUAsync = async () => {
  const system = new GPUParticleSystem(name, { capacity }, scene);
  ...
};

// after
const handleCreateGPUAsync = async () => {
  if (!GPUParticleSystem.IsSupported) {
    const system = new ParticleSystem(name, capacity, scene); // CPU fallback
    system.particleTexture = new Texture("https://assets.babylonjs.com/textures/flare.png", scene);
    system.start();
    return { name };
  }
  ...
};
Defensive patterns

Strategy: fallback

Validate before calling

if (!GPUParticleSystem.IsSupported) {
  console.warn("GPU particles unsupported, falling back to CPU ParticleSystem");
}

Type guard

function canCreateGPUParticles(): boolean {
  return typeof GPUParticleSystem !== "undefined" && GPUParticleSystem.IsSupported;
}

Try / catch

try {
  return await handleCreateGPUAsync();
} catch (e) {
  if (e instanceof Error && e.message.includes("GPU Particle System is not supported")) {
    return createCPUParticleSystemFallback(scene);
  }
  throw e;
}

Prevention

When it happens

Trigger: Clicking the GPU particle system quick-create action in the inspector while the page runs on a browser or device where GPUParticleSystem.IsSupported is false (no WebGPU, disabled feature, unsupported driver).

Common situations: Running the inspector in Safari or an older browser without WebGPU; testing on machines where WebGPU is disabled via flags or corporate policy; headless/CI environments with no GPU adapter; using a Babylon.js engine not initialized with WebGPU support.

Related errors


AI-assisted analysis of BabylonJS/Babylon.js@0592b347b8 (2026-08-30). Data as JSON: /api/errors/27a5c2e15644f9e3. Report an issue: GitHub.