Particle system; GPU particle simulation
A crowd of tiny sprites for sparks, smoke, rain, or swarms, with their positions and lifetimes updated together on the GPU.
See it
What it is
A particle system represents smoke, sparks, rain, dust, or a swarm as many tiny independent records. Each particle usually has position, velocity, age, and lifetime, while the renderer turns it into a point sprite or small camera-facing quad. An emitter controls where particles are born and how their initial state varies. The technique goes back to William Reeves at Lucasfilm, who built it for the Genesis sequence in Star Trek II: The Wrath of Khan.
GPU simulation stores that state in textures or buffers and updates all particles in parallel. A ping-pong setup reads last frame's positions and velocities from one pair of textures and writes the next frame into another, then swaps them. This avoids moving a large particle array between JavaScript and the GPU every frame.
Gotcha: cheap particles become expensive when their transparent pixels cover the same part of the screen. That is overdraw, and it can sink a smoke effect even when simulation is fast. Particles in one draw call also are not individually depth-sorted, so alpha blending can look wrong. Additive blending hides sorting errors for sparks, but not for soft smoke.
Ask AI for it
Build a 65,536-particle three.js system with GPUComputationRenderer using 256 by 256 floating-point position and velocity textures. Update velocity with curl noise and attraction toward a uPointer world-space uniform, then integrate position with semi-implicit Euler using delta time. Render the state in one THREE.Points draw call with a soft circular point-sprite texture, AdditiveBlending, depthTest enabled, and depthWrite disabled. Respawn particles whose age exceeds lifetime, and add controls for emitter radius, noise strength, point size, and lifetime.