Note: In some environments, it may not crash. If that’s the case, you should be able to reproduce the issue by opening the page with your browser’s cache disabled.
For your reference, I’ve attached a recording of the crash.
Please let me know if particle systems aren’t supported in snapshot rendering to begin with.
Root cause: Scene.isReady() did not include procedural textures. SnapshotRenderingHelper schedules its recording via scene.executeWhenReady(), so the recording frame could fire before your NoiseProceduralTexture’s effect was compiled. On that frame the noise texture’s render pass was skipped, but on later frames it was added back, leaving the snapshot’s bundle list one entry short and causing the canvas bundle to be replayed inside the noise texture’s pass (BGRA8 / 4× MSAA vs RGBA8 / 1×), which is what the WebGPU validator was complaining about.
Fix: include scene.proceduralTextures in Scene.isReady() so executeWhenReady waits for them. Once the PR lands, the playground should work as-is, no code changes needed on your end.