Vav Labs

Godot 2D water In development

Top-Down Water 2D for Godot

A top-down 2D water system for Godot 4.

Shape the seafloor of your lakes, rivers, and seas. Let boats run aground in the shallows and hide submerged sprites behind underwater terrain.

Author, render and play. Captured in Godot 4.7.2, Compatibility renderer. No audio.
Read video description

Build the lake · 0:03 A water surface is added over the empty basin. Its ellipse is fitted to the lake, a water material is chosen, and depth and shoreline settings are adjusted. This analytic lake shape renders directly, without a map bake.

Bake the river · 0:21 The river curve is edited in Godot, its maps are baked and the result is inspected. Only the river curve edit is shown at 2× speed. The other selected editor steps retain their original speed.

Render · 0:30 A sunken ship and fish appear beneath the clear basin. A short night view shows a boat light and glowing fish.

Play · 0:45 A character enters the water and boards a boat. The boat then travels along the river, leaving a wake.

Release updates · 0:57 The addon is in development, with the first release planned for Q4 2026. The final card points to this page for release updates.

Water rendering and gameplay components read the same authored depth.

From the editor to the game

Make water depth part of the scene

A shallow crossing needs to look shallow and give a boat the right clearance. Author the depth once, then use it for the underwater view and the interactions above it.

Curve → bake → result. Selected editor steps at their original speed. No audio. Use fullscreen to inspect the controls.
Read video description

0:00–0:12 The river curve is shaped in Godot's 2D editor, with the water-authoring dock visible beside it.

0:12–0:20 The river maps are baked from the edited curve.

0:20–0:24 The baked river follows the curved channel. The editor view shows the resulting shoreline and underwater bed.

Author

Shape the water in your level

Draw a river curve, bake its maps and inspect the result in the 2D viewport.

A submerged sprite partly hidden by a shallow ledge, beside a fully visible sprite in deep water.

Render

Give the underwater world relief

Show the sloping bed through the surface. Fish and scenery at depth can hide behind a nearer ledge.

Tiles → water bake → running scene. Editor timelapse, then real-time playback. No audio.
Read video description

0:00–0:03 In Godot's editor, tiles form a pond and its surrounding path. These selected editor steps are a timelapse.

0:03–0:07 The water coverage is baked to fit the TileMap shoreline, followed by a depth bake from tile data. The editor steps remain a timelapse.

0:07–0:10 The completed tiled pond runs in Godot at its original speed, with animated water and fish beneath the surface.

Play

Bring water into your tile maps

Build water coverage and depth from your tiles, then see the tiled pond running in Godot.

Inside the addon

Godot 2D water authoring, rendering, and interactions

Build the water your level needs. Open any feature for its tools, components and controls.

Shape shallows and deep channels

Authored bathymetry defines the shape of the bed beneath the water. You store it in a depth profile or depth map and use it for rendering and gameplay.

View details: Shape shallows and deep channels

Feature details

Shape shallows and deep channels

Shape a shallow shelf, natural bowl, steep bank or terraced lagoon. Edit a custom profile, use a raw bathymetry map, or paint local adjustments in the 2D viewport.

The brushes and fills target the final water depth, with a cursor readout that shows what the current map can represent. Shape a ford through a river, deepen a harbour entrance, or cut a trench beside a shelf. Paint local tint where the water needs a different colour without changing the whole material.

Water level is an authoring setting, separate from the stored map. Adjust it without repainting the bathymetry. Rendering and runtime depth queries use that level together with the authored depth.

Underwater terrain and sprite occlusion

Give the bed relief, refract the scenery and hide submerged sprites behind the terrain.

View details: Underwater terrain and sprite occlusion

Feature details

Underwater terrain and sprite occlusion

A seafloor with relief

Assign a Sprite2D or TextureRect as the bed source. Its texture and placement stay connected to the water as you move the source or replace its artwork. The renderer follows the view ray through the water to the shaped bed, so slopes, ledges, and walls affect which part of the underwater terrain is visible.

