TidalBody Subsystems
The systems that make up a water body, and the order they run each frame.
Tidal 2 is a GPU FFT water system for Unity 6 (6000.0+) with URP 17 (RenderGraph). A single
TidalRenderFeature on the URP renderer drives all rendering, while each
TidalBody owns a set of loosely coupled subsystems. Every subsystem below can be
tuned from the TidalBody inspector or its dedicated system page.
FFT simulation
TidalCompute + TidalProfile
Three wave cascades (length scales) are simulated on the GPU each frame from the active water profile. The TidalCompute component owns the simulation and is usually shared across multiple bodies.
Quadtree ocean mesh
TidalOceanQuadMeshGeneratorSubSystem
A viewer-centred infinite ocean, or a bounded body ("Body Size") filling an exact rectangle. Tiles split around Points of Interest, and a LOD map is uploaded on every layout change so underwater reconstruction matches the rendered vertex density exactly.
Deferred-style water shading
shader Tidal/Tidal
Water geometry writes per-body GBuffers, then a fullscreen pass per body shades it (pass name
FULLSCREEN_SHADING in the Tidal/Tidal surface shader). See the
Tidal Surface material reference.
Underwater stack
UnderwaterPass, shader Hidden/Tidal/Underwater
A from-below surface buffer, a fullscreen fog / scatter composite, the meniscus line, a volumetric light chain (god rays plus point / spot scatter), and analytic cross-section masks. See the Underwater page.
Interaction canvas
TidalCanvasSubSystem
Clipmapped GPU layers - dynamic foam, interactive wake, and a flow field - following the Points of Interest. Covered on the Interaction Canvas page.
Baked zone system
TidalZoneSubSystem + zone components
Damping, height-modification, and flow-current zones baked into per-body maps. Zones re-bake on change with no per-frame per-zone cost. See Tidal Zone.
Physics field
TidalPhysicsFieldSubSystem
A GPU-baked height + normal clipmap read back to the CPU. It powers fast
GetWaterHeight / GetWaterNormal queries and buoyancy. See
Water Queries & API.
Volumes
TidalVolumeAnalytic, TidalVolumeSDF (via TidalVolumesSubSystem)
Carve water away (EXCLUDE) or contain it (INCLUDE), with optional pixel-exact cross-section masks ("Underwater Mask"). See Tidal Volume.
Planar reflections
TidalPlanarReflectionSubSystem
A mirrored camera per body, consumed by the surface material's Planar Reflection Strength and paused automatically when the camera is well below the waterline.
Underwater particles
TidalUnderwaterParticlesSubSystem
Camera-following motes and bubbles, procedural and deterministic, that dim with the sun except where point / spot lights reach.
Caustics
A baked light-transport tile, animated with the FFT and applied both above and below water. Tuned on the Shading & Caustics page.
Buoyancy
TidalBuoyancy
Float-point rigidbody buoyancy with drag, flow push, wave slide, and stability damping. See Buoyancy.
Per-frame RenderGraph pass order
All rendering happens inside TidalRenderFeature. Each frame it records three passes in
this order:
- TidalSurfacePass - per body: water geometry GBuffers (front faces), from-below geometry (back faces, only when that body's underwater is enabled and the camera is not safely dry), caustic map bake, fullscreen surface shading, and fullscreen from-below shading into the underwater-surface buffer.
- UnderwaterPass - cross-section entry mask (analytic fullscreen pass plus SDF mesh raster), the volumetric light chain (fixed-budget resolution), and the fullscreen underwater composite. Skipped entirely when the camera is safely above water with no visible cross-section volume.
- TidalMeniscusPass - the waterline film, drawn last so it sits on top of the fog.
- Bodies with Has Underwater off never pay from-below costs.
- The underwater stack records nothing when the camera is safely dry (with hysteresis to avoid oscillation near the threshold).
- Off-screen cross-section volumes are frustum-culled on the CPU - no cost.