A WebGPU particle system where each particle is rendered as a camera-facing
billboard quad (rather than a point). The Emitter class updates 50,000
particles on the CPU with vectorised NumPy (position, velocity, colour, life
and alive/dead state), and the quads are expanded and orientated towards the
camera in the vertex shader. Particles can be drawn as soft circles or
squares.
main.py- scene, camera and render pipelineEmitter.py- NumPy particle emitter (birth, update, recycle)particle_shader.wgsl- billboard quad vertex / fragment shaderWebGPUWidget.py- Qt widget hosting the WebGPU surface
- Left-drag : look around (first person camera)
- Arrow keys : move the camera
space: toggle animationc: toggle circle / square particlesu: single-step the emitter and print debug infoEsc: quit
- W. T. Reeves, "Particle Systems — A Technique for Modeling a Class of Fuzzy Objects", ACM TOG 1983 — ACM — the original particle-system paper (emission, lifetime, stochastic variation).
- opengl-tutorial — Billboards — expanding a point into a camera-facing quad, done here in the vertex shader.
- WebGPU Fundamentals — Storage Buffers — feeding the per-particle data the quads are pulled from.