Independent bodies of water have their own projection centre, with adjustable tilt, direction, and perspective. You can share the projection settings between basins while each retains its own centre. Camera movement and zoom preserve the authored projection.

Objects at their own underwater depth

Place fish, plants, submerged ruins, or other sprites at individual depths. They use the same projection and wave refraction as the bed, with the same absorption, water veil, and depth blur. A nearer part of the seafloor can hide all or part of a sprite behind it.

Keep your existing controller. The addon handles how the submerged sprite appears in the water, while your code controls its position and movement.

Control how the depth looks

Tune shallow and deep colours, or supply a colour gradient over depth. Adjust absorption, scattering, bed visibility, wet-bed darkening, and depth blur to move between clear shallows and water that obscures the bottom.

Surface lighting adds stylized sky reflection, sun glint, and animated caustics. Optional Light2D support connects the water to your scene's lighting. Self illumination and molten material controls support lava and other luminous surfaces. These controls work alongside the authored depth and material preset.

Ground boats in shallow water

Use the included boat controller with draft, drag and grounding. Add buoyancy, wakes and ripples to floating props.

View details: Ground boats in shallow water

Feature details

Ground boats in shallow water

Boats with draft and grounding

The vessel component reads water depth across its sampling points and compares it with the hull's draft. It tracks clearance, bottom drag, and grounding. The included boat controller applies the corresponding water drag and propulsion response, alongside steering, forward and reverse thrust, and braking.

The boat template includes its vessel and wake components. Drive it with the default arrow-key or gamepad controls, bind your own input actions, or supply helm input from a script.

Buoyancy and floating props

The buoyancy component uses the body's mass, displacement capacity, and available water depth to track floating, depth-limited, and overloaded states. It represents vertical submersion while the object moves in the 2D navigation plane. Optional angular drag and current response support floating objects that turn as they drift.

Wakes, ripples, and displacement

Moving vessels produce an analytic wake and a persistent foam trail. Ripple emitters support individual events, bursts, and automatic emission. Persistent displacement sources let hulls, swimmers, and floating props depress the surface.

Interaction areas expose water entry and exit events for your own game logic. The components can be combined separately, so a prop can float and make ripples without needing a boat controller.

Shape the shore around your level

Draw coastlines, trace islands, or start from river paths and tile maps. Bake coverage, collision and navigation from the shape.

View details: Shape the shore around your level

Feature details

Shape the shore around your level

Start with a circle, ellipse, rectangle, rounded rectangle, triangle, or ring. Draw a custom polygon for a particular coastline, use a closed path, or derive water coverage from a TileMapLayer. Coverage groups combine water outlines and land cutouts within one body of water.

For islands, select the sprites that represent land and trace their visible outlines into the water coverage. Retrace them after moving or repainting the islands, or draw the land outlines yourself. Boats, crates, and fish remain separate from that land selection.

The editor can bake coverage, collision, and navigation from the authored shape. For rivers, one curve defines the channel's width and current direction.

Make waves follow the coast

Bring waves toward beaches and islands. Tune the surface, shore foam and shallow-water motion.

View details: Make waves follow the coast

Feature details

Make waves follow the coast

Set the surface's wave direction, wavelength, speed, strength, detail, and crest shape. Give shallow water a calmer or sharper wave character, with a controlled transition into the deeper water.

Optional shore waves follow the actual coastline. Their crests run parallel to the shore and travel toward it, fading with distance and local depth. Use them around a beach, a bay, or islands. They fade out at deep cliffs and where opposing shores leave no clear approach direction.

Boats and floating objects can sample the same surface motion that the renderer draws, including the shallow-water and shore-wave adjustments. Shoreline foam, current foam, and ripple-driven impact foam provide separate controls for the surface detail.

Currents that move waves and objects

Paint a current or derive it from a river. Let it bend around obstacles, steer waves and carry floating props.

View details: Currents that move waves and objects

