I just inject a little extra height on each frame where the sand is supposed to fall. A simple distance to point.
Then the erosion solver tries to erase and spread it around. So thats nice.
I use the heightfield to scatter one layer of just dumb particles to get the general terrain.
Next i made a simple solver that just generates a few thousand points per frame and sctters them using the difference between two frames of heightfield as a density map. This way i get particles where there is movement. I then perturb them per frame using the heightfield gradient. These points die off after a while so that they stay roughly constant as new ones are spawned.
It works surprisingly well for what I need it for.
The system updates at ”Interactive rates” 🙂
A nice bonus is that it is just a shell of points so rendering is not insane.