Included in Oceanology Pro and Oceanology Lite.
Crates, debris and vehicles float according to their actual shape with no pontoons to author. Boats still get the pontoon system, now with an in-viewport editor for placing them by dragging.
In Oceanology Pro, buoyancy moved off the game thread and off the per-actor component. The OceanologyBuoyancyRuntime module registers a Chaos sim callback on the solver, and from then on any simulated rigid body that touches a water body gets Archimedes forces computed from its actual collision geometry. There is no component to add, no pontoons to place and no per-object density dial: the object's effective volume comes from its physical material density and its mass, so a wooden crate floats and a steel one sinks because of what they are made of.
For each interaction the solver walks the rigid body's shapes and clips them against the water surface. Boxes and convex hulls are handled directly: it tests every vertex against the plane, intersects the crossing edges, sorts the resulting intersection points by angle to close the cut face, and accumulates the submerged volume and the submerged centre of mass from the resulting tetrahedra. Buoyancy is then applied at that submerged centre of mass, which is what produces torque - a barge rights itself, a long log rolls, a half-flooded crate tips. On top of that, each submerged triangle gets a fluid force built from the relative velocity between the water and that point of the body, giving drag and an optional lift term for angled surfaces, so a rudder or a planing hull behaves like one. Large bodies are subdivided into eighths before the clip so a big collision shape is not treated as one uniform slab.
The game thread pushes a wall-clock water time into the sim callback every tick, and each water body's spline snapshot carries an immutable, UObject-free wave physics snapshot captured on the game thread. That lets the physics thread evaluate the primary and breaking wave displacement at each query position without touching a UObject, so a floating object rides the same animated surface that is rendered rather than a flat spline plane. Ocean bodies can additionally carry shoreline hole polygons snapshotted in world XY, so a land query inside a carved shoreline is rejected on the physics thread with no actor transforms to reconcile.
Each registered body hands down its transform, its centre spline, its body type and optionally its width and velocity curves. Only rivers apply a directional flow along the spline. Oceans and lakes deliberately leave that channel at zero, because a non-zero spline velocity on an open body drags every submerged object sideways across the whole surface. Spline evaluation is the expensive part, so computed spline keys are cached in a world grid. Where a baked shallow-water simulation covers the area, a dedicated sampler reads height, velocity, depth and surface normal from it instead, and a query that lands outside the baked coverage returns zero depth rather than water.
Vehicles and boats often want authored float points rather than emergent geometry, so UOceanologyBuoyancyComponent and its spherical pontoons remain, together with a full river behaviour block: downstream push, lateral shore push with a traversal path width, optional downstream alignment torque with its own stiffness and damping, and linear and angular drag. The editor gives that array a proper UI - add, duplicate, remove, one group per pontoon - plus a viewport pivot editor that draws each pontoon as a wire sphere you can click and drag, with socket-driven pontoons positioned by the mesh.
| Oceanology NextGen | Oceanology Pro | |
|---|---|---|
| Where it runs | Game-thread component tick, one per floating actor | Chaos physics-thread sim callback covering the whole world |
| Object shape | Authored pontoons, or a normalised voxel grid capped at 64 voxels | The object's real collision geometry, boxes and convex hulls, clipped against the water surface |
| Setup per object | Add a component, place pontoons or set voxel size, then tune body density, drag, heave damping and added mass | Simulate physics. Density comes from the physical material, volume from mass and density |
| Tuning surface | Dozens of per-component properties on every floating actor | Project-wide water properties, with the pontoon component still available where authored float points are wanted |
| Force model | Vertical displacement force plus per-voxel drag | Submerged-volume buoyancy applied at the submerged centre of mass, plus per-triangle drag and optional lift |
| Module | OceanologyBuoyancyRuntime, runtime, loads at PostConfigInit |
| Where it runs | Chaos physics thread, as a solver sim callback |
| Settings location | Project Settings, Plugins, Oceanology Buoyancy Runtime |
| Water density | 1 g/cm3 |
| Water drag / water lift | 1.0 / 0.0 (0 = no lift, 1 = standard lift) |
| Shape support | Boxes and convex hulls, clipped per shape |
| Bounds subdivision | Up to 2 levels, minimum subdivision volume 125 cm cubed |
| Per-step clamps | 500 cm/s linear, 5 rad/s angular |
| Surface touch callbacks | Begin and End by default, minimum 100 cm/s relative velocity |
| Spline key cache | Enabled, 300 cm grid, 256 cells per body |
| Water body types | River, Lake, Ocean and Custom |
| Console variables | p.Oceanology.Buoyancy.DebugDraw, .UseImplicitDrag, .bUseShallowWaterSimulation, .bUseAccurateIntegrationForSplines |
| Pontoon path | UOceanologyBuoyancyComponent with spherical pontoons, details panel and pivot visualizer |
This is one entry on the Galidar roadmap. For what already shipped in each release, see the Changelog.