Build an entire hydrology: rivers that flow down terrain into lakes and out to the ocean, with authored blend materials at the seams instead of hard edges. Plus islands and exclusion volumes to carve water away.
Oceanology Pro treats water as placed actors rather than one ocean plane. A river, a lake, an ocean and a custom gameplay body are all subclasses of the same base water actor, they all register into a shared Water Zone, and they all render through one quadtree water mesh. A mountain stream that runs into a lake, drains out through a second river and finally meets the sea is therefore one continuous water surface with one set of queries behind it, not four disconnected systems you have to reconcile yourself.
A Water Zone owns the tessellated water mesh and the Water Info texture array that every water material and every CPU query reads. Bodies register themselves to the zone whose bounds they overlap, and when zones overlap, a per-zone Overlap Priority decides which one claims the body. The mesh is a quadtree of tiles that collapses toward the horizon, and the zone can drive it either from the CPU quadtree or, through r.Oceanology.WaterMesh.GPUQuadTree, from a GPU-built quadtree with indirect draws. A JumpFlood distance field of the shoreline is computed in the same frame as the Water Info texture, which is what lets waves attenuate and break correctly as they reach land.
River bodies carry two explicit transition materials, River to Lake and River to Ocean. When the quadtree finds a river tile adjacent to a lake or ocean tile it selects the transition material for that pair, and the water mesh builds a dedicated material instance for each exact river-and-target pair, so both sides' wave bindings and simulation parameters live in one shader. Those instances can be republished after a runtime parameter change without rebuilding the whole mesh.
Buoyancy, swimming, AI, Niagara and your own Blueprints all read water through the same call, Try Query Water Info Closest To World Location, with flags for exactly what you need: Compute Location, Compute Normal, Compute Velocity, Compute Depth, Compute Immersion Depth, Include Waves, Simple Waves and Ignore Exclusion Volumes. The result separates the flat water plane from the animated surface and carries wave height, maximum wave height, the shore attenuation factor, the surface normal, immersion depth, flow velocity, the spline key and whether the point sits inside an exclusion volume. Because there is one path, the surface a character swims on is the same surface a boat floats on and the same surface the renderer draws.
| Oceanology NextGen | Oceanology Pro | |
|---|---|---|
| Water body types | Ocean and lake actors | Ocean, lake, river, custom body, island and water exclusion volume |
| Rivers | Transition handling existed inside the quadtree, but no river body shipped to drive it | Full spline river actor with per-point width, depth and velocity, plus authored river-to-lake and river-to-ocean transitions |
| Local fluid simulation | Not present | Native shallow-water 2D solver actors with source, force and wave contributor components |
| Codebase | 35,583 lines of C++ | 99,961 lines of C++ |
| Water body types | River, Lake, Ocean, Custom |
| Water zone extent (default) | 51200 x 51200 cm |
| Water info render target | 512 x 512 on the component, 1024 x 1024 for newly placed zones |
| Water mesh tile size at LOD0 | 2400 cm |
| Tessellation factor | 6 (range 1 to 12) |
| Max water mesh dimension | 256 tiles per axis |
| Wave systems per body | Gerstner, Spectral Gerstner, FFT, plus breaking waves |
| FFT resolutions | 256, 512, 1024, 2048 |
| Interaction ripple field | 1024 cells at 8 cm per cell, fixed 60 Hz |
This is one entry on the Galidar roadmap. For what already shipped in each release, see the Changelog.