World building / Water · In the engine
A real ocean, for half a millisecond of a frame.
Talos Engine simulates the sea as a spectrum of real waves: wind sea and swell, summed, in any weather you ask for. The picture and the physics read the same waves, so a hull rides the crest you see.
A 13 m/s wind and a 2 m swell, low sun ahead.
- 0.43 to 0.57 msfor the open ocean, at High quality on an RTX 3080
- 0.16 to 0.19 msat Low quality, same card
- 0 mswhen a scene has no sea
In the engine Shipped in v0.6.0, Beta. The sky in these clips is the new cloud style, which is in development. The clouds page
Open ocean
The same sea, from the deck and from the waterline.
Heavy weather
Into a gale, on the same waves.
The shoreline · Coming next
Put a sea beside a terrain. The shore is there.
The engine reads the ground under the sea from the scene itself, and the waves respond to it. There is nothing to set up.
Along the waterline: foam left on the wet sand. The same beach from a raised view.
Waves feel the bottom
Swell slows, steepens and bends toward the beach as the water gets shallow.
Breakers
A wave near its breaking depth leans and is thrown forward, white water rolling down its face.
Surf and swash
Broken waves run in, leave foam that thins into lace, and send a sheet of water up the sand.
Wet sand
The beach stays dark and glossy up to the line the last waves reached.
Clear shallows
See-through at the edge over pale sand, deepening to turquoise, then to the open sea's blue.
Tune it, or leave it
Five numbers set the run-up, the foam and the wet sand, in the scene file or the editor.
Coming next Built and on the engine's main branch; not in a release yet.
What it is
Describe the weather. The engine works out the waves.
A 13 m/s wind over 200 km of open water, and a 2 m swell arriving from a storm somewhere else. Change the numbers and the sea changes with them. Give it sea states on a timeline and the weather builds and falls on its own.
The whole sea in these clips
"ocean": {
"seaLevel": 0,
"seed": 7,
"layers": [
{
"kind": "wind",
"windSpeedMps": 13,
"fetchKm": 200
},
{
"kind": "swell",
"heightM": 2.0,
"periodS": 11
}
]
}What you get
Weather, foam, and things that float.
Wind sea and swell, summed
Up to six layers, each with its own direction.
Weather on a timeline
Sea states from Beaufort 0 to 12, blended smoothly.
Whitecaps, foam and spray
Crests break in strong wind and leave foam that drifts and fades.
Light through water
Five water types, from clear ocean blue to green coastal water.
Above and below
Under the surface: light fading with depth, and shafts of sunlight.
Things float on it
One component on a body and it rides the waves you see.
The same seed gives the same waves, and a replay on the same machine gives the same sea.

What it costs
About 3% of a 60 fps frame.
The open ocean takes 0.43 to 0.57 ms at High quality on an RTX 3080, from a light breeze to a storm.
A scene without an ocean runs no water pass and allocates nothing for it.
| View | Low, ms | High, ms |
|---|---|---|
| Light breeze (Beaufort 2) | 0.16 | 0.43 |
| Strong breeze (Beaufort 6) | 0.17 | 0.50 |
| Storm (Beaufort 10) | 0.19 | 0.57 |
| Under the surface | 0.21 | 0.58 |
| A coast in view, with the shoreline (coming next) | 0.23 | 0.61 |
| Surf filling the view, over a depth map | 0.37 | 0.82 |
| A scene with no ocean | 0 | 0 |
A shore costs a little more, because the surf, the swash and the wet sand are drawn too: about 0.1 ms more at High with a coast in view.
At 2560x1440 the open ocean takes 0.20 to 0.26 ms at Low and 0.59 to 0.81 ms at High.
Measured on one graphics card, an RTX 3080, at 1920x1080 with the engine's own water bench: the median of 150 frames, the water's passes added together. Only Low and High were measured. These are the water's passes, not a game's frame rate.
For AI agents and scripts
The sea is data an agent can write.
The ocean block is plain JSON with documented ranges, and the engine's validator names any value that is out of range. While the scenario runs, a script can read the sea and change it.
In a script
// height and motion at a point
ctx.water.sample(x, z)
// a storm, over thirty seconds
ctx.water.setSea({ beaufort: 8, blendS: 30 })
// a ripple
ctx.water.poke(x, z)What it does not do
The limits, stated plainly.
- The picture is the high-definition renderer's, the shoreline included. The simulation and floating bodies work in the standard renderer too, which draws no ocean.
- The shoreline that needs no setup is not in a release yet. In the released engine, waves break over a shore where the scene gives the sea a depth map.
- Breakers lean and are thrown forward; they do not curl over into a tube.
- The shoreline is the picture: a body near a beach still floats on open-water waves unless the scene gives the sea a depth map.
- Only the Low and High presets were measured, on one graphics card.
- Every clip here has a fixed camera and was recorded frame by frame: it shows the picture, not a frame rate.
Questions
- Is this an FFT ocean?
- Yes. The waves come from a wind-sea spectrum and swell, transformed on the GPU each frame at several scales, so there is detail from hundreds of meters down to ripples.
- Does the physics use the picture?
- No. Bodies read a CPU copy of the same waves, so floating works on a server with no screen.
- Can I have lakes and rivers?
- Yes. They are separate features, listed with the rest of world building.
A sea your scenario can sail on.
In the engine today. Bring your scenario to a pilot.






