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.
At a glance
Section titled “At a glance”| Use the ocean when | Use a discrete water body when |
|---|---|
| The water is “everywhere”: open world, sea horizon | The water has known bounds: a pool, lake, harbour, indoor cistern |
| Wave physics matters: vessels, surf, weather | Calm, contained, gameplay-defined surface |
| Long sight lines, varying depth | Short sight lines, fixed dimensions |
| One body across the whole level | Multiple independent bodies, each with their own look |
The ocean: BP_DynamicRealWater
Section titled “The ocean: BP_DynamicRealWater”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.
Mixing them in the same level
Section titled “Mixing them in the same 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.