Forum: Poser - OFFICIAL


Subject: Water surface from below: shader advice

AnAardvark opened this issue on Dec 15, 2009 · 9 posts


bagginsbill posted Wed, 16 December 2009 at 3:09 PM

I'm fairly certain the Fresnel node doesn't do this situation correctly.

When you're underwater, you are in a medium with an IOR of 1.33. To see anything above the water, which is in air with an IOR close to 1, the IOR ratio (what you should enter in the Fresnel node) is .75. The Fresnel node doesn't refract correctly with IOR less than 1, and it doesn't implement total internal reflection, either.

Total internal reflection, TIR, is a phenomenon created when light travels above a certain angle of incidence with respect to a surface where the IOR decreases. See this article for more info:

http://en.wikipedia.org/wiki/Total_internal_reflection

So - we have to build this ourselves. Now the question is - are you really going to be looking up through the surface? Because if you're not, then the entire visible surface will be past the angle where total internal reflection occurs. Basically, then, all you need is a Reflect node to implement a perfect mirror (which is what happens under TIR) and then just set up a good bump pattern on the water surface.

If you are going to look up, so that you can see some of the stuff in the air, then we need to use a more complicated shader. This will require a Refract node and a Reflect node and some more nodes to handle the angle of incidence to determine the mix.

In this render, I used a wide angle camera (focal length = 22 mm) and pointed the camera up so we can see some part of the surface where TIR doesn't happen. Look for trees and sky at the top. Where TIR does not happen and we can see through, it produces a fish-eye effect.

Also, to do this convincingly, you'll want to make your main light generate some caustics. And if you're not in a pool, but open water, you'll want to use Poser's Atmosphere to reduce visibility over great distances underwater.


Renderosity forum reply notifications are wonky. If I read a follow-up in a thread, but I don't myself reply, then notifications no longer happen AT ALL on that thread. So if I seem to be ignoring a question, that's why. (Updated September 23, 2019)