This is a real-time discrete-element simulation. Each grain finds neighbours through a spatial hash, exchanges contact forces every frame, and lights up by how much load it carries.
Tilt the silo. Open the orifice. Crank the vibration. Watch arches form and collapse, and follow force chains as they snake from wall to wall.