Draw a spline, set width, depth and velocity at each point, and the current becomes something gameplay can actually feel.
A river in Riverology is a spline. You place points, and the water between them is interpolated from values you set on each point. That authoring model is the same in Riverology 2 and in the Pro core Riverology 3 inherits, but the core carries a richer per-point channel set and, more importantly, it carries velocity as authored data rather than as one global speed dial for the whole river.
In the core, each spline point carries its own depth, river width, water velocity and audio intensity, stored as interpolated curves along the spline. Inserting a point between two existing ones lerps the metadata rather than resetting it, so refining a curve does not destroy the profile you already tuned. Each channel has its own in-viewport visualiser you can toggle independently, so you can inspect width without velocity arrows drawn over the top of it.
Flow is not decoration. Buoyant objects in the core have a dedicated river behaviour block that reads water velocity and turns it into force, and every part of it is tunable per object.
Velocity is not queried object by object at runtime. The water zone renders a water info texture across the region, packing flow magnitude and direction, with magnitude normalised against a global ceiling exposed as a console variable. Materials, buoyancy and Niagara all read that one source, and a blur pass smooths the velocity field before anything consumes it. On the Niagara side, the water data interface returns water velocity together with surface position, water depth, plane normal and wave height at any point, which is what lets foam, spray and floating debris follow the current without bespoke plumbing per effect.
| Before | Oceanology Pro | |
|---|---|---|
| Width per point | Taken from the spline point's scale | An explicit river width channel with its own visualiser |
| Depth per point | Taken from the spline point's scale | An explicit depth channel, default 150 |
| Velocity per point | No per-point channel; flow follows the spline direction with globally tuned speed parameters | A per-point velocity scalar, default 128 |
| Surface geometry | Spline meshes generated at a fixed segment length you set | One spline mesh per spline point, width evaluated per key |
| Audio along the river | Audio cue assets with no per-point intensity channel | A per-point audio intensity channel on the spline |
| Buoyancy tuning | Automatic downstream force; tuning limited to the object's own physics settings | A river behaviour block with push, shore push, alignment torque and upstream rules |
| Default depth per spline point | 150 units |
| Default river width per spline point | 2048 units |
| Default water velocity per spline point | 128 units per second |
| Default audio intensity per spline point | 1.0 |
| Maximum velocity encoded in the water info texture | 1024 units per second, adjustable by console variable |
| Velocity blur radius in the water info pass | 1 by default, range 0 to 16 |
| River traversal path width, buoyancy | 300 units |
| Maximum river push force, buoyancy | 10000, with shore push capped at 300 |
| Downstream alignment defaults | Strength 0.05, stiffness 20, damping 5, maximum acceleration 10 |
| Riverology 2 debug tools | Unscaled spline width 75, plus spline width, per-point string and surface entry/exit debug draws |
This is one entry on the Galidar roadmap. For what already shipped in each release, see the Changelog.