Tidal 2 URP

Frequently Asked Questions

Practical answers for common Tidal 2 situations.

Why does my object teleport to a huge negative Y?

You almost certainly wrote an unchecked GetWaterHeight result into a transform. GetWaterHeight returns float.MinValue (≈ -3.4e38) when there is no valid sample - outside a bounded body's rect, beyond clipmap coverage, or before the first GPU readback lands in the first frames of play.

The fix
  • Always test h > float.MinValue (or h < -1e30f) before using the height.
  • Or use TidalPhysicsFieldSubSystem.TryGetWaterSurface, which returns false instead of a sentinel.
  • Feeding an unchecked value into a transform triggers Unity "Invalid worldAABB" errors. See the Water Queries page.

Why is my water black in a build?

In player builds, per-object light probes are unbound for the fullscreen shading pass, which used to make the water and foam render black (worst at night). Tidal 2 binds ambient / lightmap data globally for that pass, so this is fixed. If you still see it:

Does Tidal 2 support VR / XR?

No. Experimental VR/XR integration was withdrawn from the 2.0 release (the OpenXR loader's play-mode initialization conflicts with editor workflows on some setups). VR support will return later as a separate, opt-in package configuration.

Can I have multiple water bodies?

Yes - up to 254 bodies (limited by stencil indices). Each body has its own settings, material, GBuffers, zones, and canvas data, so bodies no longer fight over global bindings. Note that per-body rendering-layer bits wrap past 32 bodies; that is visual sharing, not a failure. Water queries are per-body - resolve the right body with TidalManager.GetCameraTidalBody(cam).

Why is my zone or volume not affecting a body?

Scoping is now enforced per body. A zone or volume only applies to the bodies named by its Affected Bodies list and Affected Layer Mask. Check that the target body is in scope - a mismatched layer mask is the most common cause of an "inactive" zone or volume.

How do I make something float?

Add the TidalBuoyancy component to any Rigidbody and assign 3-4 Float Points (empty child transforms around the hull). It handles per-point uplift, air/water drag switching, current push from the flow field, wave slide, and roll/pitch stabilisation, and auto-binds to the first water body if none is assigned. It also ignores invalid water-height samples and self-recovers from non-finite poses. See the Buoyancy page.

Which platforms are supported?

Windows Standalone on D3D11 / D3D12 is the optimized and tested target for 2.0. Vulkan is not supported in this release (a fix is planned for a follow-up), WebGL is unsupported (compute shaders required), and other platforms/APIs are untested. Requires Unity 6 (6000.0+) with URP 17; there is no Built-in or HDRP support. See Compatibility.

Why won't my water body rotate?

Bodies are world-axis aligned by design - the simulation and mesh assume a horizontal water plane, so rotation is locked to identity and the editor reverts any rotation you apply. Position is free (Y = water level), and scaling folds into Body Size for bounded bodies (the transform scale always returns to 1,1,1).

Where can I get support?

For bug reports, questions, or support requests, email:

support@warpdev.co