Real-time Water Volumes

This method of rendering water volumes in real time was presented by Lionel Baboud and Xavier Décoret at the Eurographics Workshop on Natural Phenomena in 2006. It's a clever variation on parallax mapping commonly in use in more recent rendering engines. Parallax mapping and its ilk are pixel shader based volume ray tracing shaders that displace a texture coordinate by taking the view relative to the surface normal, and walking through the displacement map until an intersection point is found.

In Baboud and Décoret's method, two height-field maps are used; one for the surface of the water, and another for the ground surface. The computational time is related to the number of visible pixels, and the individual pieces of the algorithm are separable which means the computations can be distributed according to where it fits efficiently into a containing engine.

For each screen pixel a ray is cast. If it hits the ground heightfield before the water, the ground is lit and rendered. Otherwsie the ray is refracted and traced once more. If the refracted ray hits the ground heightfield, the lit ground is rendered with a caustic effect, otherwise the ray simply samples from an environment map.

They propose extensions for depth extinction of light, and reflection into the heightfield, as well as refraction of contained objects. Caustics are created by reverse tracing photons into caustic map once at the start of the rendering.


Content by Nick Porcino (c) 1990-2011