

I have a modern iMac with 4-core i7 processor and pretty fast memory and a higher-end graphics card, and even on this computer I can only get a single 1024x1024 texture to upload each frame, at about 90fps. Sooner or later you end up realizing you need to use the CPU to do the logic you want to do, and that pretty much means you have to work with an array of data, and then use SetPixels32() to upload it to the graphics card every frame. You pretty much either can have physics without particle 'materials' interacting, or you can have particle materials without physics.

It makes collisions a bit easier but rebounding off objects then can only be faked and you can pretty much forget about anything that looks like proper physics, like clumps of particles rotating. But this then still requires a tonne of individual particles. So then you might look to processing the system as a grid, ie as a texture, of pixel data, and processing each individual pixel. Then you have to deal with what happens when objects touch each other/are adjacent and triggering off different interactions/changes - doing that in a physics engine like 'on collision enter' etc would be a massive amount of script processing. You can't use Unity's physics engine - you'll be dealing with hundreds of thousands of objects, that's just too many for performance. It is possible to do this in Unity but it isn't easy and performance is poor.
