Caustics
Underwater light patterns: an editor tool that bakes caustic textures from a photon scatter, plus analytical and texture-driven sampling in the water and underwater materials.
Included in Oceanology Pro, Oceanology Lite and Riverology 3.
Caustics in Oceanology Pro are two halves that meet in the material. One half is an editor-only generator that renders caustic patterns to textures offline. The other half is the set of material functions and parameters that sample those textures, or compute a caustic pattern analytically, on the water surface and in the underwater post process. You can ship either half on its own, and which one you want depends on whether you need the pattern to follow your live waves or just to look right for a fixed sea.
The generator
The generator is an actor placed in a level for authoring and never shipped; its own header says it exists to help create static textures and is not meant to be used directly in a finished game. It builds a preview scene, scatters a photon particle grid across a water preview mesh, refracts those photons through a wave surface, and captures the accumulated pattern through an orthographic scene capture into a render target. It then normalises the luminance of the result and writes out a Texture2D. A separate control renders the pattern from the directional light through a light function material while you preview, and the plugin ships both a sun light function and a SubUV one.
Output and preview modes
- Render Single Frame Only, described in the tool as the only mode that does not require simulate mode to operate.
- Render Animation using Time, which renders a SubUV animation where each frame advances time by one over the frames-per-second setting.
- Render Animation using Depth, which sweeps water depth across the animation and uses a separate end-depth setting for the last frame.
- Two preview scenes are provided, a Pool Box and an Island and Ocean setup, with an XY scale that enlarges the preview without affecting the capture.
- A Show Analytical Caustics toggle swaps the rendered texture for a pattern calculated directly in the shader, so you can compare the two before committing to a bake.
Controls that matter for output quality
Caustic Mesh Resolution sets the photon particle grid, capped at 4096. Animation Frames sets how many frames land in the SubUV or volume result, and SubUV Final Resolution sets the size of that sheet. Downsample Output defaults to 1 and raising it to 2 halves the resolution, trading memory for texture filtering rather than for visible quality. A chromatic control expresses the difference in index of refraction between red and blue wavelengths, stretching each photon packet along that vector; the tooltip notes that pushing it far turns the result into something closer to a four-dimensional texture where frames are time and the colour channels are depth. Output can be written as HDR, and save name and path are set on the actor.
Sampling at runtime
The shipping water material wires two paths. One computes caustics analytically from the Gerstner wave field in the shader, so the pattern follows the surface that is actually on screen. The other plays back a SubUV animated texture at a Caustics Playback FPS. Additional functions ship for a static tiling pattern, a depth-driven SubUV variant, and two volumetric variants including one fed by the fluid simulation. Three textures come with the plugin: a tiling HDR pattern, an animated HDR SubUV sheet, and an animated HDR volume texture. The underwater post-process mesh material samples the animated HDR texture with its own Caustics Scale.
Texture playback against the analytical path
| Feature | Texture playback | Analytical path |
|---|---|---|
| Source of the pattern | A baked sheet produced by the generator from its own preview spectrum | Computed in the shader from the wave field the water body is running |
| Reaction to sea state | Fixed at bake time; changing the wind does not change the caustics | Follows the waves as they change |
| Memory | One SubUV sheet or volume texture resident | No texture; instruction cost instead |
| Depth response | Available through the depth-animation bake and the depth SubUV function | Driven by the material's water-depth parameters at sample time |
| Photon grid resolution | Up to 4096 |
|---|---|
| Water depth | Set in centimetres, with a separate end depth for depth animations |
| Water material parameters | Caustics Brightness, Brightness Adjust, Contrast, Scale, Fade In Distance, Finite Offset, Playback FPS, Shore Mip, Blurred Caustics |
| Depth-related parameters | Caustics Water Depth Bias and Water Depth Caustics Spread |
| Position handling | Refract Caustic Position, plus a manual water-body index override for the wave lookup |
| Global ceiling | CausticsMaxIntensity, a scalar in the water material parameter collection |
| Shipped textures | Tiling HDR Texture2D, animated HDR SubUV Texture2D, animated HDR VolumeTexture |