Feature details

Currents that move waves and objects

Paint local current direction and speed, or bake the current from a river curve. An obstacle-flow bake bends the authored field around scene colliders, so a rock can redirect the current without requiring you to paint every deflection by hand.

Flow maps drive visible current patterns and can steer the waves. The same field is available to the runtime components for water response, drift, and drag. A crate can turn as it drifts when the current pushes differently on each side. Multi-point sampling supplies that rotational response.

Wave steering is adjustable independently of gameplay flow. Reduce its influence for a partly wind-driven surface, or turn it off while retaining the current that moves objects.

Take characters into the water

Read wading and swimming states, show partial submersion and trigger entry or exit effects. Keep your character controller.

View details: Take characters into the water

Feature details

Take characters into the water

Wading, swimming, and immersion

Use continuous immersion and stable immersion thresholds to drive transitions between dry, wading, swimming, and fully submerged states. The submerged-sprite component crops or tints the part of a character beneath the water, while entry and exit events can trigger splashes, particles, and your own audio.

The swimmer template includes the water interaction components. Connect it to your character controller to define movement and swimming behaviour.

Connect water entry and exit signals to your game logic. Add ripple emitters and displacement sources to give a moving swimmer a visible response at the surface.

Choose the look for your world

Start from seven materials, including lake, sea, swamp and lava. Use Pixel Art mode while keeping the same authored depth.

View details: Choose the look for your world

Feature details

Choose the look for your world

Seven material presets provide starting points: Lake, River, Shallow Sea, Deep Sea, Swamp, Lava, and Toxic. Change the material's appearance while retaining the water's shape, bathymetry, and flow maps.

Pixel Art mode works across the presets. It provides posterized colours or an authored palette, a hard game-pixel shoreline, snapped dynamic effects, and controlled wave refraction. Bed projection and underwater sprite occlusion remain part of the rendering. Turning the mode on leaves the original preset resource intact.

Continuous water across map chunks

Build continuous water from managed chunks, with depth and flow painting, batch baking and effects that cross the boundaries.

View details: Continuous water across map chunks

Feature details

Continuous water across map chunks

For water that spans multiple chunks, the optional Water World module provides a shared set of settings and a common clock. A boat can cross a chunk boundary while its hull samples the water on both sides. Each sampling point queries the chunk beneath it.

The editor creates and manages the grid from polygons, closed paths, outline groups, River sources, and TileMap sources. It bakes coverage with neighbouring outlines and validates coverage, depth, and flow at the seams. Managed chunks support depth and flow painting, with batch Depth/Flow baking across the grid. Ripple, wake, and displacement events are routed to the loaded chunks they overlap. Foam trail history follows a moving emitter across chunk boundaries.

Runtime add and remove operations connect this system to your game's scene loader. Off-screen upload culling avoids sending unnecessary render updates while water sampling and effect timing continue. Diagnostics show unavailable chunks, effect budgets, and seam disagreements.

Continuous chunked water also supports the independent-basin bed-projection model. These authoring and projection workflows are included in the first release.

Built for

Where a top-down water addon fits

Build the water around the routes, scenery and interactions your game needs.

Naval and coastal games

Give boats navigable channels, shallow hazards and visible wakes.

Island survival and fishing

Shape beaches and currents, with swimming states and fish at their own underwater depths.

Top-down exploration

Build hidden ruins, shallow crossings and pools that reveal the world below.

Colony simulations

Use queryable water depth and flow alongside coverage-based collision and navigation authoring.

Tactical river crossings

Author a ford or a deep channel, then use the depth to decide which units can pass.

The package

What's included

  • Editor plugin and water-authoring dock
  • Runtime water, world and interaction components
  • Surface shaders, bed projection and underwater sprites
  • Seven material presets and Pixel Art controls
  • Four templates: minimal setup, full surface, boat and swimmer
  • Setup documentation and API help inside Godot's editor
