Tidal 2 URP

TidalBody Inspector Reference

Every field of the TidalBody component, foldout by foldout.

TidalBody is the main scene component for a single water surface. It owns mesh generation, references a shared TidalCompute, and coordinates the zone, volume, planar-reflection, interaction, and underwater subsystems. Its inspector is organized into foldouts: Core, Underwater, Zones, Mesh Generator, Volumes, Planar Reflections, Interaction, Underwater Particles, and Mis. Field names below use their inspector display names.

Note: The water level is the TidalBody transform's Y position. Rotation is locked to identity and scale folds into Body Size - see Transform rules at the bottom of this page.

Core

The essential wiring of the body: which material and FFT simulation it uses, which camera it follows, and how its footprint and depth are defined.

FieldType · DefaultDescription
Surface Material Material · required The water material (shader Tidal/Tidal). Required. The inspector shows an Edit button that jumps to it. See the Tidal Surface reference.
TCompute TidalCompute · required The TidalCompute component running this body's FFT. Required; typically shared across bodies. See Tidal Compute.
Viewer Cam Camera · main camera Camera the mesh LODs and interaction clipmaps follow. Empty uses the main camera.
Update Material Properties bool · on Live-syncs inspector edits of the material each frame (CRC-gated, cheap). Leave on.
Show Material Lods bool · off Debug tint of mesh LOD rings (red / green / blue). Off for normal use.
Infinite Bounds bool · on On: the ocean extends infinitely around the viewer. Off: tiles fill exactly Body Size, and water queries outside the rect return the invalid sentinel.
Body Size Vector2 (m) XZ world size of the bounded body, centred on the transform. Yellow edge handles in the scene view resize it; the scale gizmo folds into it. (Formerly OceanSize; serialized data migrates automatically.)
Vertex Density int 8-400 · 15 Vertices per tile side. The single biggest mesh quality / cost knob.
Body Max Depth float (m) Metres below the body plane where underwater rendering stops. Keep generous with big waves; deep values do not cost performance.

Underwater

Controls the entire submerged stack - from-below surface, fog, meniscus, volumetric lights, and cross-section masks. Most feature toggles here can defer to the render feature's per-tier defaults so quality scales with the active URP renderer. See the Underwater system page for the full picture.

FieldType · DefaultDescription
Has Underwater bool Master toggle for the entire submerged stack (from-below surface, fog, meniscus, volumetrics, cross-sections). Off = zero underwater cost, including the from-below geometry passes.
Volume Masks enum · Use Render Feature The cross-section mask pass. Values: Use Render Feature Setting / On / Off. Inspector warnings appear (on the body and on the volume) when a volume requests a mask this setting disables.
God Rays enum · Use Render Feature Sun shafts underwater. Use Render Feature Setting / On / Off. When enabled, the material's God Ray Strength still shapes and enables the look (strength 0 = off regardless).
Volumetric Lights enum · Use Render Feature Point / spot light scatter underwater. Use Render Feature Setting / On / Off.
Volumetrics Resolution enum · Use Render Feature Resolution budget of the volumetric light buffer (longest side): Use Render Feature Setting / Half Screen / Fixed 1440 / 960 / 720 / 480. Fixed budgets cost the same at any display resolution; the buffer is blurred by design, so lower values mostly soften the glow. The buffer never exceeds half-screen.
Underwater enums
TidalUWFeatureMode { UseRenderFeature, On, Off }

TidalUWVolumetricsResolution {
    UseRenderFeature = -1,
    HalfScreen = 0,
    R1440,
    R960,
    R720,
    R480
}

Camera-following motes and bubbles are configured separately in the Underwater Particles foldout below.

Zones

Zones are baked per body into a zone map (height / damping / flow). Zone components are created via GameObject → Tidal 2 → Zone → Damping | Height Modify | Flow Current (default footprint scale 10×1×10, Affected Layer Mask = the Water layer). Zones re-bake automatically on change; there is no per-frame per-zone cost. Full details on the Tidal Zone page.

FieldType · DefaultDescription
Damping Zone component Calms the water inside its footprint - useful for harbours and sheltered coves.
Height Modify Zone component Raises or lowers the baked water height within its footprint.
Flow Current Zone component Bakes a directional current into the flow map, consumed by rendering, foam transport, and buoyancy.

Mesh Generator

The quadtree tile generator (TidalOceanQuadMeshGeneratorSubSystem). Tiles split around Points of Interest so detail concentrates where it matters. The generator uploads a LOD map (_TidalLodMap) each layout change so underwater reconstruction matches the rendered vertex density exactly - no user action needed.

