I've recently worked a little with perlin noise and found it too be quite useful. For instance to do animated bumpmaps for EMBM to create realistic water. There are way more uses of perlin noise that that and I'm pretty sure plenty of you guys are familiar with it and have used it.
However, for perlin noise to be really useful I need to be able to dynamically create and upload new textures each frame, which takes quite a lot of CPU power ...
I thought of a solution to this, namely to put perlin noise textures into hardware. Exactly how to expose it into OpenGL i don't know but I guess it could be used the same way as other textures, you only pass it texture coords etc ... maybe it would need it's own targets, like GL_PERLIN_TEXTURE_1D, GL_PERLIN_TEXTURE_2D and GL_PERLIN_TEXTURE_3D or something ... but that's not an important issue right now.
Except for all those ways it could be useful perlin textures would also have several advantages over normal textures:
- It doesn't need any memory storage or uploads, evaluated directly from formula.
- No texture memory bandwidth needs during the rasterisation, could speed things up a bit.
- It has infinite resolution.
I figure there may be some drawbacks too (as always):
- May be a little expensive to implement in hardware? Not sure about that, but at least the 3D perlin function seams quite complex.
- Not sure about texture filtering. You do of course not need to take four samples and interpolate, one sample is enough since perlin noise is continious, but I guess you would need some sort of mipmapping. I'm not sure how that would be implemented, but it's probably solvable.
Now what do you guys think? Is this a good idea?




):
. nVidia implemented perlin noise in a vertex program example, so if something like vertex programs would be available on a per-pixel level, perlin noise might be possible. I don't think that current pixel shaders are up to that task yet, and implementing pixel shaders with even more functionality than current ones would be pretty tough in terms of hardware speed/cost.