Water debugging

This chapter covers diagnostics while authoring and shipping water: ImGui overlay, viewport helpers, Registry knobs, GPU readback hooks, and common failure modes.

Water Diagnostics overlay

Gate: /O3DE/Gems/Water/Enabled and /O3DE/Gems/Water/DebugOverlayEnabled (default false). Requires ImGui.

Menu: Water ?Water Diagnostics.

PanelShows
Body tableEntity, type, priority, physics flag
Floater countActive buoyancy bodies
Water timeCurrent shared clock
QualityActive tier, GPU wave caps, ocean LOD caps
Query probeFollow camera or Mouse pick; XYZ; surface height / depth / flow / underwater / winning body

Use mouse pick along an estuary path to confirm surfaceHeight continuity when tuning Mouth Fade / Blend Band.

Viewport helpers (per component)

HelperWherePurpose
Show Flow ArrowsRiverFlow direction (and obstacle stamps)
Show Depth HeatmapRiverBed depth visualization
Uphill red stripRiver (Spline Z)Downstream Z higher than upstream
Waves PreviewAny bodySpectrum thumbnail at t = 0
Ocean validation labelsOceanDuplicate infinite ocean / missing waves

Settings Registry reference

Defaults: Gems/Water/Registry/water.setreg under /O3DE/Gems/Water/.

KeyDefaultPurpose
EnabledtrueMaster gate
PhysicsEnabledtrueBuoyancy system
DebugOverlayEnabledfalseImGui diagnostics
MaxGerstnerComponents16Asset-load Gerstner cap (lower only)
MaxActiveBodies64Soft registration cap
MeshBuildBudgetMs2.0Per-frame mesh publish budget
QueryCacheSlots256Query cache size
QualityTierHighLow / Medium / High
PrebakeArcLengthThreshold512.0Long-river AP mesh bake threshold (m)
Fft/EnabledtrueSpectrum ocean FFT
Fft/Resolution256FFT grid (tier may lower)
Fft/CascadeSizes[512, 64, 8]Cascade world sizes (m)
CausticsEnabledtrueFull-screen caustics
PlanarReflectionEnabledtrueHigh-tier planar reflection
PlanarReflection/MaxWaveAmplitude0.1Reflection clip / warp budget
PlanarReflection/Resolution00 = pipeline default
UnderwaterDoF/EnabledtrueUnderwater depth of field
SmallBodyBatch/CellSize512.0Small still-pond batch cell (m)
SmallBodyBatch/ZCellSize16.0Vertical batch cluster size (m)
Ripples/*see setregInteractive ripple pool
Particles/*empty pathsOptional splash / bubble / marine-snow assets

Additional advanced keys may appear in project overrides (for example InfoMap near-cascade or SceneColorCopy full-res). Prefer documenting project-local setreg diffs when shipping.

GPU displacement readback (advanced)

Atom bridge console hooks (for golden / CI, not day-to-day art):

FrameCapture.Begin WaterGpuDisplacementReadback <x> <y> [z…]
FrameCapture.End

CVar FrameCapture.LastResult.WaterGpuDisplacement reports dx dy dz, pending, or unavailable. Used with the golden table under Gems/Water/Code/Tests/Data/water_golden_gpu_displacement.json.

Troubleshooting

SymptomLikely causeWhat to try
No visible waterMissing TransparentPass / waterSurface draw list, or Gem disabledCheck log warning; confirm Enabled and pipeline
River floats / clips terrainSpline Z vs terrain mismatch; no carveDepth heatmap; Carve Terrain or brush the bed
No buoyancyNo rigid body; Affects Physics off; body not active in streaming cellEnable physics; keep ocean AlwaysLoaded; verify cell residency
Floater launchesToo few sample points / very shallow waterAdd samples; raise Linear Drag
Missing shore foamOcean shore not baked; falloff too smallBake Shore Distance; raise Shore Fade Distance / Bank Falloff / Shoreline Falloff
No underwater fogPoint outside XY body; DeferredFog missingProbe m_inWaterBodyXY; confirm DeferredFog in pipeline
Waves ?floater motionWave Sample Mode downgraded or custom time sourceUse Full; sync SetWaterTime / clear time source
Estuary height popNo blend / mouth fadeSet Mouth Fade Length and Blend Band ?see Recipes#estuary
Second ocean fails activateTwo unbounded oceansGive extras Region Entities, or remove the duplicate
Transparent sorting artifactsCross-waterline glass / particlesCompare WaterSamples/TransparentSorting; review material opacity modes
FFT ocean looks Gerstner-onlyLow tier or Fft/Enabled=false; non-primary Spectrum oceanRaise tier; ensure one Spectrum ocean owns FFT

Sample levels for isolation

LevelFocus
WaterSamples/StreamNarrow flowing strip
WaterSamples/LakeCalm lake + buoyancy
WaterSamples/OceanCDLOD ocean + shore
WaterSamples/EstuaryMouth fade + blend band
WaterSamples/RiverNetworkConfluences
WaterSamples/ConcaveLakeFar LOD shore clip
WaterSamples/RiverProfilesBed profile shapes
WaterSamples/TransparentSortingCross-waterline transparency

Path root: AutomatedTesting/Levels/WaterSamples/.

Next steps

  • Recipes ?recreate the sample setups from scratch.
  • Reference ?component and bus checklist.

Copyright © 2026 DawnEngine. All rights reserved.

DawnEngine is a commercial 3D engine distributed under the DawnEngine end-user license agreement. Engine binaries and source are proprietary and are not covered by the licenses below.

Documentation only: the prose and templates on this site are a derivative work of Open 3D Engine (O3DE) documentation by the O3DE Contributors, used under CC BY 4.0 (documentation content), Apache 2.0 (site code), and the MIT license (inline code samples).

The open-source 3D engine that DawnEngine is built on top of is Open 3D Engine . DawnEngine is not affiliated with, endorsed by, or sponsored by The Linux Foundation or the O3DE project. “O3DE” and “Open 3D Engine” are trademarks of The Linux Foundation.