Skip to main content
← Roadmap
🌊 Oceanology ProIn Progress6.0.0

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.


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

BeforeOceanology Pro
Source of the patternA baked sheet produced by the generator from its own preview spectrumComputed in the shader from the wave field the water body is running
Reaction to sea stateFixed at bake time; changing the wind does not change the causticsFollows the waves as they change
MemoryOne SubUV sheet or volume texture residentNo texture; instruction cost instead
Depth responseAvailable through the depth-animation bake and the depth SubUV functionDriven by the material's water-depth parameters at sample time
Photon grid resolutionUp to 4096
Water depthSet in centimetres, with a separate end depth for depth animations
Water material parametersCaustics Brightness, Brightness Adjust, Contrast, Scale, Fade In Distance, Finite Offset, Playback FPS, Shore Mip, Blurred Caustics
Depth-related parametersCaustics Water Depth Bias and Water Depth Caustics Spread
Position handlingRefract Caustic Position, plus a manual water-body index override for the wave lookup
Global ceilingCausticsMaxIntensity, a scalar in the water material parameter collection
Shipped texturesTiling HDR Texture2D, animated HDR SubUV Texture2D, animated HDR VolumeTexture

This is one entry on the Galidar roadmap. For what already shipped in each release, see the Changelog.