Alright, normally I would leave this kind of post alone but this idea really intrigues me. One question needs to be answered before I can really help you out though. What scale are you looking for. I think others were saying 2d and 3d are a big difference was because if you used particles you could do it easily. But only a small number of particles could be done this way before it got out of control and takes up all your CPU's power. So are we talking a small pond, a lake, ocean, what?

Also what kind of deformation speeds are we looking at here? If calculations need to be done quickly due to a large area being changed quickly some techniques can't be done.

Are you doing an RTS and doing a top-down view? Or are you just saying that for reference? Are you using a box or mesh for the water, or particles, or something else? Also how accurate does this need to be, does it just need to look nice or are we simulating real water here?

Based on what you said I'll give my best idea a foot forward. What I would suggest is if you are using particles all you need to do is give them some physics, tell them to fall until something obstructs them and bounce with a certain trajectory (according to what the normal of what the water contacts with) and that would solve your problem easily, however is computer intensive with massive volumes of particles.
Probably over a large area, if you aren't looking for super accurate results you could combine blocks of water with particles of water, I'll go into more detail:
You have a box that is serving as your water, this, for whatever reason you decide, is told to lower because of the water going somewhere else. Either a invisible box, or a bunch of rays will lower with the water to look for for obstructions for the water. You take water particles and bounce them off this obstruction for a small distance, if it hits water, it expands the water by a extremely small amount, if it hits land, it records the distance it moved, and bounces again, if it doesn't move a certain amount and hasn't hit water it creates its own water block of the water in the area. Every water droplet (particle) will either create its own water box or find its way to an existing block of water when it can't move anymore.
Things to watch out for: The water droplets "contribution" to the water supply it finds has to be really small. All the particles of water formed during a drop in the main water box has to have a smaller "contribution" then what is dropped by the main water box, otherwise an infinite loop will arise.

I really hope this is a main part of your game because unless your designing a small field to put this in (and can use the particle method), this could take up a lot of effort to make. Otherwise I suggest that unless you have a large amount of programming experience and want to do this on a large scale, this just isn't a smart use of resources for a minimal part of a game.

Good luck,
Trooper119


A clever person solves a problem.
A wise person avoids it.
--Einstein

Currently Codeing: Free Lite-C