   Animating a bumpmap (CG)
  Woooha!! My first bumpmapping demo is running!The effect I want to achieve is an animated water surface. Doing BM with a static texture (normalmap) is not that difficult but I have no idea how to animate the whole thing.My first idea was to precalculate 60 (or more) normal maps and to use a different one every frame. But this animated-texture-technique is not very professional I think ;-)Just think of the memory wasting!My next idea was to calculate the maps on the fly using some perlin noise function. When the heightmap is calculated it would have to be converted into a normal map.But this is IMHO really too much time consuming.Is there a better/faster way to generate normal maps?Maybe like getting the normals directly via some sin functions (without any textures) (How?)?Thanks, vK 
  If you''re doing something like a water surface why not make a single long texture and scroll it.  So you''d only use say 25% of the bumpmap at a time.  It would take a little more memory but would use  up no cpu time at all unless you count the code that you use to scroll it as particular cpu intensive . ;  You can either try to highly optimize your bump to normal map converter (using ASM and possibly SIMD). Running this in parallel to the GPU doing some rendering is quite easy. Or you can do the finite differencing directly on the GPU. I recall an nVidia paper that explained the later, but can''t find it on nVidias site anymore. Perhaps someone else has a link.;  If you have a greyscale heightmap you can use a pixel shader to convert it to a normal map with a sobel filter.  Game Programming Gems II explains how to do this and has the pixel shader source (ps 1.1.)  You could pregenerate different octaves of noise, upload them to the graphics card once and combine\animate them and use that pixel shader to generate the normal map.  Constantly sending a new texture from the CPU to the GPU seems pretty slow, although you could probably get it to work well in your small demo if you write some optimized CPU side code like Yann mentioned.  