FieldType · DefaultDescription
Points Of Interest Transform[] The ONE shared list of transforms (plus the camera, always POI 0) that both the mesh detail and the interaction clipmaps centre on. Add boats and characters here for high detail plus interaction around them.
Split / tile tuning float · int Split-distance, root-tile-radius, and tile-resolution style tuning fields that shape how aggressively tiles subdivide toward each POI.

Volumes

Body-level settings for the volume subsystem (TidalVolumesSubSystem) that uploads volume data to the GPU. The volumes themselves - EXCLUDE cavities and INCLUDE containers - are documented on the Tidal Volume page.

FieldType · DefaultDescription
Update Volumes bool · on Continuously re-upload volume data at the rate below. Moves, scales, and set changes always upload immediately regardless of this toggle.
Update Hz int 10-240 · 60 Upload rate while volumes are at rest.

Planar Reflections

A mirrored camera per body (TidalPlanarReflectionSubSystem) produces high-quality reflections. The result is consumed by the surface material's Planar Reflection Strength - a strength of 0 disables the camera entirely.

FieldType · DefaultDescription
Update Hz int 10-240 · 120 How often the reflection re-renders; the last frame is reused between updates.
Reflection Mask LayerMask Layers rendered into the reflection. Exclude Water and anything expensive.
Downscale int 1-10 · 2 Resolution divisor versus the screen.
Clip Plane Offset float 0-2 · 0.07 Pushes the mirror clip plane below the surface to hide wave-crest clipping.
Distance float 50-1000 · 300 Far clip of the reflection camera.
Reflect Skybox bool · on Renders the skybox into the reflection.
Allow Post Process bool · on Applies post-processing to the reflection camera.
Render Shadows bool · off Renders shadows into the reflection.
Automatic behavior
  • The reflection camera is hidden from the hierarchy unless the body's Debug toggle is on.
  • It pauses automatically while the camera is more than 1 m under the waterline (nothing on screen samples it there) and resumes instantly on surfacing.
  • Strength 0 on the material disables the camera entirely - no cost.

Interaction

The clipmap canvas (TidalCanvasSubSystem) drives dynamic foam, interactive wake, and the flow field, following the Points of Interest. Each layer toggles independently; a disabled layer costs nothing and all bindings stay valid. See the Interaction Canvas system page.

FieldType · DefaultDescription
Base Tile World Size float 10-80 m · 30 World size of the finest clip level; each coarser level doubles it.
Max Lod int 4-10 · 4 Number of nested clip levels above LOD 0.
Tile Resolution enum · 256 Texels per clip tile, shared by all layers (64 / 128 / 256 / 512 / 1024).
Clip Snap Meters float 0.25-5 · 1 How far a POI moves before tiles re-anchor.
Enable Foam Layer bool · on Master toggle for the dynamic foam layer.
Enable Wake Layer bool · on Master toggle for the interactive wake layer.
Enable Flow Layer bool · on Master toggle for the flow / current layer.
Wake Produce Foam bool · off Fast / steep wakes inject foam into the foam layer. Needs both the foam and wake layers enabled.

Underwater Particles

Camera-following motes and bubbles (TidalUnderwaterParticlesSubSystem), fully procedural (no assets) with deterministic positions. Particles dim with the sun (matching the material's Darkens With Sun) except where point / spot lights reach.

FieldType · DefaultDescription
Enable Particles bool · on Master toggle.
Radius float 2-40 · 12 Half-size of the particle box around the camera.
Mote Count int 0-2000 · 500 Number of suspended motes.
Mote Color Color Tint of the motes; alpha controls visibility.
Mote Size float (m) · 0.015-0.05 Size range of the motes.
Mote Drift float 0-1 · 0 Drift amplitude (m) applied to motes.
Bubble Count int 0-500 · 90 Number of rising bubbles.
Bubble Color Color Tint of the bubbles.
Bubble Size float (m) · 0.008-0.03 Size range of the bubbles.
Bubble Rise Speed float (m/s) · 0.25-0.6 How fast bubbles rise.

Mis.

Miscellaneous body-wide settings.

FieldType · DefaultDescription
Height Sampling Iterations int 1-6 · 3 Choppy-displacement inversion steps for CPU water-height queries. The physics-field bake uses the same count so GPU and CPU heights agree.
Run In Editor bool · on Simulate and render in the Scene / Game view without entering play mode. Drives the editor player loop, so other [ExecuteAlways] scripts tick too.
Debug bool · off Shows Tidal's hidden runtime objects (planar reflection camera, particle root, tiles) in the hierarchy and enables debug niceties.

Transform rules

TidalBody enforces these transform rules because the simulation and mesh are world-axis aligned.

Enforced constraints
  • Position - free; the Y position is the water level.
  • Rotation - locked to identity; the editor reverts any rotation.
  • Scale - folded into Body Size (bounded bodies) or reset (infinite); always ends at (1, 1, 1). The fold applies when the scale-gizmo drag ends.