New in v2.0
Water Shading & Caustics
Deferred-style GBuffer shading and FFT-driven dynamic caustics.
Deferred-style water shading
Water shading moved from per-tile forward shading to a GBuffer + fullscreen composite. Geometry tiles write a compact water GBuffer (normal, foam, surface height, world UV); a single fullscreen pass then shades the entire surface once per pixel - overdraw-proof and consistent at every distance.
- Energy-conserving PBR composite - Fresnel-weighted reflection vs transmission (reflections and refraction can no longer double-brighten), filtered-normal Fresnel with slope widening for stable grazing response, and distance-filtered reflection roughness so far water reflects like water instead of shimmering noise.
- Physically-gated underwater light transport - (1-F) transmission on entry and exit, sun in-scatter with correct phase geometry, and shadowed subsurface scattering with a true intensity ceiling.
- Subsurface scattering rework (
TidalSSS.hlsl) - a dual-path thin-layer + backlit BSDF for the sun and additional lights, above and below the surface, in Forward and Forward+. - WYSIWYG foam - foam is lit once and composited identically in editor and player builds, correct at night (no more black foam under moonless skies), with foam texture array sampling and new procedural sea-foam textures.
- Ambient / lightmap binding fix - ambient and lightmap data is bound globally for the fullscreen pass, fixing black water and foam in player builds where per-object probes were unbound.
- Per-body reflections - planar and environment reflections blend in smoothly from zero strength (no pop when raising the sliders), and planar reflection is now per-body.
Dynamic caustics
Real light-transport caustics driven by the live FFT surface - no scrolling textures. Each frame a grid of sun rays refracts through the actual FFT wave derivatives over one wave period; ray landing density forms the caustic pattern, which repeats to the horizon at near-zero cost.
- Baked light-transport tile - the caustic pattern is baked from the FFT wave derivatives, not from any texture.
- Three RGB depth slices for chromatic depth separation, plus a separable blur pass with per-slice radii.
- Resolution and blur quality dropdowns on the material.
- Additive-only compositing (caustics only ever add light - no darkening between rays), depth fade, and shadow gating with a tunable clip threshold.
- An ignore sun mode for unlit setups, and depth-parallax drift so caustics track correctly on vertical surfaces.
- Visible from above the water (through refraction) and underwater (as a post effect).
Note: The bake shaders (caustics, zone bake, physics field) must be in
Project Settings → Graphics → Always Included Shaders, or they will be
stripped from builds. Run the Validator (
Window → Tidal 2 → Validator)
- it checks this for you.