checkout realparticles
Got it, I'll leave the 3D essay for you to pick up next. Here's the extended RealParticles script, roughly five to six minutes read aloud:
It's honestly hard to believe that in Blender, we still can't make a particle simulation like this without an addon.
Sand pouring from a spout. Grains landing on top of each other, piling up into a little mound, sliding down the sides. It's one of the most basic things you'd expect a 3D program to do. And yet, if you open a fresh Blender scene and try to make it, you'll quickly hit a wall.
To understand why, we have to talk a little bit about Blender's particle system. Because it's old. Really old.
The particle system most of us still use today was built a long time ago, back when Blender's interface looked completely different. It got its last really big overhaul around the two point five era, and since then it's mostly just been kept alive. A tweak here, a fix there. When Blender moved to two point eight, almost everything got a new coat of paint. The viewport, the interface, Eevee. The particle system? It mostly just came along for the ride.
Then around twenty twenty, there was real excitement. The developers started working on a brand new node based particle system. People were sharing prototypes, and it looked like particles were finally getting their moment. But that project eventually got folded into what became Geometry Nodes. Which is great, Geometry Nodes is one of the best things to ever happen to Blender. But it meant the dedicated, easy, click a button particle system we were promised never really arrived. Instead, we got the building blocks, and we were told to build it ourselves.
Simulation zones came in Blender three point six, and that was a huge deal, because for the first time Geometry Nodes could remember what happened in the previous frame. That's what makes simulations possible. But again, it's a toolbox, not a tool.
So that brings us to the real question. Why don't Blender's particles collide with each other?
The short answer is, it's expensive. When a particle collides with a mesh, like the floor, Blender only has to check one particle against one object. Simple. But when particles collide with each other, every particle has to check every other particle around it. If you have a thousand particles, that's a lot of checks. If you have a hundred thousand grains of sand, it gets out of hand very quickly, unless you're clever about how you organize them.
And the old particle system just wasn't designed for that. It was made for things like sparks, dust, rain, hair, little bits of debris flying around. Things that don't really need to touch each other. A spark doesn't care about the spark next to it. But sand? Sand is entirely about grains touching each other. That's what makes it pile up. Without self collisions, particles just go straight through themselves and you end up with a flat, ghostly puddle instead of a pile.
Now, there are workarounds. You could try a rigid body simulation. Rigid bodies do collide with each other, and they look great. But rigid bodies don't emit. You'd need an addon that lets objects spawn constantly over time, otherwise you're just stuck with however many objects were in the scene on frame one. And rigid bodies get heavy fast when you have thousands of them.
The other route is Geometry Nodes. And yes, you can absolutely do it. But let me walk you through what that actually looks like.
First, you need a simulation zone, so the setup can remember where every grain was on the last frame. Then you need emission. You have to spawn new points every frame, and use the frame number as a seed so you don't get the exact same points over and over. Then you need velocity, stored as an attribute on every point. You add gravity to that velocity each frame, then move the points by it.
Then you need collisions with the ground and the scene, so you're raycasting or checking proximity to your collider mesh, and pushing points back out when they go inside.
Then comes the hard part, self collisions. For every point, you need to find the points near it, check if they're overlapping, and push them apart. And one pass usually isn't enough, so you wrap it in a repeat zone and run it several times per frame. Then you add friction, so the sand doesn't slide around like marbles on ice. Then damping, so it actually settles instead of jittering forever.
And only after all of that, you instance your grain objects on the points, randomize their rotation and scale, and then you finally get to see sand.
It works. But that's a lot of work for something that should just be doable with one single click.
That's why I added a new sand template to the RealParticles addon.
You pick the template, hit play, and you get constant emission, self collisions, gravity, and grains that land on each other and actually pile up the way sand should. All the stuff I just described, the emission, the collisions, the friction, the settling, it's already set up for you. You don't have to build a node tree. You don't have to figure out why your particles are exploding on frame twenty. You just get sand.
I've also changed a few things in the addon, so if you have an older installation, you'll want to update to get the new template and the improvements that came with it.
And the addon comes with its own instances, so you can change the sand into whatever you want quite easily. Pebbles, gravel, debris, little rocks, candy, coffee beans, whatever your scene needs. Swap the instance, and the simulation keeps doing its thing.
Honestly, I think this is what Blender's particles should have been a long time ago. Not a giant toolbox you have to assemble every time, but something that just works when you need it, and still lets you go deeper when you want to.
So if you've ever tried to make sand, gravel, or any kind of piling particles in Blender and gave up halfway through a node tree, give the sand template a try. I think you're going to like it.
The history beats (two point five overhaul, the twenty twenty particle nodes prototype, simulation zones in three point six) are from memory and roughly right, so worth a quick check if you want them tight. I also guessed at friction and settling being part of the template; cut those if they're not.
