Tidal 2 v2.0
GPU-driven water system for Unity 6 URP
Tidal 2 is a high-performance water system for oceans, lakes, and large-scale water surfaces. It uses GPU FFT simulation and scalable rendering to deliver realistic waves with predictable performance.
v2.0 is a near-complete rebuild of the rendering, simulation, and interaction stack - a new interaction canvas (foam / wake / flow), a quadtree mesh generator, deferred-style shading with dynamic caustics, baked zones, GPU water queries, and run-in-editor preview. See the changelog, or the upgrade guide if you're coming from v1.0.
Platform Support
Requires Unity 6 (6000.0+) with URP 17 (RenderGraph), compute shaders, and modern GPU features. See the Compatibility page for full details.
- Windows Standalone - D3D11 / D3D12
- macOS (Metal), consoles, and high-end mobile - untested for 2.0; validate and profile before shipping
- Vulkan - not supported in 2.0 (some fullscreen passes use quad-topology procedural draws Vulkan rejects; a fullscreen-triangle conversion is planned for a follow-up)
- WebGL - compute shaders required
- VR / XR - withdrawn in v2.0; returning later as a separate, opt-in package configuration
What's New in v2.0
How Tidal 2 works
One TidalRenderFeature on the URP renderer drives all rendering. A Tidal Body is composed of
several GPU systems:
- FFT simulation (
TidalCompute+TidalProfile) - three wave cascades simulated on the GPU each frame. - Quadtree ocean mesh - a viewer-centred infinite ocean, or a bounded body filling an exact rectangle; tiles split around Points of Interest.
- Deferred-style shading - water geometry writes per-body GBuffers; a fullscreen pass shades it once per pixel.
- Underwater stack - from-below surface buffer, fog/scatter composite, meniscus line, volumetric god rays + light scatter, and cross-section masks.
- Interaction canvas (
TidalCanvasSubSystem) - clipmapped GPU foam, wake, and flow layers following the POIs. - Baked zones - damping, height, and flow-current zones baked into per-body maps.
- Physics field (
TidalPhysicsFieldSubSystem) - GPU-baked height + normal read back to the CPU for fast queries and buoyancy. - Volumes - carve water away (EXCLUDE) or contain it (INCLUDE), with optional pixel-exact cross-section masks.
- Planar reflections, underwater particles, caustics, and buoyancy round out the body.
Per-frame render order
All passes run inside TidalRenderFeature (RenderGraph):
- TidalSurfacePass - per body: water geometry GBuffers, optional from-below geometry, the caustic bake, fullscreen surface shading, and fullscreen from-below shading into the underwater-surface buffer.
- UnderwaterPass - the cross-section entry mask, the volumetric light chain, 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 fog.