I just finished a short experimentation with clouds, and i like the result. I am combining two distorted fBm noise functions. A distorted fBm function is like your standard fBm, but instead of using Perlin noise for its basis, it uses distorted Perlin noise. It looks like this:
TFloat CNoise::distNoise(const SVec3D& pos, const TFloat distortion){ return(noise(pos + distortion * vecNoise(pos + 0.5f)));}SVec3D CNoise::vecNoise(const SVec3D& pos){ SVec3D res; res.x = noise(pos); res.y = noise(pos + 3.33f); res.z = noise(pos + 7.77f); return res;}
Here is an image of the resulting clouds: