Skip to content

Discrete water bodies vs ocean

DRW gives you two distinct water systems. They’re not interchangeable; each fits a different gameplay shape. This page is the decision guide.

Use the ocean whenUse a discrete water body when
The water is “everywhere”: open world, sea horizonThe water has known bounds: a pool, lake, harbour, indoor cistern
Wave physics matters: vessels, surf, weatherCalm, contained, gameplay-defined surface
Long sight lines, varying depthShort sight lines, fixed dimensions
One body across the whole levelMultiple independent bodies, each with their own look

A single GridManager per level. Infinite-feeling, GPU-driven, simulated waves with full spectrum control. Heavy lifting: every floating object samples it, every shoreline reads its depth map, every wake feeds back into it.

Strengths:

  • Realistic wave physics (FFT spectrum, four cascades, configurable wind).
  • Depth-based shoreline shading.
  • Caustics, surface masking, world-spanning interaction.
  • Drives the BuoyancyComponent on every actor without per-actor wiring.

Costs:

  • One per level. Conceptually a “world ocean”: not designed for many small instances.
  • The full ocean simulation cost is paid whether your scene is open sea or one tide pool.

Discrete water bodies: BP_DRW_Pool, BP_DRW_Lake

Section titled “Discrete water bodies: BP_DRW_Pool, BP_DRW_Lake”

Bounded volumes you place individually. Each has its own visuals, caustics, ripples, underwater post-process: independent of the ocean and of each other.

Strengths:

  • Many per level. Each pool / lake is independent.
  • Different visual presets per body: a swimming pool can be cyan-clear next to a brown lake.
  • No spectrum-driven waves: the surface is calm, predictable, and cheaper.
  • GDF-based boundary masking on pools (waves and ripples are clipped to the pool walls).
  • Buoyancy works inside them automatically: overlap detection routes the BuoyancyComponent to the right body.

Costs:

  • Flat surface only. No swell, no chop.
  • Pool boundary masking depends on Unreal’s Mesh Distance Fields being enabled at the project level.

Common and supported. A typical setup:

  • One ocean (BP_DynamicRealWater).
  • Pools as decorative gameplay water (BP_DRW_Pool).
  • Lakes as discrete inland water (BP_DRW_Lake).

Floating actors transition automatically: when a vessel overlaps a pool, the BuoyancyComponent samples the pool’s surface; when it leaves, it falls back to the ocean. You don’t wire this manually.