Haha, it was very tricky to figure out my first time, too! Some tips to help you out:
The material for the ribbon is a bit different than other particles: the entire material gets stretched and tiled along the length of the ribbon. This means your textures need to be very long (think 256x32 pixels), and tile from left to right. Whatever size you use, all of your distortion cannot exceed the bounds of that texture size, otherwise you’ll be distorting a perfectly sharp rectangle.
For a good heat distortion effect, it’s a nice effect to actually use a panning, tiling, secondary normal to distort the UVs of the first normals. Mask the RG values from the second normals, multiply the strength down by 0.05, then add them to a texture coordinate and plug that into the UVs of the first normals. It looks very cool! But make sure you’re not distorting the normals too much, otherwise you’ll get very unnatural effects or exceed the bounds of the texture.
To fade out distortion particles, lerp between the distortion normals and a 0,0,1 constant (blue): Drive the lerp with the alpha channel from the particle color. This makes sure that as the particle fades out, the normal is softened until the refraction effect disappears. I can’t stress this enough: the refraction effect is totally dependent on the strength of your normals, not your opacity! This makes sense because if you just want heat distortion you don’t want the particle to show up as a color, but at the same time you need to see what’s going on with the distortion.
The only nodes you should plug into the Refraction input are a Fresnel function lerped between 1 and your index of refraction. The IOR value will control the strength of the refraction, but for some reason it didn’t work the way I had hoped in order to fade out the distortion effect, so make sure you just leave it at a constant value.
Ribbons themselves are a little tricky, but once you get the hang of it they’re really useful for things like smoke and distortion. What you’re doing is spawning points, and then between those points a spline curve is made. The particle exists along that spline curve between the particles. Typically you want to make sure the points don’t stretch out too much, otherwise the ribbon will look like a bunch of silly string, and you should definitely use tessellation to smooth out the ribbon trail from one point to another. For my smoke material, I set the spawn rate to 2.5 and the initial velocity is uniform (but not too wide) to simulate wind. In the ribbon data, I set the tiling distance to 120, checked on tessellation, and set the distance tessellation step size to 4, which gives you a fairly smooth-looking stream of smoke (but these numbers will change depending on the size of your ribbon. Mine was 25). I also made the size larger over time to simulate heat dispersing. This method looks better than any other I’ve used for heat distortion.
The upside to ribbons performance-wise is you’re not drawing a bunch of particles on top of each other in order to cover an area with distortion. The effect is fully connected and completely streamlined, so it looks and behaves more like a connected fluid (think the distortion and smoke from a candle or small fire). The downside is you need to cover a large area with transparency in order to see the ribbon, and last I checked turning on collision crashed the editor. So, no collision, and large transparency, but less overdraw and more realistic distortion effect.
I’ll see if I can post a video of it sometime.