Shallow Water Transparency

Started by
3 comments, last by VladR 10 years, 11 months ago

I'm working on water effects right now, and I want to have transparency in my water that's dependent on how "deep" it is. In other words, it's really clear in shallow areas, and murky/opaque as it gets deeper. The way I'm thinking about doing this is adding a depth buffer to my cube map I'll be rendering to create the reflection and mainly, refraction in the water. The depth buffer should determine how far away the sea floor, and then using the depth values would determine how refractive (transparent, in this case) it is instead of just using a single alpha value, correct?

Advertisement

Well, the problem is that this is a hack and is not how a water body behaves, from optics perspective.

If you do it this way, then some object, floating on the surface of water, will have its bottom part perfectly visible through the water body when near the shore, yet the very same object, far from the shore won't have visible bottom part.

That would just look weird.

I suggest you make the effort and take into account Fresnel Reflectivity and Transmittivity and Specular Reflection and Transmission of the water surface.

VladR My 3rd person action RPG on GreenLight: http://steamcommunity.com/sharedfiles/filedetails/?id=92951596

Instead of using a cube depth buffer from your reflection probe (which tells you how deep the water is when viewed from that point in space), you should just subtract your camera's depth buffer value from each water pixel's depth value, which tells you exactly how much water there is along that viewing ray.

Which graphics API(s) are you using?

@VladR: I agree, that's not usually how water acts. Water doesn't use 6 cameras to take a constant snap shot and then wrap it around in a cube-like fashion based on its surface normals it's been consciously updating. I'm just kidding, lolbiggrin.png

One thing I have noticed, however, is that deep water doesn't really reflect things near the top either. Look at a boat in the ocean. Whatever part is in the water, usually isn't seen. I think this could do with how the light is scattered. The ocean looks nearly opaque, but again, I haven't been near deep water in a long time.

@Hodgman: I'm using OpenGL and OpenGL ES 2.0 in some cases (where it's feasible). All the shaders I write are tested on Macs and iOS devices in an attempt to keep things somewhat compatible. I also have iOS and Mac-specific features that use define-preprocessor boundaries to deep my dev environment from compiling incorrect platform-specific stuff.

What do you mean by reflection probe? Are you talking about the viewing ray, in this case, or the position in space where I'm rendering the cubemap for reflections.

Btw, have either of you found any good books on water rendering? I've been trying to find more resources on water rendering and how to build a decent particle system, but I've only found papers.

Btw, have either of you found any good books on water rendering? I've been trying to find more resources on water rendering and how to build a decent particle system, but I've only found papers.

It's been a while, I admit, but I found all I ever needed about water optics in Tessendorf's paper. I assume you have that one, right ?

VladR My 3rd person action RPG on GreenLight: http://steamcommunity.com/sharedfiles/filedetails/?id=92951596

This topic is closed to new replies.

Advertisement