I've been playing around with shaders recently (learning how to make them slowly but surely!), and I decided to make a heat haze shader. It's
heavily based on EVOLVED's refraction shader (so kudos to him!) but has added support for texture scrolling and a transparency mask. All you have to do is create a normal map and a mask image. The normal map can be any old normal map, it just tells what the bumps on the heat haze look like. This texture scrolls across the object at a speed you specify. The mask controls transparency and is a black and white image where black means no heat haze and white means lots of heat haze. The mask does not scroll.
The heat haze effect can be applied to any object.
I've attached a demo with textures, lots of comments and some functions to help add the effect to any game very easily. With VSync off I get about 438 FPS. If you have any questions, feel free to ask. Also, if anyone wants to modify it/optimize it/make it better then please share what you've done

. If people want I could try to add texture tiling too.
Screenshot (it really doesn't do it much justice)
Simplest example I could think of (function declarations not shown)
Sync On
Sync Rate 60
SetupHeatHaze("FX/HeatHaze.fx")
load image "Normal Map.bmp",1
load image "Mask.bmp",2
Make object plain 1,20,20
SetHeatHazeOn(1,-1,1,2)
do
UpdateHeatHaze(0.0,0.005)
sync
loop
The attached demo should explain everything though.
Just a few ideas of things the shader could be used for (most of them are untested; they're just ideas!):
-Distortion near a fire.
-Distortion on the horizon in a desert.
-Distortion around an object (make a copy of the object, scale it up slightly and apply the heat haze effect to the copy)
-Water distortion (make a water plain of any texture and then make a heat haze object on top of it. Maybe if transparency permits you could make the water semi-transparent as well...)
-Distorted Tile Floor (same as water but don't scroll the heat haze.)
-Clear glass windows (don't scroll the heat haze.)
-Eerie distorted areas. (It's possible to change the color of the heat haze, see the SetHeatHazeColor command in the demo.)
-Circular ripple effect (make a mask image with a white unfilled circle on it.)

Guns, cinematics, stealth, items and more!