Physical Water

by Joshua Jennings in Surfacing


I'm having trouble seeing any godrays in the water, no matter what density or anisotropic scattering I set, what else can I do?

Godrays require very, very bright lights to work in water and won't respond to HDRI's either, far as I can tell. So you'll either need a sun lamp set somewhere between about 60 and 100 in strength, or the Nishita Sky environment texture.

The viewport performance in Eevee is really slow with large scale scenes, is there anything I can do about this?

Try hiding all your lights when previewing in the viewport, or even removing them altogether and only using a HDRI and/or the Nishita Sky environment texture if you can. Eevee unfortunately does not like very large transmissive/refractive objects and lights in the same scene together. If you know you won't be needing additional transparency using the slider (see FAQ on water surface transparency slider), set the material blend mode from alpha blend to opaque as well, under the viewport display settings. Alpha transparency is another sore spot for Eevee.

One thing to note though with using environment lighting only: what caustics Eevee does do will disappear if there are no actual light objects active in the scene, as environment lighting can't generate them in Eevee.

Is the surface dispersion power meant to be played with or should I largely leave it be?

The default value of 2 is the physically accurate input, anything else simply, well, isn't. How much you care about this particular nugget is up to you, but cranking it can result in some strange behaviour, such as the water appearing overly bright, alongside submerged object colours heavily "rainbowing" out.

What's the difference between the translucency and the water surface transparency sliders? Why are they the opposite of one another by default?

The translucency slider directly relates to the transmission, specifically the roughness, whereas transparency plugs into the alpha channel (see the FAQ on the transparency slider for more info) and only affects the water. Full translucency means transmitted rays are perfectly sharp, which is usually what you want. Decreasing it diffuses the rays and is good for adding murkiness to the water, however.

There's only one colour input for the water and I'm having trouble getting the water the colour I want, how do I go about colourising the way I want?

A lot is already happening with that colour attribute under the hood, so playing with it will probably have some unexpected results right off the bat. Suffice to say, desaturated and quite bright colours are your friend there, as oversaturating with any one colour can look a bit funny, and too low of a brightness results in reduced transmission, leaving you with just environment reflection (though this can be offset with the transparency slider). However, the behaviour of light in water is incredibly complex and depends on quite a few different factors, which I've endeavoured to make as available and easy to use as possible.

Two of the biggest contributors are in fact the water volume density and anisotropy, for starters. Positive (forward scattering from light sources) anisotropy will result in a much deeper and darker looking body of water, whereas negative (backward scattering to light sources) anisotropy will result in a much brighter looking body of water. For underwater, zero anisotropy is best for visible godrays from the side, while positive is best when looking directly at the sun from underwater. Underwater lighting can be also be tweaked via the refracted caustics intensity value.

Other than that, the other biggest contributor is in fact the global z axis depth of your object. The depth of your object in world space is actually being taken into account (provided that setup was done correctly: see documentation instructions) in what wavelengths are being absorbed, scattered, and by how much. Consider that lakes and rivers are much shallower than a vast ocean somewhere, for example. Depending on the density you set as well, this will play a substantive role in the colouring of your water.

The water surface transparency slider is set to zero by default, isn't water supposed to be transparent?

That slider is a non-physical slider that forces additional transparency on top the transmission, if you're having difficulty seeing through the water due to scale, lighting conditions, displacement, etc. While that transparency is still using Fresnel with accurate IOR and normals for the grazing angles to the surface, there's no actual refraction happening with the lighting itself, unlike transmission. It's literally just plugging straight into the alpha channel of the Principled BSDF shader. It's there for you mix in with the transmission for your convenience, however.

There are random black spots in the peaks and crests of the waves, what do I do?

First thing is to increase the water volume density. If there are still spots and/or the density is starting to get uncomfortably high, you may have to consider lowering the displacement values somewhat. I'm not entirely sure, but I believe light bounces can be lost in some of the narrower spaced transmissive areas, so boosting the volumetric density increases the chances of light rays being scattered out again. Speaking of rays, make sure your transmission and transparent bounces aren't too low in the render settings as well.

There are two dispersion sliders, what's the difference and when should I use them?

The two dispersion sliders are for the refracted caustics and for the surface of the water respectively. They are independent systems of one another and can be used together or not at all, but the refracted caustics dispersion will appear whilst inside the volume of the object itself, whereas the surface dispersion has no relevance beyond the outer shell.

$6.45

Have questions before purchasing?
Login to message

Details
Sales 30+
Dev Fund Contributor
Published over 1 year ago
Software Version 4.1, 4.0, 3.6, 3.5, 3.4, 3.3, 3.2, 3.1, 3.0, 2.93, 2.92, 2.91, 2.9, 2.83
Render Engine Used Cycles, Eevee
License GPL