I did not read the whole thread, but I wanted to reply to some of the things I saw in the first few posts, and give some advice based on my experience with implementing water rendering.
First of all, fresnel refractions are only applicable to shallow water in which you can see through to the bottom, and therefore are not used in oceans at all. Plus, the technique used to achieve them is best suited to man-made geometry like a swimming pool, and not for things like shallow ponds. Fresnel refractions arent what make the water look less plastic. In actuality, water looks plastic if the intensity of the cube map (cube maps are used for reflections and other coloration effects - see Jensen’s article) is too high. This can be reduced by using alpha transparency and fiddling with texture combine settings with GL_ARB_texture_env_combine.
As for real-time generated bump maps (or precalculated ones, for that matter), what Jensen is referring to is EMBM using a bump map and a cube map. I have not been able to implement the EMBM technique because my video card does not support the neccessary extensions, but this will give you a huge improvement over a cube map with normals specified per vertex.
A note on calculating bump maps, waves, etc. I would not suggest trying to calculate this stuff in real time. I found an open source demo that implements many of the techniques described in Jensen’s paper. I hacked it to do two things: create an animation that will repeat after a certain amount of frames, and write this animation (wave geometry and bump map) out to a binary file which is then loaded by my program. If anyone is interested, I will make my hack available on my website. Using the precalculated animation is much easier to implement, and runs much faster, but it requires a significant amount of memory.
I would say that you can count on at least using one texture unit for a cube map. The cube map should be taken from your skybox, and modified in an image program to add a transparent gradient over the skybox image which will give you different colors based on the viewing angle. After you do this, the cube map for the water will be darker/bluer/greener than your actual skybox image. You can then “re-burn” in the image of the sun to get highlights from the sun.
Btw, here are the latest screenshots of my water engine (top 3 are newest) http://users.ms11.net/~ioquan/j2.html .
I was going to write a tutorial on water rendering, but I was never satisfied with the results I achieved. This is mainly because I couldnt do the EMBM effect with my video card.