From an outline to a working scene
  1. Create the water. Add a surface or river, choose its shape and preset, and define any islands.
  2. Author the depth and current. Set the depth profile or bathymetry map, paint local changes, and bake the outputs your scene needs.
  3. Set the underwater view. Assign a bed source, tune projection and clarity, and place underwater sprites at their depths.
  4. Add interactions. Use the boat or swimmer template, or attach the individual water components to your own actors.
  5. Inspect and refine. Preview depth, check current direction, and review the editor's next required action after an authoring change. For Water World, validate the seams and inspect chunk and effect diagnostics.

Editor actions support Undo/Redo, and the dock identifies maps that need rebuilding. You choose when to bake and save. Progress and cancellation are available for supported background bake stages.

In development

Availability and pricing

Top-Down Water is a water addon for Godot 4. The first public release is planned for Q4 2026.

Pricing, licence terms and purchase details will be announced before release. The addon is in development and isn't available for public download yet.

Included in the first release

The first release includes the complete system for individual basins and connected, chunked water. River and TileMap sources, depth and flow painting, batch baking, and independent-basin projection are included.

Before you build

Questions before you build

Is there a Godot addon for top-down 2D water with depth and boats?

Top-Down Water 2D for Godot is an addon with authored depth maps, underwater terrain rendering, and boat draft, drag, grounding and wake components. It also includes buoyancy and swimmer immersion components. The first public release is planned for Q4 2026.

Is Top-Down Water a water shader?

It includes water shaders, but they're one part of the addon. The surface shaders draw the water, the bed beneath it and any underwater sprites. You shape the water, its depth and its currents with the authoring tools in Godot's editor. Then the runtime components for boats, swimmers and floating props read that same depth, so a boat runs aground where the water looks shallow.

Does it work with the Compatibility renderer and web export?

The addon uses Godot's Compatibility renderer. The captures on this page were made in Godot 4.7.2. A Web export preset is configured, but the release build still needs browser compatibility and performance checks.

Is this a fluid simulation?

It uses authored depth and flow fields, procedural surface motion, and runtime water responses. Currents come from your maps and authoring tools. The system does not solve a time-dependent fluid simulation or provide volumetric 3D water.

How deep can the water be?

Depth profiles and raw bathymetry depth maps support up to 30 metres, as do underwater sprite depths. Painted depth maps hold local offsets of up to 10 metres in either direction from the automatic base. For a deep painted basin, shape the base first, then paint the adjustments.

Can I keep my existing character controller?

Yes. Water sampling, immersion, buoyancy, and presentation are separate components. Read their state or connect their signals to your controller. The swimmer template supplies the water interaction stack. Your controller decides how the character moves.

Can the projected bed use any scene artwork?

Without an assigned bed source, the water reads the scene beneath it. Direct bed projection uses a supported Sprite2D or TextureRect source. A source rotated or flipped relative to the water, or a tiled TextureRect, falls back to the scene read with a warning. A TileMapLayer can supply water coverage and scene background artwork, but is not a direct projected bed source.

Does Water World support the same authoring as independent water?

Chunked water supports polygons, closed paths, outline groups, River sources, and TileMap sources, along with neighbouring coverage bakes, managed depth and flow painting, and batch Depth/Flow baking. The independent-basin projection model is also available for continuous chunked water. These features are implemented and included in the first release. Your game loads the chunk scenes. The bundled water components preserve their last states and skip incomplete responses while required chunk samples are unavailable.

What limits should I plan around?

Each surface or World chunk has eight analytic wake slots, eight ripple slots, and eight displacement slots. Each surface can render up to 32 underwater sprites. The runtime selects effects within those budgets and exposes diagnostics when sources compete for them. Wake foam trails have their own bounded history. Cost depends on the visible water, map sizes, projection settings, and active effects. Off-screen upload culling does not unload textures or eliminate all CPU work. Profile the scene on your target hardware.

When will it be available?

The first public release is planned for Q4 2026.

Further reading

Read the technical background

Last updated .