so water, just like the sand and the dirt, is a ball, a much smaller ball than the sand and the dirt. it is using and simulating its physics through RigidBody2D, with a physics Material 2d that ensures 0 bounciness and 0 friction.
Then I object pool it to ensure the first burst is not bringing on a huge frame drop and let them sit. The water is captured by another camera, that has slightly smaller resolution to give it a blurry effect. then I apply a shader to it. a shader that takes all the objects in the set layer only, (in this case water but worked the same for dirt, and creates a small outline with all the objects in set layer, once they are close to each other, it looks like a fluid, (the friction you give to it has more or less viscosity ). Then you work a bit with the already existent shader to make it look good.
The issue when it comes to performance, is that in order for the water to behave like watter, it needs to be constantly simulated, and having such small particles, it is hard to have enough and still keep the frame rate. unlike the dirt and sand, where I stop the simulation once they stop moving. so no matter the size of the particle, it is not simulating much ( another nice performance trick we could use from here is to make it a single mesh once the balls stop moving for dirt and sand) .
Hopefully I've responded to your question :D