WEBGPU ONLY NO FALLBACK (YET)
So in the past I have dabbled with web GPU based particle systems, but this time I decided to just kind of wing it and play off the stuff I learned with the first time approaching this. Also with learning a bunch of things from Sprite Monkey Editor by Ape Aviary I was able to kind of come at this with a similar perspective.
Basically I have been hacking since late afternoon Friday and have come up with this… Yes I know there are probably bugs and it might not be the most efficient system yet buuuuuut introducing!
ParicleMonkey
I have it hosted on a digital ocean thing right now but will have it all url masked later blah blah…
Anyways features, Im gonna let claude take the wheel on this part:
Tech stack: Vue 3 · TypeScript · Vite · Babylon.js 8 · WebGPU (WebGL 2 fallback) · Firebase
Core Renderer
GPU-accelerated compute shader particle simulation via WebGPU
Automatic fallback to WebGL 2 for unsupported browsers
Hundreds of thousands of particles with near-zero CPU overhead
Emitter & Particle Properties
Spawn rate, min/max lifetime, min/max scale, min/max velocity, gravity, min/max mass, min/max rotation angle
World space toggle (particles inherit emitter movement or stay fixed in world)
Emitter shapes: Box, Point, Sphere, Cone — each with position/rotation offsets and a live wireframe preview
Over-Lifetime Curves
Scale over Lifetime — multi-stop gradient with multiply or add blend mode
Color over Lifetime — RGBA stops
Rotation over Lifetime — multi-stop with multiply/add
Mass over Lifetime — multi-stop with multiply/add
Color gradient (spawn-time randomisation) with multiple RGBA stops
Texture & Sprite Sheet Support
Custom image textures (PNG, etc.) per emitter
Texture atlas with configurable cell size and atlas dimensions
Animated sprite sheet playback (cols, rows, start/end cell, frame rate, loop)
Multiply and Additive blend modes
Random or sequential texture pick modes
Timeline & Curve Editor
Per-system timeline with track lanes for each emitter
Playhead scrubbing, zoom/pan, ruler ticks
Finite (duration-based) and infinite playback modes with looping
Play/Stop transport controls
Full keyframe curve editor — drag knots, add/remove keyframes, multiple curve tool modes
Scene Hierarchy (Navigator)
Tree view of all Systems → Anchors → Emitters in DFS order
Add/remove/rename systems, anchors, and emitters inline
Collapsible hierarchy with parent-child relationships
Effectors (kill volumes, colliders) per system
Noise Mask Effectors
Noise types: Value, Perlin, Simplex, Cellular, Curl
World or local space
Animatable offset (X/Y/Z), scale, invert, and octave parameters
Event & Binding System
Fully typed event bus: system:start/end, emitter:start/end, effector:start/end, particle:spawn/die, particle:killed, particle:bounce
Spawn bindings (⚡) — wire any particle event to trigger another emitter, with configurable trigger conditions
Property Tracks (Keyframe Animation)
Animate any emitter or anchor property over time using keyframe curves
Curves live directly on track/anchor definitions and are serialised with the effect
Community & Sharing
One-click Publish — serialises the full effect (PMX/PSX JSON format), uploads textures to Firebase Storage, writes metadata to Firestore
Name, description, and tags on publish
Community gallery on the landing page — paginated grid sortable by Newest, Most Liked, Most Downloaded, Most Viewed
Viewer page — standalone fullscreen player that restores the author's exact camera framing
Like, download, and comment on any published effect
Fork — open any community effect directly into the editor as a new copy
Firebase Authentication (sign up / log in)
User profile page
Author and admin delete controls
Ok now that we have that AI garble out of the way, effectively its an editor to make cool particle systems there is a bug with alpha as denoted by this forum thread: Custom GPU Particle System Cant use Alpha? - #2 by Pryme8
But other than that and some quirks its pretty nifty.
So you have all sorts of Effectors and Anchors and Events and even a Animation and Strip editor!
Most properties can all be animated and timed.
Oh and did I mention exports we have exports. So there are two file types pmx and psx one is for whole projects one is for singular effects but moving on.
Another cool feature is the commmmunity… yeah you can publish your effects with an entire attribution chain if someone uses your effect its pretty rad.
The big bummer in the room is I have not publish the runtime packages for this yet, you gotta wait. Eventually you will be able to export the entire particle package, do an npm install and load it up into your game with a simple parsing interface and BAM. All these cool particle systems and textures and events you can subscribe to for in game responses… its honestly gonna be the bees knees.
So yeah…. Check it out!
Oh wait wait oh yeah.. I should probably give some instructions…. so first Hierarchy.
You got this thing where you can spawn new emitters, systems, bindings and anchors. Just kinda like mess around with it. (The event system is really cool you can spawn other systems on particle deaths or respond to a ton of things)
Second you got a props panel:
this thing should update for what you have selected and you can edit all the default values of things its pretty sweet.
Next we got the timeline editor:
There are strips and stuff you can use to say when certain things have effects and such, oh and zoom into the timline and pan things like that but waaait there is more
double click on a strip and you get a curve editor to set keyframes an animate all sort of nifty values for each thing. If you are on the select tool and double click an keyframe you can input values directly pro tip.
Anyways there are tons more things to discover buuuuut Ill make tutorial videos for that if people actually seem interested.
So the moral of this story, is I’m paying for this server… you are welcome. Hopefully this is a valid rending technique and we can get a whole library of cool community effects for people to use in their projects. Even if not, then dont matter… I got a cool particle system and editor for my TTCG that Im working on (Tactical Trading Card Game). and it needed (did not need) it… so yeah take that.











