Unless rain is especially important in your game I'd go with a fairly simple simulation like the one used for MotoGP described here by Shawn Hargreaves:
Jay (the lead artist) and I found one of those sprays like you use for misting plants, and spent some time squirting it on the office window, then examining the resulting droplets from different angles and against different backgrounds. Here's what we learned:
- Droplets are egg shaped: roughly oval, but wider at the bottom
- Droplets have no intrinsic color of their own, unless you shine a bright light on them
- Droplets refract light as it passes through them, so the scene behind them is inverted and distorted
- Pretty much the entire street outside our office was visible in every droplet (but upside down and mirrored)
- Although most droplets appeared darker on top and lighter at the bottom, we decided this wasn't an intrinsic property, but just because the sky was bright that day
...
First, we made a droplet texture. We drew the shape of a typical droplet into the alpha channel, and I wrote a function (using the MotoGP equivalent of a content processor) that generated 2D refraction offsets into the red and green channels.
We were already drawing the main 3D scene into a rendertarget, so we could apply postprocessing effects such as motion blur. It was trivial to draw a number of 2D droplet sprites over the top, using a pixel shader that sampled the droplet texture, used its refraction offset to compute texture coordinates into the main scene image, then sampled the scene at this modified location (a similar concept to this XNA Framework sample).
The linked article includes how they overcame performance challenges in order to maintain 60 fps performance.