A flat surface that moves up and down can look like a blanket. Water needs waves that travel, light that changes with the viewing angle, foam or depth near shore, and enough variation to hide the repeating pattern.
Every one of those tricks costs something. The IslandLab ocean changes from version to version because the rest of the world changes too.
V1: the ocean creates the place
V1 combines waves moving in several directions. The water shifts sideways as well as vertically, which keeps it from looking like one long ridge. Shore fading, foam, and stronger reflections near the horizon help the island sit inside the water.
V2: a simpler sea makes room for people
V2 uses three vertical sine waves. It is a cheaper surface than V1 because this version spends its attention on residents, routes, needs, facts, and the visible World Lanes.
This was an important project lesson. Not every system has to become more complex in every version. Sometimes the world moves forward because one part becomes simpler.
V3: the storm reaches the shore
V3 returns to four directional waves, calculates matching surface normals, and adds nearshore fading, foam, ripples, and breaker bands. Its look changes as the storm repairs progress.
A second mirrored rendering of the whole scene was considered and rejected. V3 already had dense plants, wildlife, rain, clouds, debris, characters, a ship, and post-processing. View angle, color, foam, and motion suggested reflection without drawing the whole island twice.
V4: a compact sea between three islands
V4 uses three directional wave layers. The model is smaller because the ocean now has to support docks, ship steering, crossings, and three different terrain profiles.
How the rendering works
V1 uses Gerstner-style motion in a GPU shader with shoreline attenuation, Fresnel reflection, and foam. The terrain heights are baked on the CPU while the water moves on the GPU.
V2 sums three vertical sine waves. V3 uses four bounded Gerstner waves, analytic normals from the same wave definition, shore bands, and weather-linked presentation.
V4 uses three Gerstner-style layers with lateral and vertical displacement. Its current path is local Three.js r185 WebGL with ACES tone mapping and EffectComposer bloom. The post-processing factory rejects WebGPU. Vendor files alone do not mean that WebGPU is active.
