I have been doing some research on water surface rendering, and I am having great difficulty finding good information on it. What I am primarily interested in is the coloring and lighting effects on the water surface. Also, I have two restrictions: the renderer MUST NOT use pixel shaders, and it must not require an extremely finely tesselated mesh.
Probably the best source is the Gamasutra article by Jensen and Golias, which most people who are doing water rendering seem to be aware of. The link is http://www.gamasutra.com/gdce/2001/jensen/jensen_01.htm .
I have a few problems with this article. First of all, I dont have a degree in mathematics, and when they start using the Greek letters, well… its all Greek to me. Not to mention, I havent studied differential equations. The other problem I have with it is that it is largely theoretical, and does not discuss the specifics of rendering with a 3D API such as OpenGL or Direct3D.
Nonetheless, the article got me really excited when it showed this screenshot: http://www.gamasutra.com/gdce/2001/jensen/fig_3,4.gif
along with its wireframe version: http://www.gamasutra.com/gdce/2001/jensen/fig_3.5.gif . However, the author does not explain the technique used to achieve that in an detail.
Here is another water engine I found, which is ideally what I’d like to achieve: http://www.geocities.com/davidl1_2000/index.htm . If you look at the top screenshot, you can tell that the color of water is dependent on the viewing angle. Where the angle is greater, the water is more whitish-greenish, and when you are looking directly at it, the water is more darkish-bluish, which is an important property of water.
Finally, here is another demo I found: http://www.people.fas.harvard.edu/~reichard/water/
His demo does not run directly out of the zip, but after making a few changes I got it to run. He uses vertex colors to make the color of the water, along with an animated bump map which appears to be calculated in real time (havent looked deep enough into the code to confirm this though). Since he uses vertex colors, the water looks really great for a finely tesselated mesh, but looks terribly blocky for a coarse mesh. His demo also accounts for the fact that water looks more blue when looking directly at it, and more white-green when looking at it at an angle.
At this point, I dont have a specific question, but I am hoping someone can lead me in the right direction (discuss techniques, or point me to a website). I have not made up my mind on any particular technique. What I want to achieve is a realistic coloring/lighting of water surfaces that will work with a coarse mesh and doesnt require pixel shaders. Also, it must account for the view dependent nature of water coloring (e.g. more blue when looking directly at it, more white-green when looking at an angle).
Many thanks in advance.
[This message has been edited by ioquan (edited 09-10-2003).]