I'm making some water effects currently, but I'm running into a persistent question—what exactly would be the material setups, index of refraction, etc., to get truly physically correct water—be it fresh, salty, or otherwise polluted?
-
$\begingroup$ The Principled BSDF node is "physically accurate"... $\endgroup$– LinguiniCommented May 20, 2018 at 1:14
-
1$\begingroup$ It depends on what kind of water you're modeling. Principled is fine if you've got an opaque water with small displacement. If you're water is translucent, then you need to take into account the lengths of light paths through the water, possibly through Volume Absorption or Volume Scatter. Remember that principled only models surfaces, not volumes. If you have variable depth water than you have to account for that, most visible in breaking waves or curls. If the water is mixed, say at the outlet of a freshwater river into a sea, then you'll need textures to control the mix $\endgroup$– Marty FoutsCommented May 20, 2018 at 6:51
1 Answer
That's a big question. I don't have a complete answer, but I can answer for some parameters. I've made this answer a Community Wiki, so maybe others can fill in more.
Index of Refraction
The index of refraction (IOR) of Water doesn't vary much. It's approximately 1.333. This scubageek article references a table from "L. W. Tilton and J. K. Taylor, J. Res. Nat. Bur. Stand., 20, 419 (RP1085) 1938.":
Table 1: Index of refraction of water as a
function of wave length and water temperature.
----------------------------------------------
Wave Length
(Angstroms) T=10 C T=20 C T=30 C
7065 1.3307 1.3300 1.3290
5893 1.3337 1.3330 1.3319
5016 1.3371 1.3364 1.3353
4047 1.3435 1.3427 1.3417
It also references a table from "E. Dorsey, "Properties of Ordinary Water-Substance", (Reinhold Publishing Corporation 1940)." to show that the Index of Refraction doesn't change too much based on salinity. In the table below, they refer to the index of refraction as n(w)
:
Table 2. Changes in index of refraction due to salinity
--------------------------------------------------------
salinity
(gm/kg) increase in n(w) example
--------------------------------------------------------
5 0.00097 northern Baltic Sea
10 0.00194
15 0.00290
20 0.00386 bight of Biafra
25 0.00482
30 0.00577
35 0.00673 Atlantic surface
40 0.00769 northern Red Sea
Since our base value is ~1.33, an increase of 0.007 is a relatively small change. I suspect it would be noticeable if high-salinity water was in the process of mixing with low-salinity water, but it's probably too small to notice a difference if all the water has the same salinity.
Scattering
The appearance of an underwater environment is significantly affected by how light reflects off tiny particles in the water. Light tends to hit these particles and scatter off in different directions. If light scattered evenly in all directions, that would be referred to as isotropic scattering. However, light in water doesn't scatter evenly in all directions, so the term for that is anisotropic scattering.
Principled Volume Shaders, added in Blender 2.80, use Henyey-Greenstein scattering anisotropy. The Henyey-Greenstein function basically describes what proportion of light goes in each direction. It gives you a parameter you can adjust to make it kinda match different materials. -1 would be back-scattering, 0 would be isotropic scattering, and 1 would be forward scattering. As oceanoptics describes, the Henyey-Greenstein is an imperfect approximation for water scattering, especially at very large or very small angles, but a value of 0.924 looks reasonable.
This does vary based on what's in the water. There's also a question as to what color this should be.
Absorption
I'm not sure how to translate this into density / color, but this graph from p.454 of "Optical propagation in linear media: atmospheric gases and particles, solid-state components, and water" (2006) by Michael E. Thomas on light penetration of seawater illustrates the absorption of various wavelengths of light. It can be handy to view with a map of wavelength to color beside it, so I grabbed a copy of the Linear Visible Spectrum from Wikipedia.