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 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.
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.
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.
| Before | Oceanology Pro | |
|---|---|---|
| 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 |
This is one entry on the Galidar roadmap. For what already shipped in each release, see the Changelog.